diff --git a/public/static/.gitignore b/public/static/.gitignore
deleted file mode 100644
index c96a04f..0000000
--- a/public/static/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*
-!.gitignore
\ No newline at end of file
diff --git a/public/static/admin_static/css/admin.css b/public/static/admin_static/css/admin.css
new file mode 100644
index 0000000..6b5eec4
--- /dev/null
+++ b/public/static/admin_static/css/admin.css
@@ -0,0 +1,743 @@
+@import "../lib/layui/css/layui.css";
+@import "../lib/fonts/iconfont.css";
+@import "../css/jquery.contextMenu.css";
+
+/*边距*/
+.ptb20{
+ padding-top: 20px;
+ padding-bottom: 20px;
+}
+.ptb10{
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+#navBar .layui-nav-child {
+ overflow: hidden;
+ padding: 0 !important;
+}
+
+#navBar .layui-nav-itemed .layui-nav-child,
+#navBar .layui-nav-child dd {
+ overflow: hidden;
+}
+
+[class^="v-icon"], [class*=" v-icon"] {
+ line-height: inherit;
+ font-size: 16px;
+}
+
+/*不显示滚动条样式*/
+.not-scroll::-webkit-scrollbar {
+ height: 0;
+ width: 0;
+ background: transparent;
+ display: none;
+}
+
+.scrollBody::-webkit-scrollbar {
+ display: none;
+}
+
+/*去掉after*/
+.no-line.layui-this:after {
+ background: transparent !important;
+ color: transparent !important;
+}
+
+/*通用*/
+.v-none-select {
+ -moz-user-select: none; /*火狐*/
+ -webkit-user-select: none; /*webkit浏览器*/
+ -ms-user-select: none; /*IE10*/
+ user-select: none;
+}
+
+.vadmin-text-center {
+ text-align: center;
+}
+
+.vadmin-bg-20222A {
+ background: #20222A;
+}
+
+.post-left220 {
+ left: 220px !important;
+}
+
+.flex-vc {
+ display: flex !important;
+ display: -webkit-flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+}
+
+.pl0 {
+ padding-left: 0 !important;
+}
+
+.pr0 {
+ padding-right: 0 !important;
+}
+
+.pl10 {
+ padding-left: 10px !important;
+}
+
+.pr10 {
+ padding-right: 10px !important;
+}
+
+#noticeQQ {
+ cursor: pointer;
+ color: #FF5722;
+ font-weight: bolder;
+}
+
+/*框架布局样式*/
+.vadmin-header .layui-nav-bar,
+.vadmin-header .layui-nav-tree .layui-nav-itemed:after {
+ background: #20222A !important;
+ bottom: auto;
+ top: 0 !important;
+ height: 2px;
+}
+
+.vadmin-header .layui-nav .layui-this:after {
+ background: transparent !important;
+ color: transparent !important;
+}
+
+.layui-side-menu, .layadmin-pagetabs .layui-tab-title li:after, .layadmin-pagetabs .layui-tab-title li.layui-this:after, .layui-layer-admin .layui-layer-title, .layadmin-side-shrink .layui-side-menu .layui-nav > .layui-nav-item > .layui-nav-child {
+ /*background: #20222A !important;*/
+ background: #001529 !important;
+}
+
+.layui-tab-brief > .layui-tab-title .layui-this {
+ color: #000;
+}
+
+/*在tab导航中去掉首页标签的删除按钮*/
+.v-tab-title li strong[is-close="false"] ~ i.layui-tab-close,
+.v-tab-title li[tab="index"] i.layui-tab-close {
+ display: none !important;
+}
+
+/*头部*/
+.vadmin .vadmin-header {
+ background: #FFFFFF;
+ height: 49px;
+ line-height: 49px;
+ border-bottom: 1px solid #f6f6f6;
+}
+
+.vadmin-header .layui-nav-item .layui-icon {
+ font-size: 16px;
+}
+
+.vadmin-header .layui-nav .layui-nav-item a,
+.vadmin-header .layui-nav-child dd.layui-this a {
+ color: #000;
+}
+
+#userInfo .layui-this,
+#userInfo .layui-this a {
+ background: transparent;
+}
+
+#userInfo .layui-this a:hover {
+ background: #f2f2f2;
+}
+
+/*天气样式*/
+.weather {
+ color: #000;
+}
+
+#tp-weather-widget .tpwthwidt .title_2I35arv,
+#tp-weather-widget .tpwthwidt .text_1vUR5ag {
+ margin: 0 !important;
+ color: #000 !important;
+}
+
+/*菜单显隐按钮*/
+.v-show-menu {
+ font-size: 18px;
+}
+
+.v-show-menu .v-menu-hide:before {
+ content: "\e66b";
+}
+
+#fullScreen i.vicon-screen-restore:before {
+ content: "\e758";
+}
+
+.vadmin-header .layui-input-search {
+ display: inline-block;
+ vertical-align: middle;
+ height: 32px;
+ border: none;
+ cursor: text;
+}
+
+.vadmin-header .layui-nav .layui-nav-item {
+ height: 49px;
+ line-height: 49px;
+}
+
+.vadmin-header .layui-layout-left .layui-nav-item {
+ margin: 0 20px;
+}
+
+.vadmin-header .layui-layout-left .layui-nav-item.layui-this:after {
+ display: none !important;
+}
+
+.vadmin-header .layui-layout-left .layui-nav-item a {
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+.vadmin .menu-switch {
+ width: 30px;
+ height: 30px;
+ position: relative;
+ left: 220px;
+ top: 16px;
+ color: #FFF;
+ text-align: center;
+ line-height: 30px;
+ cursor: pointer;
+ z-index: 9999;
+}
+
+.vadmin-header .layui-nav .layui-nav-more {
+ border-color: #000 transparent transparent;
+}
+
+.vadmin-header .layui-nav .layui-nav-mored,
+.vadmin-header .layui-nav-itemed > a .layui-nav-more {
+ border-color: transparent transparent #000;
+}
+
+.vadmin-header .layui-nav-child {
+ top: 50px;
+}
+
+.icon-head-i {
+ font-size: 18px;
+ padding-right: 5px;
+ /*color:#333!important;*/
+}
+
+/*左边菜单导航*/
+.v-left {
+ top: 0 !important;
+ width: 220px !important;
+ z-index: 9999;
+}
+
+.v-left .vadmin-logo {
+ line-height: 49px;
+ text-align: center;
+ color: #FFF;
+ font-size: 16px;
+ position: fixed;
+ left: 0;
+ top: 0;
+ z-index: 1002;
+ width: 220px;
+ height: 49px;
+ padding: 0 15px;
+ box-sizing: border-box;
+ overflow: hidden;
+ font-weight: 300;
+ background-repeat: no-repeat;
+ background-position: center center;
+ background: #20222A;
+}
+
+.layui-side-menu .layui-nav {
+ width: 220px;
+ background: 0 0;
+}
+
+.layui-side-menu .layui-side-scroll {
+ width: 240px !important;
+}
+
+.layui-side-menu .layui-side-scroll:before {
+ content: " ";
+ height: 50px;
+ line-height: 50px;
+ display: flex;
+ width: 1px;
+}
+
+.vadmin-side {
+ width: 240px !important;
+ position: relative;
+ width: 220px;
+ height: 100%;
+ overflow-x: hidden;
+}
+
+.vadmin-side .user-photo {
+ /*margin-top: 50px;*/
+ width: 220px !important;
+}
+
+.v-left.layui-side-menu .layui-nav .layui-nav-item a,
+.v-left.layui-side-menu .layui-nav .layui-nav-item .layui-nav-child a {
+ height: 40px;
+ line-height: 40px;
+ /*padding-left: 25px;*/
+ padding-left: 45px;
+ padding-right: 30px;
+ color: hsla(0,0%,100%,.7);
+ /*color: #f2f2f2;*/
+}
+
+.v-left.layui-side-menu .layui-nav .layui-nav-item.layui-this a,
+.v-left.layui-side-menu .layui-nav .layui-nav-item.layui-this .layui-nav-child a {
+ color: #FFF !important;
+}
+
+.v-left.layui-side-menu .layui-nav-item a:hover {
+ background-color: #4E5465;
+ color:#ffffff;
+}
+
+.v-left.layui-side-menu .layui-nav .layui-nav-item .layui-nav-child a:hover {
+ color:#ffffff;
+}
+
+.v-left.layui-side-menu .layui-this a:hover {
+ background-color: inherit;
+}
+
+.v-left.layui-side-menu .layui-nav .layui-nav-item .layui-icon,
+.v-left.layui-side-menu .layui-nav .layui-nav-item a i {
+ position: absolute;
+ padding-right: 10px;
+ left: 20px;
+}
+
+.v-left.layui-side-menu .layui-nav .layui-nav-item .layui-nav-child a i {
+ position: static !important;
+ padding-right: 10px;
+}
+
+/*第三级菜单及其一下的缩进样式*/
+#navBar .layui-nav-child .layui-nav-child > dd > a {
+ padding-left: 65px;
+}
+
+/*第四级菜单及其一下的缩进样式*/
+#navBar .layui-nav-child .layui-nav-child .layui-nav-child > dd > a {
+ padding-left: 90px;
+}
+
+/*第五级菜单及其一下的缩进样式*/
+#navBar .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child > dd > a {
+ padding-left: 115px;
+}
+
+.v-left .user-photo {
+ width: 200px;
+ height: 120px;
+ padding: 15px 0 5px;
+}
+
+.v-left .user-photo a.img {
+ display: block;
+ width: 80px;
+ height: 80px;
+ margin: 0 auto 10px;
+}
+
+.v-left .user-photo a.img img {
+ display: block;
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ border: 4px solid #44576b;
+ box-sizing: border-box;
+}
+
+.v-left .user-photo p {
+ display: block;
+ width: 100%;
+ height: 25px;
+ color: hsla(0,0%,100%,.7);
+ text-align: center;
+ font-size: 12px;
+ white-space: nowrap;
+ line-height: 25px;
+ overflow: hidden;
+}
+
+#navBar ul {
+ margin: 0 !important;
+}
+
+/*顶部tab标签样式*/
+.v-tab {
+ background: #F5F7F9;
+}
+.vadmin-pagetabs {
+ padding: 0 80px 0 40px;
+ background-color: transparent;
+ width: 100%;
+ position: absolute;
+ height: 40px;
+ z-index: 1;
+}
+.vadmin-tabs-control {
+ height: 32px;
+ line-height: 32px;
+ position: absolute;
+ top: 4px;
+ width: 32px;
+ right: 4px;
+ text-align: center;
+ cursor: pointer;
+ transition: all .3s;
+ -webkit-transition: all .3s;
+ background: #F5F7F9;
+ /*border-left: 1px solid #E6E6E6;*/
+ /*border-bottom: 1px solid #E6E6E6;*/
+ /*background: #FFF;*/
+ z-index: 10;
+}
+.vadmin-tabs-control:hover {
+ /*background: #F2F2F2;*/
+ color: #009688;
+}
+.v-tab .move-left {
+ left: 0;
+ border-left: none;
+}
+.v-tab .move-right {
+ right: 40px;
+}
+.layui-icon-down {
+ right: 0;
+}
+.vadmin-tabs-select.layui-nav {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ padding: 0;
+ background: 0 0;
+}
+
+/**tab的菜单**/
+.vadmin-nav a,
+.vadmin-tab a{
+ cursor: pointer;
+}
+.v-right-nav-menu{
+ top:0;
+ right: 0;
+ width: 40px;
+ height: 40px;
+ line-height: normal;
+ background: #F5F7F9;
+ display: flex;
+ align-items: center;
+}
+.vadmin-tab{
+ height: 32px;
+ line-height: 32px;
+ width: 32px;
+}
+.vadmin-tab .vadmin-tab-item .vadmin-link {
+ display: block;
+ width: 100%;
+ height: 100%;
+ background: #FFFFFF;
+ border-radius: 3px;
+}
+
+.v-right-nav-menu:hover .vadmin-tab-item .vadmin-tab-child {
+ display: block !important;
+}
+
+.vadmin-tab .vadmin-tab-item .vadmin-tab-child {
+ position: absolute;
+ top: 40px;
+ right: 0;
+ display: none;
+ white-space: nowrap;
+ line-height: 36px;
+ padding: 5px 0;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, .12);
+ border: 1px solid #d2d2d2;
+ background-color: #fff;
+ z-index: 100;
+ border-radius: 2px;
+}
+
+.vadmin-tab .vadmin-tab-item a {
+ display: block;
+ padding: 0 20px;
+ color: #000;
+ transition: all .3s;
+ -webkit-transition: all .3s;
+ font-size: 14px;
+}
+.vadmin-tab .vadmin-tab-item a:hover {
+ background: #F5F7F9;
+}
+.vadmin-tab .vadmin-tab-item .vadmin-tab-child:visited {
+ display: none !important;
+}
+
+.v-tab .layui-tab-title {
+ margin: 0 80px 0 40px;
+ overflow-x: hidden !important;
+ overflow-y: hidden !important;
+ width: max-content !important;
+ z-index: 9;
+ position: relative;
+ left: 0;
+ height: 40px;
+ line-height: 40px;
+ border: 0;
+}
+.v-tab .layui-tab-title li{
+ height: 32px;
+ line-height: 32px;
+ background: #fff;
+ border-radius: 3px;
+ margin-right: 15px;
+}
+.v-tab .layui-tab-brief > .layui-tab-more li.layui-this,
+.v-tab .layui-tab-brief > .layui-tab-title .layui-this,
+.v-tab .layui-tab-title li.layui-this {
+ background-color: #ffffff;
+ color: #009688;
+ /*background: #F6F6F6;*/
+}
+
+.v-tab .layui-tab-brief > .layui-tab-more li.layui-this:after,
+.v-tab .layui-tab-brief > .layui-tab-title .layui-this:after,
+.v-tab .layui-tab-title .layui-this:after {
+ display: none;
+}
+
+.v-tab .layui-tab-title .layui-this:after {
+ display: none;
+}
+
+.v-tab-title cite {
+ padding-left: 5px;
+ font-style: normal;
+}
+
+/*中国天气样式*/
+.weather-v {
+ height: 49px;
+ line-height: 49px;
+}
+
+.weather-v .iframe-style {
+ /*height: 415px;*/
+ /*height: 375px;*/
+ height: 50px;
+ padding-top: 9px;
+ box-sizing: border-box;
+}
+
+.weather-v .iframe-style:hover {
+ height: 400px;
+}
+
+/*主体内容样式*/
+.vadmin .content-body {
+ position: absolute;
+ top: 50px;
+ right: 0;
+ bottom: 0;
+ left: 220px;
+ z-index: 1;
+ overflow: hidden
+}
+
+.vadmin-tabs-select.layui-nav .layui-nav-item {
+ line-height: 40px;
+}
+
+.v-nav-item {
+ height: 49px;
+ line-height: 49px;
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ font-size: 14px;
+ width: auto;
+}
+
+/*主体内容选项卡内容样式*/
+.content-body .layui-tab {
+ margin: 0;
+ /*position: relative;*/
+}
+
+.vadmin .content-body .layui-tab-content {
+ position: absolute;
+ top: 40px;
+ bottom: 0;
+ width: 100%;
+ padding: 0;
+ overflow: hidden;
+ left: 0;
+ right: 0;
+}
+
+/*使iframe高度100%,它的父类高度也需要100%*/
+.vadmin .content-body .layui-tab-content .layui-tab-item {
+ height: 100%;
+ padding:10px;
+}
+
+/*使iframe高度100*/
+.vadmin .content-body .layui-tab-content .layui-tab-item iframe {
+ height: 100%
+}
+
+/**隐藏左侧菜单**/
+.layui-layout-admin.v-left-hide .v-left,
+.layui-layout-admin.v-left-hide .v-left .vadmin-logo {
+ left: -220px;
+}
+
+.layui-layout-admin.v-left-hide .layui-header .layui-layout-left {
+ left: -20px;
+}
+
+.layui-layout-admin.v-left-hide .content-body,
+.layui-layout-admin.v-left-hide .layui-footer {
+ left: 0;
+}
+
+#vae_admin_index_note {
+ padding:0;
+}
+#vae_admin_index_note textarea {
+ border:0;
+}
+
+.layui-colorpicker {
+ border:0;
+}
+
+
+/*
+* 以下都是移动端的处理响应
+*/
+
+/*这里只是给元素加一些额外的效果也可以,去掉媒体查询效果一样*/
+@media screen {
+ .layui-layout-admin .v-left,
+ .v-left .vadmin-logo,
+ .layui-header .layui-layout-left,
+ .layui-layout-admin .content-body,
+ .layui-layout-admin .layui-footer {
+ transition: left .5s;
+ }
+}
+
+/*移动端遮罩层*/
+.v-make {
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ z-index: 9998;
+ background: rgba(0, 0, 0, .5);
+ display: none;
+}
+
+@media screen and (max-width: 970px) {
+ /*当屏幕宽度小于970时执行*/
+ .v-hide-md {
+ display: none !important;
+ }
+}
+
+@media screen and (max-width: 768px) {
+ [pc-show] {
+ display: none !important;
+ }
+
+ .layui-layout-admin .v-left {
+ position: fixed;
+ }
+
+ .v-input-search {
+ width: 7rem;
+ }
+
+ .layui-layout-admin.v-left-hide .v-left,
+ .layui-layout-admin.v-left-hide .v-left .vadmin-logo {
+ left: 0;
+ }
+
+ .vadmin-header .layui-layout-left .layui-nav-item {
+ margin: 0 5px;
+ }
+
+ .layui-layout-admin.v-left-hide .v-make {
+ display: block;
+ }
+
+ .layui-layout-admin .v-left,
+ .v-left .vadmin-logo {
+ transition: left .5s;
+ left: -220px;
+ }
+
+ .layui-header .layui-layout-left {
+ transition: left .5s;
+ left: -20px;
+ }
+
+ .layui-layout-admin .content-body,
+ .layui-layout-admin .layui-footer {
+ transition: left .5s;
+ left: 0;
+ }
+
+ .v-left .vadmin-side .user-photo {
+ height: auto;
+ margin: 0 auto;
+ }
+
+ .v-left .user-photo a.img {
+ width: 50px;
+ height: 50px;
+ }
+
+ /*
+ * 移动端菜单的宽度
+ */
+ .layui-side-menu .layui-side-scroll {
+ width: 200px !important;
+ }
+
+ .v-left,
+ .v-left .vadmin-logo,
+ .v-left .vadmin-side .user-photo,
+ .v-left.layui-side-menu .layui-nav {
+ width: 180px !important;
+ margin: 0;
+ }
+}
\ No newline at end of file
diff --git a/public/static/admin_static/css/jquery.contextMenu.css b/public/static/admin_static/css/jquery.contextMenu.css
new file mode 100644
index 0000000..e59481c
--- /dev/null
+++ b/public/static/admin_static/css/jquery.contextMenu.css
@@ -0,0 +1,44 @@
+.ul-context-menu {
+ list-style:none;
+ position:absolute;
+ top:0;
+ left:0;
+ z-index:9999;
+ padding:5px 0;
+ min-width:80px;
+ margin:0;
+ display:none;
+ font-family:微软雅黑;
+ font-size:14px;
+ background-color:#fff;
+ border:1px solid rgba(0, 0, 0, .15);
+ box-sizing:border-box;
+ border-radius:4px;
+ -webkit-box-shadow:0 4px 12px rgba(0, 0, 0, .1);
+ -moz-box-shadow:0 4px 12px rgba(0, 0, 0, .1);
+ -ms-box-shadow:0 4px 12px rgba(0, 0, 0, .1);
+ -o-box-shadow:0 4px 12px rgba(0, 0, 0, .1);
+ box-shadow:0 4px 12px rgba(0, 0, 0, .1)
+}
+.ul-context-menu .ui-context-menu-item {
+ margin:0;
+ padding:0
+}
+.ul-context-menu .ui-context-menu-item a {
+ display:block;
+ padding:0 10px;
+ color:#333;
+ white-space:nowrap;
+ text-decoration:none
+}
+.ul-context-menu .ui-context-menu-item a:hover {
+ text-decoration:none;
+ color:#262626
+}
+.ul-context-menu .ui-context-menu-item .icon {
+ width:16px;
+ height:16px;
+ margin-right:8px;
+ vertical-align:middle;
+ border:0
+}
diff --git a/public/static/admin_static/css/nprogress.css b/public/static/admin_static/css/nprogress.css
new file mode 100644
index 0000000..05ba011
--- /dev/null
+++ b/public/static/admin_static/css/nprogress.css
@@ -0,0 +1,74 @@
+/* Make clicks pass-through */
+#nprogress {
+ pointer-events: none;
+}
+
+#nprogress .bar {
+ background: #29d;
+
+ position: fixed;
+ z-index: 1031;
+ top: 0;
+ left: 0;
+
+ width: 100%;
+ height: 2px;
+}
+
+/* Fancy blur effect */
+#nprogress .peg {
+ display: block;
+ position: absolute;
+ right: 0px;
+ width: 100px;
+ height: 100%;
+ box-shadow: 0 0 10px #29d, 0 0 5px #29d;
+ opacity: 1.0;
+
+ -webkit-transform: rotate(3deg) translate(0px, -4px);
+ -ms-transform: rotate(3deg) translate(0px, -4px);
+ transform: rotate(3deg) translate(0px, -4px);
+}
+
+/* Remove these to get rid of the spinner */
+#nprogress .spinner {
+ display: block;
+ position: fixed;
+ z-index: 1031;
+ top: 15px;
+ right: 10px;
+}
+
+#nprogress .spinner-icon {
+ width: 18px;
+ height: 18px;
+ box-sizing: border-box;
+
+ border: solid 2px transparent;
+ border-top-color: #29d;
+ border-left-color: #29d;
+ border-radius: 50%;
+
+ -webkit-animation: nprogress-spinner 400ms linear infinite;
+ animation: nprogress-spinner 400ms linear infinite;
+}
+
+.nprogress-custom-parent {
+ overflow: hidden;
+ position: relative;
+}
+
+.nprogress-custom-parent #nprogress .spinner,
+.nprogress-custom-parent #nprogress .bar {
+ position: absolute;
+}
+
+@-webkit-keyframes nprogress-spinner {
+ 0% { -webkit-transform: rotate(0deg); }
+ 100% { -webkit-transform: rotate(360deg); }
+}
+@keyframes nprogress-spinner {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
diff --git a/public/static/admin_static/css/theme.css b/public/static/admin_static/css/theme.css
new file mode 100644
index 0000000..8714ca5
--- /dev/null
+++ b/public/static/admin_static/css/theme.css
@@ -0,0 +1,2 @@
+.vadmin .v-left .vadmin-nav .layui-nav-item .layui-nav-child .layui-this a,.vadmin .v-left .vadmin-nav .layui-nav-item.layui-this a,.layui-nav-tree .layui-nav-bar{background:#009688;color:#ffffff;}
+.v-tab .layui-tab-title li.layui-this{color:#009688;}
\ No newline at end of file
diff --git a/public/static/admin_static/images/vae.jpg b/public/static/admin_static/images/vae.jpg
new file mode 100644
index 0000000..8543bd8
Binary files /dev/null and b/public/static/admin_static/images/vae.jpg differ
diff --git a/public/static/admin_static/js/admin.js b/public/static/admin_static/js/admin.js
new file mode 100644
index 0000000..08ee5b2
--- /dev/null
+++ b/public/static/admin_static/js/admin.js
@@ -0,0 +1,488 @@
+/^http(s*):\/\//.test(location.href) || alert('请先部署到 localhost 下再访问');
+
+var objvTab = "";
+layui.config({
+ base: '/static/admin_static/module/'
+}).define(["element", "layer", "vTab", "vContextMenu", 'colorpicker', 'nprogress', 'vae'], function () {
+ var $ = layui.jquery;
+ var layer = layui.layer,colorpicker = layui.colorpicker,vae = layui.vae;
+
+ // 加载主题
+ var theme = layui.data('vaeAdmin_theme').color || ['#009688','#ffffff'];
+ //左侧菜单选中时的主题颜色
+ document.styleSheets[1].cssRules[0].style.background=theme[0];
+ document.styleSheets[1].cssRules[0].style.color=theme[1];
+ // tab主题颜色
+ document.styleSheets[1].cssRules[1].style.color=theme[0];
+
+
+ var vTab = layui.vTab({
+ // 菜单请求路径
+ url: "/index.php/admin/index/getAdminMenuList",
+ // 允许同时选项卡的个数
+ openTabNum: 30,
+ // 如果返回的结果和navs.json中的数据结构一致可省略这个方法
+ parseData: function (data) {
+ return data.data;
+ }
+ });
+ objvTab = vTab;
+ /**
+ * 左侧导航渲染完成之后的操作
+ */
+ vTab.render(function () {
+ /**tab栏的鼠标右键事件**/
+ $("body .v-tab").vContextMenu({
+ width: 'auto',
+ itemHeight: 30,
+ menu: [
+ {
+ text: "定位所在页",
+ icon: "v-icon v-icon-location",
+ callback: function () {
+ vTab.positionTab();
+ }
+ },
+ {
+ text: "关闭当前页",
+ icon: "v-icon v-icon-roundclose",
+ callback: function () {
+ vTab.tabClose(1);
+ }
+ },
+ {
+ text: "关闭其他页",
+ icon: "v-icon v-icon-roundclose",
+ callback: function () {
+ vTab.tabClose(2);
+ }
+ },
+ {
+ text: "关闭所有页",
+ icon: "v-icon v-icon-roundclose",
+ callback: function () {
+
+ vTab.tabClose(3);
+ }
+ }
+ ]
+ });
+ });
+
+ //关掉除当前外的TAB
+ vTab.tabClose(2);
+
+ //判断是否锁定了界面
+ if(layui.data('vaeAdmin_lock').lock){
+ layer.prompt({
+ btn: ['立即解锁'],
+ title: ['屏幕已锁定,请输入解锁密码','background:'+theme[0]+';color:'+theme[1]],
+ closeBtn: 0,
+ formType: 1
+ }, function (value, index, elem) {
+ if (value.length < 1) {
+ layer.msg('请输入解锁密码');
+ return false;
+ } else {
+ if(value == layui.data('vaeAdmin_lock').lock){
+ layer.close(index);
+ $(".yy").hide();
+ //清除密码
+ layui.data('vaeAdmin_lock', {
+ key: 'lock'
+ ,remove: true
+ });
+ layer.msg('解锁成功,欢迎回来!');
+ }else{
+ layer.msg('密码错误', {anim: 6, time: 1000});
+ return false;
+ }
+ }
+ });
+ }
+
+
+ /**
+ * 添加新窗口
+ */
+ $("body").on("click", "#navBar .layui-nav-item a, #userInfo a", function () {
+ NProgress.start();
+ // 如果不存在子级
+ if ($(this).siblings().length == 0) {
+ vTab.tabAdd($(this));
+ }
+ // 关闭其他展开的二级标签
+ $(this).parent("li").siblings().removeClass("layui-nav-itemed");
+ if (!$(this).attr("lay-id")) {
+ var topLevelEle = $(this).parents("li.layui-nav-item");
+ var childs = $("#navBar > li > dl.layui-nav-child").not(topLevelEle.children("dl.layui-nav-child"));
+ childs.removeAttr("style");
+ }
+ NProgress.done();
+ });
+
+ /**
+ * 左侧菜单展开动画
+ */
+ $("#navBar").on("click", ".layui-nav-item a", function () {
+ if (!$(this).attr("lay-id")) {
+ var superEle = $(this).parent();
+ var ele = $(this).next('.layui-nav-child');
+ var height = ele.height();
+ ele.css({"display": "block"});
+ // 是否是展开状态
+ if (superEle.is(".layui-nav-itemed")) {
+ ele.height(0);
+ ele.animate({height: height + "px"}, function () {
+ ele.css({height: "auto"});
+ });
+ } else {
+ ele.animate({height: 0}, function () {
+ ele.removeAttr("style");
+ });
+ }
+ }
+ });
+
+ /**
+ * 左边菜单显隐功能
+ */
+ $(".v-menu").click(function () {
+ $(".layui-layout-admin").toggleClass("v-left-hide");
+ $(this).find("i").toggleClass("v-menu-hide");
+ localStorage.setItem("isResize", false);
+ setTimeout(function () {
+ localStorage.setItem("isResize", true);
+ }, 1200);
+ });
+
+ /**
+ * 移动端的处理事件
+ */
+ $("body").on("click", ".layui-layout-admin .v-left a[data-url], .v-make", function () {
+ if ($(".layui-layout-admin").hasClass("v-left-hide")) {
+ $(".layui-layout-admin").removeClass("v-left-hide");
+ $(".v-menu").find('i').removeClass("v-menu-hide");
+ }
+ });
+
+ /**
+ * tab左右移动
+ */
+ $("body").on("click", ".vNavMove", function () {
+ var moveId = $(this).attr("data-id");
+ var that = this;
+ vTab.navMove(moveId, that);
+ });
+
+ /**
+ * 刷新当前tab页
+ */
+ $("body").on("click", ".v-refresh", function () {
+ NProgress.start();
+ vTab.refresh(this, function (vTab) {
+ //刷新之后所处理的事件
+ NProgress.done();
+ });
+ });
+
+ /**
+ * 关闭tab页
+ */
+ $("body").on("click", "#tabAction a", function () {
+ var num = $(this).attr("data-num");
+ vTab.tabClose(num);
+ });
+
+ /**
+ * 键盘的事件监听
+ */
+ $("body").on("keydown", function (event) {
+ event = event || window.event || arguments.callee.caller.arguments[0];
+
+ // 按 Esc
+ if (event && event.keyCode === 27) {
+ console.log("Esc");
+ $("#fullScreen").children("i").eq(0).removeClass("layui-icon-screen-restore");
+ }
+ // 按 F11
+ if (event && event.keyCode == 122) {
+ console.log("F11");
+ $("#fullScreen").children("i").eq(0).addClass("layui-icon-screen-restore");
+ }
+ });
+
+ /**
+ * 全屏/退出全屏
+ */
+ $("body").on("click", "#fullScreen", function () {
+ if ($(this).children("i").hasClass("layui-icon-screen-restore")) {
+ screenFun(2).then(function () {
+ $("#fullScreen").children("i").eq(0).removeClass("layui-icon-screen-restore");
+ });
+ } else {
+ screenFun(1).then(function () {
+ $("#fullScreen").children("i").eq(0).addClass("layui-icon-screen-restore");
+ });
+ }
+ });
+
+ /**
+ * 全屏和退出全屏的方法
+ * @param num 1代表全屏 2代表退出全屏
+ * @returns {Promise}
+ */
+ function screenFun(num) {
+ num = num || 1;
+ num = num * 1;
+ var docElm = document.documentElement;
+
+ switch (num) {
+ case 1:
+ if (docElm.requestFullscreen) {
+ docElm.requestFullscreen();
+ } else if (docElm.mozRequestFullScreen) {
+ docElm.mozRequestFullScreen();
+ } else if (docElm.webkitRequestFullScreen) {
+ docElm.webkitRequestFullScreen();
+ } else if (docElm.msRequestFullscreen) {
+ docElm.msRequestFullscreen();
+ }
+ break;
+ case 2:
+ if (document.exitFullscreen) {
+ document.exitFullscreen();
+ } else if (document.mozCancelFullScreen) {
+ document.mozCancelFullScreen();
+ } else if (document.webkitCancelFullScreen) {
+ document.webkitCancelFullScreen();
+ } else if (document.msExitFullscreen) {
+ document.msExitFullscreen();
+ }
+ break;
+ }
+
+ return new Promise(function (res, rej) {
+ res("返回值");
+ });
+ }
+
+ /**
+ * 退出操作
+ */
+ $("#logout").click(function () {
+ layer.confirm("确定要退出吗?", {icon: 3, title:['警告','background:'+theme[0]+';color:'+theme[1]]}, function (index) {
+ $.ajax({
+ url:'/index.php/admin/index/adminLogout',
+ type:'post',
+ success:function(e){
+ if(e.code == 200) {
+ layer.msg(e.msg);
+ vTab.removeTabStorage(function (res) {
+ vTab.removeTabStorage();
+ setTimeout(function(){
+ window.location = e.data;
+ },1500);
+ });
+ }
+ }
+ })
+
+ });
+ });
+
+ /**
+ * 锁定账户
+ */
+ $("#lock").click(function () {
+ $(".yy").show();
+ layer.prompt({
+ btn: ['立即锁屏'],
+ title: ['设定密码可锁定屏幕','background:'+theme[0]+';color:'+theme[1]],
+ formType: 1
+ }, function (value, index, elem) {
+ if (value.length < 1) {
+ layer.msg('请先输入解锁密码');
+ return false;
+ } else {
+ layui.data('vaeAdmin_lock', {
+ key: 'lock'
+ ,value: value
+ });
+ layer.close(index);
+ layer.prompt({
+ btn: ['解锁'],
+ title: ['屏幕已锁定,请输入解锁密码','background:'+theme[0]+';color:'+theme[1]],
+ closeBtn: 0,
+ formType: 1
+ }, function (value, index, elem) {
+ if (value.length < 1) {
+ layer.msg('请输入解锁密码');
+ return false;
+ } else {
+ if(value == layui.data('vaeAdmin_lock').lock){
+ layer.close(index);
+ $(".yy").hide();
+ //清除密码
+ layui.data('vaeAdmin_lock', {
+ key: 'lock'
+ ,remove: true
+ });
+ layer.msg('解锁成功,欢迎回来!');
+ }else{
+ layer.msg('密码错误', {anim: 6, time: 1000});
+ return false;
+ }
+ }
+ });
+ }
+ });
+ });
+
+ /**
+ * 点击头像修改资料
+ * @Author 听雨
+ * @DateTime 2020-03-12
+ * @param {[type]} ){ layer.open({ type: 2, content:"/index.php/admin/index/editAdminInfo", title:["修改个人信息",'background:'+theme[0]+';color:'+theme[1]], area: ['50%', '50%'] }) } [description]
+ * @return {[type]} [description]
+ */
+ $('#thumb').click(function(){
+ layer.open({
+ type: 2,
+ content:"/index.php/admin/index/editAdminInfo",
+ title:["修改个人信息",'background:'+theme[0]+';color:'+theme[1]],
+ area: ['50%', '50%']
+ })
+ })
+
+ /**
+ * 便签
+ * @Author 听雨
+ * @DateTime 2020-03-11
+ * @param {[type]} ) { layer.confirm("确定要锁定账户吗?", function (index) { layer.close(index); $(".yy").show(); layer.prompt({ btn: ['确定'], title: '输入密码解锁(123456)', closeBtn: 0, formType: 1 } [description]
+ * @param {[type]} function (value, index, elem) { if (value [description]
+ * @return {[type]} [description]
+ */
+ $("#note").click(function () {
+ let note = layui.data('vaeAdmin_note').note || '这是一个本地的便签';
+ layer.prompt({
+ formType: 2,
+ value: note,
+ title: ['便签','background:'+theme[0]+';color:'+theme[1]],
+ area: ['280px', '140px'], //自定义文本域宽高
+ offset: ['50px', 'calc(100% - 400px)'],
+ btn: false,
+ shade: 0,
+ id: "vae_admin_index_note"
+ });
+ $('#vae_admin_index_note').bind('input propertychange','textarea',function(){
+ var text = $('#vae_admin_index_note textarea').val();
+ layui.data('vaeAdmin_note', {
+ key: 'note'
+ ,value: text
+ });
+ });
+ });
+
+ /**
+ * 清除系统缓存
+ * @Author 听雨
+ * @DateTime 2020-03-09
+ * @param {[type]} e){ var that [description]
+ * @param {[type]} 1000) } else { layer.tips(res.msg,that); $("[vaeyo-loading]").hide(); } } }) } [description]
+ * @return {[type]} [description]
+ */
+ $("#vae-del-cache").on('click', function(e){
+ var that = $(this);
+ layer.confirm('确定要清空系统缓存吗?', {icon: 3, title:['警告','background:'+theme[0]+';color:'+theme[1]]}, function(index){
+ //do something
+ if(that.attr('class') === 'clearThis'){
+ layer.tips('正在努力清理中...',that);
+ return false;
+ }
+ layer.tips('正在清理系统缓存...',that);
+ that.attr('class','clearThis');
+ $.ajax({
+ url:"/index.php/admin/index/cacheClear",
+ success:function(res){
+ that.attr('class','');
+ if(res.code == 200){
+ setTimeout(function(){
+ layer.tips(res.msg,that);
+ },1000)
+ } else {
+ layer.tips(res.msg,that);
+ }
+ }
+ })
+ layer.close(index);
+ });
+ })
+
+ /**
+ * 主题
+ * @Author 听雨
+ * @DateTime 2020-03-09
+ * @param {[type]} color){ layer.msg("换个颜色换种心情"); } [description]
+ * @param {[type]} change: function(color){ var RgbValue [description]
+ * @return {Function} [description]
+ */
+ colorpicker.render({
+ elem: '#vae-color'
+ ,color: theme ? theme[0] : '#009688'
+ ,format: 'rgb'
+ ,predefine: true
+ // ,alpha: true
+ ,size: "xs"
+ ,done: function(color){
+ var RgbValue = color.replace("rgba(", "").replace(")", "");
+ var RgbValueArry = RgbValue.split(",");
+ var $grayLevel = RgbValueArry[0] * 0.299 + RgbValueArry[1] * 0.587 + RgbValueArry[2] * 0.114;
+ var thatColor;
+ if ($grayLevel >= 192) {
+ thatColor = "#000000";
+ } else {
+ thatColor = "#ffffff";
+ }
+ layui.data('vaeAdmin_theme', {
+ key: 'color'
+ ,value: [color,thatColor]
+ });
+ layer.msg("主题设置成功,双击主题按钮可恢复默认");
+ }
+ ,change: function(color){
+ var RgbValue = color.replace("rgba(", "").replace(")", "");
+ var RgbValueArry = RgbValue.split(",");
+ var $grayLevel = RgbValueArry[0] * 0.299 + RgbValueArry[1] * 0.587 + RgbValueArry[2] * 0.114;
+ var thatColor;
+ if ($grayLevel >= 192) {
+ thatColor = "#000";
+ } else {
+ thatColor = "#fff";
+ }
+
+ //左侧菜单选中时的主题颜色
+ document.styleSheets[1].cssRules[0].style.background=color;
+ document.styleSheets[1].cssRules[0].style.color=thatColor;
+ // tab主题颜色
+ document.styleSheets[1].cssRules[1].style.color=color;
+ theme = [color,thatColor];
+ layer.msg("您正在预览主题,点击确定完成主题设置");
+ }
+ });
+
+ $('#vae-color').on('dblclick', function(e){
+ layui.data('vaeAdmin_theme', {
+ key: 'color'
+ ,remove: true
+ });
+ //左侧菜单选中时的主题颜色
+ document.styleSheets[1].cssRules[0].style.background='#009688';
+ document.styleSheets[1].cssRules[0].style.color="#ffffff";
+ // tab主题颜色
+ document.styleSheets[1].cssRules[1].style.color='#009688';
+
+ theme = ['#009688','#ffffff'];
+ layer.msg("主题已成功恢复默认");
+ })
+});
diff --git a/public/static/admin_static/lib/fonts/demo.css b/public/static/admin_static/lib/fonts/demo.css
new file mode 100644
index 0000000..a67054a
--- /dev/null
+++ b/public/static/admin_static/lib/fonts/demo.css
@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+ font-family: "iconfont logo";
+ src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+ src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+ font-family: "iconfont logo";
+ font-size: 160px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+ position: relative;
+}
+
+.nav-tabs .nav-more {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ height: 42px;
+ line-height: 42px;
+ color: #666;
+}
+
+#tabs {
+ border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+ cursor: pointer;
+ width: 100px;
+ height: 40px;
+ line-height: 40px;
+ text-align: center;
+ font-size: 16px;
+ border-bottom: 2px solid transparent;
+ position: relative;
+ z-index: 1;
+ margin-bottom: -1px;
+ color: #666;
+}
+
+
+#tabs .active {
+ border-bottom-color: #f00;
+ color: #222;
+}
+
+.tab-container .content {
+ display: none;
+}
+
+/* 页面布局 */
+.main {
+ padding: 30px 100px;
+ width: 960px;
+ margin: 0 auto;
+}
+
+.main .logo {
+ color: #333;
+ text-align: left;
+ margin-bottom: 30px;
+ line-height: 1;
+ height: 110px;
+ margin-top: -50px;
+ overflow: hidden;
+ *zoom: 1;
+}
+
+.main .logo a {
+ font-size: 160px;
+ color: #333;
+}
+
+.helps {
+ margin-top: 40px;
+}
+
+.helps pre {
+ padding: 20px;
+ margin: 10px 0;
+ border: solid 1px #e7e1cd;
+ background-color: #fffdef;
+ overflow: auto;
+}
+
+.icon_lists {
+ width: 100% !important;
+ overflow: hidden;
+ *zoom: 1;
+}
+
+.icon_lists li {
+ width: 100px;
+ margin-bottom: 10px;
+ margin-right: 20px;
+ text-align: center;
+ list-style: none !important;
+ cursor: default;
+}
+
+.icon_lists li .code-name {
+ line-height: 1.2;
+}
+
+.icon_lists .icon {
+ display: block;
+ height: 100px;
+ line-height: 100px;
+ font-size: 42px;
+ margin: 10px auto;
+ color: #333;
+ -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+ -moz-transition: font-size 0.25s linear, width 0.25s linear;
+ transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+ font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+ /* 通过设置 font-size 来改变图标大小 */
+ width: 1em;
+ /* 图标和文字相邻时,垂直对齐 */
+ vertical-align: -0.15em;
+ /* 通过设置 color 来改变 SVG 的颜色/fill */
+ fill: currentColor;
+ /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+ normalize.css 中也包含这行 */
+ overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+ color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+ color: #666;
+ font-size: 14px;
+ line-height: 1.8;
+}
+
+.highlight {
+ line-height: 1.5;
+}
+
+.markdown img {
+ vertical-align: middle;
+ max-width: 100%;
+}
+
+.markdown h1 {
+ color: #404040;
+ font-weight: 500;
+ line-height: 40px;
+ margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+ color: #404040;
+ margin: 1.6em 0 0.6em 0;
+ font-weight: 500;
+ clear: both;
+}
+
+.markdown h1 {
+ font-size: 28px;
+}
+
+.markdown h2 {
+ font-size: 22px;
+}
+
+.markdown h3 {
+ font-size: 16px;
+}
+
+.markdown h4 {
+ font-size: 14px;
+}
+
+.markdown h5 {
+ font-size: 12px;
+}
+
+.markdown h6 {
+ font-size: 12px;
+}
+
+.markdown hr {
+ height: 1px;
+ border: 0;
+ background: #e9e9e9;
+ margin: 16px 0;
+ clear: both;
+}
+
+.markdown p {
+ margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+ width: 80%;
+}
+
+.markdown ul>li {
+ list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+ margin-left: 20px;
+ padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+ margin: 0.6em 0;
+}
+
+.markdown ol>li {
+ list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+ margin-left: 20px;
+ padding-left: 4px;
+}
+
+.markdown code {
+ margin: 0 3px;
+ padding: 0 5px;
+ background: #eee;
+ border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+ font-weight: 600;
+}
+
+.markdown>table {
+ border-collapse: collapse;
+ border-spacing: 0px;
+ empty-cells: show;
+ border: 1px solid #e9e9e9;
+ width: 95%;
+ margin-bottom: 24px;
+}
+
+.markdown>table th {
+ white-space: nowrap;
+ color: #333;
+ font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+ border: 1px solid #e9e9e9;
+ padding: 8px 16px;
+ text-align: left;
+}
+
+.markdown>table th {
+ background: #F7F7F7;
+}
+
+.markdown blockquote {
+ font-size: 90%;
+ color: #999;
+ border-left: 4px solid #e9e9e9;
+ padding-left: 0.8em;
+ margin: 1em 0;
+}
+
+.markdown blockquote p {
+ margin: 0;
+}
+
+.markdown .anchor {
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ margin-left: 8px;
+}
+
+.markdown .waiting {
+ color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+ opacity: 1;
+ display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+ clear: both;
+}
+
+
+.hljs {
+ display: block;
+ background: white;
+ padding: 0.5em;
+ color: #333333;
+ overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+ color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+ color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+ color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+ color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+ color: #63a35c;
+}
+
+.hljs-tag {
+ color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #795da3;
+}
+
+.hljs-addition {
+ color: #55a532;
+ background-color: #eaffea;
+}
+
+.hljs-deletion {
+ color: #bd2c00;
+ background-color: #ffecec;
+}
+
+.hljs-link {
+ text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ background: none;
+ text-shadow: 0 1px white;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+@media print {
+
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+ background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+ padding: .1em;
+ border-radius: .3em;
+ white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: slategray;
+}
+
+.token.punctuation {
+ color: #999;
+}
+
+.namespace {
+ opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+ color: #9a6e3a;
+ background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+ color: #07a;
+}
+
+.token.function,
+.token.class-name {
+ color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+ color: #e90;
+}
+
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+
+.token.italic {
+ font-style: italic;
+}
+
+.token.entity {
+ cursor: help;
+}
diff --git a/public/static/admin_static/lib/fonts/iconfont.css b/public/static/admin_static/lib/fonts/iconfont.css
new file mode 100644
index 0000000..f3cbb70
--- /dev/null
+++ b/public/static/admin_static/lib/fonts/iconfont.css
@@ -0,0 +1,1361 @@
+@font-face {font-family: "v-icon";
+ src: url('iconfont.eot?t=1571378992759'); /* IE9 */
+ src: url('iconfont.eot?t=1571378992759#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAKTsAAsAAAABa3AAAKSbAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCrAgqE9mCD9Q0BNgIkA4o8C4UgAAQgBYRhB5x2WzMnkYG4zR2VgCionZCovWx1LKnJODbhdoAiuSaogLs+6A6uSPK5qtn/////5yaTMdZ2wG0AoEpq2denaOLKzUnJUqpqOld2GYpFLVVGXX3bp2qygyG7KjLFKmrooRwwih1yXi14qELhdFf2XAw5dllANUhiyqmtw1Lhi8kZ4SWbbFUPGb7qO0OGM+rY3sQjKEcr4X80XSUXdp2lRFvCn/iT4cboEzP8VExkifcWQ2sAo1XMeIeDppjAFfoGtyL+0hhIbTe843S9mbJIu2Yj2lfpwEEL+fYvmuofUA4HxmSuBq/e79enDunpWPjrhr+Ed0jsKa1gysT1h1yYyAqbMtxLNDp630Z4nr+XnTve+K+xt6+hRQG2MZCANgdSlAUU0ARe3vD83Hr//0X+BaNGLKgaGxUrYnS4ESWggBI9EIGZw9xUZGDDqRgFKkOMPOP0Ts8A41o91AvPU/nT5ucDSWt//5noSUcgae0Aanf9L0C7tgO8doiOa8AyAFRi0eSaJlReF5geqEwXeP7Zz92dxbbYRB3TSEikpkksjch9n31V3/K+WCXZvuvL1MoyZ5jyIBKSEVOAjgTdoKC1zb44FhshEVqCVl3e5ID4j4vt/XdyGlozEQbYeEB0E1DJVVRv3ndp/5Kd7J4jeWbaczzjdNMFhLaL1FSWAoWEFzk/1q/0SwOB3sZDmZYDhcBCYQk84wtf7zwIQk4/HKUqJQKqoE9eyXXpe2f+1zUqwnSX3POb/5dPKPQKDQXSrBEAgcjl/TJsdAkm4NVMA2C+nNp79ii9908DdrzLhsASQOp8ILj9XKSrdB2QpVC7si1wmjaAjl0OQQfeP+LPOxfKChkRr2DpIKhXgCutvf+fpeNd91pjgVWWNcmYbJlKqWqfm6P/t0ed4NeNAs85ObItk0wQACzzSDSsHZZO8x+G/Q/M82jBoU/U6fqBeRVyHnmm2puogNNg0bHPt/7z+6nVqVBlhwqY7s+zdTVibBPjNj1WwK7AB4pQAAGD80rOp0dc6oBzAPQQwZi7nyIT1Hy4hlyvRH7Krfqqa9WuP4nsOtY9+90P14TA0BYYccbZ/XVJrskVC9CjpBNgxfz8BdKlOEyzaAQWfHJfJy5pCMy/Oa0WHN7D9gVpo3zRvpxqeS/l7srbpvthgAmMpGGUhlECpFVyYEC2ASWQsA8cRxLrh7RR3pDSjBBrEBtA2iAk7z0keffJFx0ueatLMVUp1V0KdXdNd0XbH9HkOI/wACxrL4Fz/vfTb3bzy/gdJKpFYQxCYizC/b25uZm3Z888Sr/7ZhU19JL9tIQug0N+JBL9WUmpQioQnv9TNWtJBafUXQyti05O1XVXXlHf6/lnBuTODAAuAHK1ACWtASiYpLg2AGotBtkERe0BWu5ZWoeULiaA9PlRGyk5p/aK7nxVSEVXH5SaYhopyu8ALptL7CttGV3txTp74YQ3/yvXuEev216hhIcEEQkiVkKYj/85ZNOemm9viFXAG5IQuwh0g5z2L1Tv9r8+JR2oWKXD3BFVeeMfstn3R3f7VFYeFUUKVaSE6CQzCdx9vWUIUOjHHWh7Nz/AAIdenwByfrI8yyDE4zlrChkhptygg1zTZH19bgJX9jtevsmIACjBgMbdL00s0P6caFx1HXiqNAg8AbjdEBgwC8AhPKfa/Qm71KzNlLS/DsqfA1yAFmgU085arE5WsrBRr/DY5NQevfoFRyakyJg9b8HCRSv64JOv/kUKzL2HxFFYPJFMZe+HI1DRMjDxiUkbxU+yG/GeBWqFmmrYs3ejEsh8PZeIz1VlmRvITVRWe/HDJNIMK5IOTaBxhBKFztGfLJXS0D+tRUBC1uSPizaLHdw0MG2LWpsO6sPzWzJ/n7s/cp/HnM9iMRABQtXYkBiqg3qgC9BrUvMe+gSjjoMJMAWmw9awHxwGS6PhGDjuCVVwFVwH74BH/r/GBgAUA0mgQCga8oNiISZkAnGgiHjlBl8t3g6iGE4gkshUFGpkwTp11G+/BoLJYpOcfpfHF1BCkVgilckVypnTSq2ZNzMyNjFdyFubW1haWdvY2tk7ODo5u7i6uXt4eoHAECgMjkCi0BhsAocnEElkCpVGZzBZbA6XxxcIRWKJNPC7XKFUqTVand5gY2tn7+Do5Ozi6ubu4enl7QMAgsAQqC0GRyBRaAwWZ8cTiCSkZOQUlFTUNLR09AyMTMwsrGzsHJxcp/7Hw8vHLyAoJCwiKiYuISklLSMrJ6+gWCpXqrV6o9lqd7q9/mA4Gk+kAYgwoYwrbazz87Ju+3Fe9/N+v1Qm/85htSxVao1WpzcwHG9Nlhx58hUoVKRYiUYaa6Jps+x0e/1BNRyNJ7P5Yrlabw6Pjk9Oz84vLq+ub27v7h+f3j++wjgQUgBIyxxQ/A+0iLJAT0kiK0RExBAecURaOuGUQeRkVrQsQi2bMGlFJHQivDrDv+GERDGRVA6BEZDASEiiAlIYA2mMhQzGQRYToQyToByToQJToBLTiLgZkMNMyGMWFDAbipgDVeZCtXlQYz7UugjqVEK9KsJvATRYCI0WQZPF0GwJtFgKrZZBm+XQbgV0uBg6rYQuq6DbauhxCfS6lMhYQ4ishT7roN9lMOByIm89DNoAQzbCsE0wYjOM2kIUbCWKtsGYHTBuN0zYA5NqYMpVMK0WZhyAWbfCnHqYdxssuB0W3QFLDsKyO2HFIVjVAGvugnV3w4Z7YNO9sOU3sO1h2HEcdj0Kex6HfU/Bgafh0DNw5AQcOwknnoVTz8GZ5zcwMgVwrhEuvAAlZ+DSi3DlJbj2Ctx4DW69DnfegHtvwoO34NFv4cnb8Ow9ePE7ePU+vPkA3v0ePvwBPn0IXz6Cb3+EHx/Dr0+IkE/hT9daQ8kNlN1CxR1U3UPNA9Q9QsMTNL1Cyxu0vUPHB3R9Qs8X9H3DwA8M/cLIFMZmMDGHqQXMLGFuBQtrWNrAyhbWdrCxh60D7DRw4A8O/cNRAMch2BM2nIQDp+HCWXhwHj5cRACXEcJVRHAdMdxEAr+YVmUQVA4hFRBWCRFVEFUNMTUQVwsJdZBUDykNkNYIGSsgayXkrIK81VCwBoqaoGQtlFkH5dZDhQ1QaSNU2QTVNkONLVBrK4GrbVBnO9TbAQ12QqNd0KQZmrVAi1Zo1QZt2qFdB3TohE5d0KUbuvVAj17o1Qd9+qHfAAwYhEFDMGQYho3ACEZhFGMwhnEYxwRMYBomMQtTmINpzMMMFmAWSzCHZZjHXljAPljEfljCQVjGIVjBYVjFEVjDUVjHcdjACdjESdjCGdjGWdjBedjFBdjDRdjHZTjAFTjEVTjCTTjGLTjBbTjFHTjDXTjHPbjAfRAP4BIP4QqP4BqP4QZP4BZP4Q7P4B7P4QEv4NFLePIKnr2GF28IvOMtvHo3yz33MNsgDwBvPsK7T/DhC3z6Dl9+wLef8OMX/PoNf/7Av3+ch3nD0kJDeryJDGDIhA6yoIus6CEbCNmhIwf6yAkgFzhyw0AeDJAXQj6YCkAqCEchuArDUwS+oggUg1ICoZKIlEKsNBJlkSmHXHkUKqBUEZVKqFVGowqGqmKkGsaqY6IGpmpiphbmamOhDpbqYqUe1upjowG2GmKnEfaa4KgpTprhrjkeDp6XHQI+3rb5IkIA6APwPzic5XINGsWBcn+agyEITiBBWWZtZRSTENuiEeqI48yjhr9Ih/BZh5khg3DpEygEYdMUaZ1XpFnqtc6oTEq4NvzZA5W+mtTvUd6dc5wkQXunczST+qJj+co6c7VTodOIerTP0U1Bjcq1iLPqlSEzyM0DeQiTZrZEkdHvVNRJXe6okF5iDsBWN/O6pmqH/MLonhfSr6xJVCl+64sAsyfwOfVfCMaM8p1hHZubgBhLiO+ZUMcmrmtojxCfUmM1pE6X0QiEzeymLRnVvzWj3lKDecplSsq4H1Uc2kc9HM7zi7Y0PWlRTBr40BZEoGSGx5wIb+kX3FMzbQtkca6RDwJmGgmXBnXQHzE8u6HnWqOSLnOFKZg5MxXRwrKGMS9UwyC69kRuXLFqXPFD37GElkSNPlBDH04fUjoO0a9fg0qNgGqIRghAOwPo0GkQYjZ8F8p6SBEAofeoM5RrAu/uN0RMMJrTKVSkleDc1SPFBYO3JkpiIkEj4MpnwC3LAC5EqEOUNLMEvgeiShkIBGPQo6HiFael8BUCW/oz/ENroGNaYnDsxO6/ev/JeqzbFb7QlgBmZHpH9vFDwPoskre17Efbt2E7oE7TggPUAWVu0RcNWV/kJ+yxUMVywxgLciMdyzPbS3IKnCwPH+Z7OaxaQ/R60QxpMuSgAm4L8Jp7IKczJ0sLw2QWYiDo1tksZB7lPijDijMyKtDbIE/1dp2Oe+qdIcBxF2cOZ/CWpWz1+0N81LxTiCQMEzF1NSzQ1gtomlJXhaVCCWAYE8SmDgtSo7Q2NBpFdQrKQ2fFF3+HCwgKQ5PMZlnEwPbsRaMx5eR0mBNY9njm/bC5JB7EaFM+bbdBY4NIZdecgmVQLC0Rfd7t9fpQbXPD9M8Ya6f6THBudM4nGCgJH01BaHC+QJtdt0a16JYPEJ/+m/ct4CrP4RMieCwXPLUa+b5gdg5dj2FC93WK4BlA/61+hp6Zm3qXEYvl4/Ru9zKuDvuwzVg4WDDSGUt01lOqYJGs+12mTGv7diODLKXbtgIEMsBxZJ1ud++Wik+j4136fgw6PAJf5XLQ6fAZAhK1rD5x7FYvF/mZJwou3Aj4YCF1nUMtTHdXg+QGpGvE+jVOR7SYlm2NtoxMU1CzkwDJDOwsOBEI+GNhiAHMIUL+IxgJRtkIqQdLU9lIqzsHLEG+JBJium6tjWFM4g0XQ4sjWUSi6qn5PR6iQayQXu1pu9fdwjZweAPKuCFOsFt8SNkC9uZiZn0Rzs0ZWXrC3qRE864d76XT+mQfvm1bW5U8fEDDZCpAC60+OsM9BLCezf+tAf34AncjMWp2eL8fQJFHNbW7VBad0TjTq1kM+2fcNllMonkTmTs3ardiDSleE8DDkkciEU6U6lx6xvx853NZF9fNUuXb+2+x7aBOn2yDV03UCMsUk+P7kpmmG+nyzJgYxqnxyghHNMoznwNBpqx7TW9eJzA+eRImxlXhtHlqQvubmL7OrpwHuufvjmVkGpXKw6K7BOOvWp6uhDNzWhBZjAEzG2FcWSiUu9FYLH3vhqsphx3R1NgmSfDuFDgwGL+jktCLJipyXFeu5yzWDL4FWp4DK/kZbFBMHgw0mHJtdDASwrjYPxxPYdhfTOss1KLGlzPHg8z+SWBK4swdoma2zmwrmwIJNSrMopAawmgtbzwqPprxUKUOq6WBkeo0kIESVJNvCb3bsQQ9TO/IbyQ6WB5Rp8lIR72Gb9Hp7LTvME2945LoPbc0+cfSfpC7FQj7HxrBOfSCTyO1wnmE/qVWLjl6CFVIJjotSNGydNSBpiz4b7GJ30vqF+CGbxUpL3z2UR3Ll5ZNxuDC5fu5WcPLyl9ql6O6f+oWypsq7gndRKDHerJVBWvys1qDTZvi3t1PqhwE8oJomHBeYLuUzER7TBqpyu/FHOWwaOGW7wcK+tRDhWNq3E2OIRvVTcpot8O88YBQ0y4jDPmp35ANm7OVtFOOCK2GTbMG56XHKgKy5XOMHxcRujgkKoBURp5fsxvINXj2NII62Jg5QEh/meO0tNFL9AczeIFLSmZWzY4gyZX3iuS8cjCP2o05DyqD9JPo4+TTHveDA/ZuCCDH1HfFUW0gju8L+zUUr1v3OAUkpOqPqwKIexaYPdMx4IQguBzV6t0gLPevWqGxZHit9XaUKCnnQLH57TuQZ4mPeSYhz9ONvIJVtnSmumGHIErzlcCM4RVxJYAw+j0IfvW4AqpRr1RIDFITPlCATnB3S8w7i/3k48ZbxblXfuBy8uDTt6eEn4uSDqjwCs9qUflSVux/8s59t4Udj623Sxdf/v4iLuE5/5vc6oLzTvm7xQrcq+ihSnFrsjaeirOhpVPxN9VFHipHjBN3z52f9bCkWKt/U3pyVXAMU3NxflTXzTM1Smsvn/m7Zk4r7TLd1zCJKL2rFNPZ9jkcIl3McC8KblvesO9XhwLzMyIcbonNtqzvh75XptzibGqIqO/XNr0DIaefeL2v2QTwLyVPNDfSj45NHTPRjupLr08e1ZHUKC/o5nRJv7+QE139SUz/2FTLBDuiQkoCMdKm4dokB6U0vvYn8Tp9Ay2UYLZpy3SfJAkENiH35sZR6jYANm+bJ6i32kMviGzG/zCJ86GJNjn+tQpjXzVBn2NMPFArCvPdfL5trYlG6/5gYpBIiDWMQzO/Aix35N1subcrYiCQ/Umsex4D9LHIamZPLchXKSgCiorhP5RDRCA0NcrwwuObGKKBHeTwk9TcxJu180+MSBtIeMJQO+Xpkk3hkhTRnDZ40rtqgnhW6aw5Vav1AUMO/f773lLvCUD8xhXhaA191RgLLHGXkAHkQqVIAhPK3DmPWR3xsCuNrdZgmohWaq/mLzc0ElQDvWDTjlCN9LyQJkugRXmVpaDC23orQjUwTp1NTaMBbeqs/Bkqpk4+IaGQHCqMBQQqMf2IbRmQlY0EWRvJlQYt2uAC5BGXJz30ahDlqAzqmeq2wf6RvS7IwCmrQLmWVYOvrau0Xc3VB253ue8BBLFkXexQA8kkF5q+1VkDXAwimjeGOmeInWiSzSjtPMelwtLB7LaqUAZPJ0DjW7WsoIqW5WF1C5wONhWHpVGaexy+9IPmz7kw+z6K9wMlq2ekgGIdqGermd0EWuk/BbeCmV4oRjmg2HI/TRoY0umiK1yKv0XyPwEN55NvFOtjOBYb443GU8pxAPU1LLH/5ReXP/G04XZQT4pPnXuhuvfFZytqyCLRd4j5W2Ib/1FzbEK+N+xxIdcXNRsnqFVYtxDbiMqXHDVfl2cM876N2YTI94kSQEeUT9jwaAlJCbxf3RJ40rhlfIJX04KLxhK5bWmpZTkub4667NmlTVwaHYHjruhUHXeS7p/5cu68vW8fuEeUT16St9SLPkk/iz/1BI8n6SgahkjHgsI7GsNDWpTjKshyPremrR+L5Uv/khAamVmRgcGvdeYz6vRUw76EXK1LM/Wby2NwfSawTNkjR6fVWB+uF92QV4n1Nx5aOXeO3AN7n/iataWNka1ySzTk3FgXZk6v6iWJtBlhe5LpN282iJKHxVXOYI6IqXy6jb1UJMSkm3jdFpjGNTmvu9hjQmYGi7559GETRbrLNOtceMJ2MLReiivPfWBb6PUqO1z8QrduAtGIKUce4v8i0Q6ES+Xgo3UpVEXOAE6/q35efdWsVuv1UoPrtExaY7YaVsrUlK1L7UWVh0iMF0dNmdV6oddqlZJDxJWwBBvDqkaLxVAXlYPt/PpSidVRc0QXnci0g2F3Gj0LiIAMpZtKa4FZiospopr3zVwzjXtX/rSjW1NWlBrfpuGgQMvHbFasW8QvFiI1ccaGyoSrP42cfOWcYfh4lug8Z8IH8kwJCOPl2sp+qiHbWvxoForVWsECKix/pQrdgQ09OyrB/exX7XsmKjylYAsD5HwCuTkPFycqXrEOw0B1rphMooLDqHBK0rgr2UlHgu4Fs5a7wHDXQfkcJwpam2pzMat9Zs6TVQxWV6rV20m78PSCQRZUP/83NCO1JZ2ordaQ9stQxRdFRi4nLBvqgvOabpZL6jPAHTThfDI8imlSrt/BrYeJywyr1/stojhi0zE69bv4jnDemLbjIRaLqpkX3A6lPc3/0UIJiVUTTeVtSnb1nH7vPbJlPtYzbA2ppouy1gGvJicNLHgUxq0K7CYEd+gV+MzG5NrF+kkDrXeb5r68BjVt8KkVo592464ar1liQ1VsWS4P59dzpixBICbkVnJSz84wtYkT+Y2cNHsM4p5DyTX9Xd3e0nTU44wapiaeZt1LbJy3gp+bMNr5eem+4/Yh+LqFoDud9FSAhF/VW7eGl4WIgG1LM1YtoMVPcDyxx4MDEZ1GYtOrC/bVPzJlSX3MRusjiCsKnnaD6JMol5ZTDPPTv5KNJcFvpkXdghqhFJbCPmTxf4wZBeLVvrVCCz7tWKDNDjTSDPojqjwT0iCdOzYqMbRizHBg9qj/3pPBocrM9ZLpmEk+Dn3HecdzmedeJJ1kJuGuF2ZhiDfWP1Ek1J6ddOfHssbh36UJ/duYi3+atU7XvMqeFid8B7hHQT5EVNfM9sQ/c3GrzQPyscZjS8J+oxUL4byN6BPeuh90dNNpSMUOfX6ExUtAURLAe9szxUJBmua0/mSTfaAs/IXuTSw73OICTt3otoI6annGbCxT8RDEZKRiRJKtOgqbiN0iPiHjbHLeWFD0ip1dLG+++761YcqlSr/D81YxXDAuwwBr0Zcj9x6k4UPcX7SyNNcNxx/F5tWLN+xr/ef+Fv2acfo0l57drrjXcmAAqfl8V8NlaBHITQc82kwueo1xFWQjjR1gxvp3sbKVfmBrXOCSH4Ol4Mo/rINWSzbbwyFxQFpA4cWBb2JQh+PzIZmaSiBC6opF6R9RN3Opi3Pz+0fJlayhz+ZmkXtioeeyJ4aitetgK9q5L9qzOVuzBn8Xw+02IcE0uEDvRFE3elWKtoKcnDOYHrb3SaRmdM094Tx49RcBRJt2zsemd0z0zR+BpkPtbs41iIo9Mdq3eOkYsx0N5WOFOZSe3jn+Gs931dCxIRPBfJh1Dcdy4/fjOYauBJsCwqQ+iB28JgIflMOfuuyTmhX1dQTa1zoTuDbk4nFGOCxCk76ocfUP0+bKt86iJMJ1eP6SsyHhT826k0PnzUS0Y0xJ2rjc0MvQVWWrxovDlRee0rC4H8urgra1ymAdWbl0cBHqcbXxk0cfv4bi8ru3XnvvncO/KToeTyajUf+iPpaxJD+UdyZGFSh53Dzb01cPfDa1nQgq2Uh75Rq78bIq3Bjfijn1nbx3ObZ4F8NOfEAxaHKKp0fHXx0DxW4FAbxqovCQBjRtG8O9T2EHuRgggiBypk91hzQp9ioIPpSmPxqtCueGB5F4/RV1DHnOi/uJVN1hZfMHgDTTuYKZBKBu7zoRyl+hqG+5RmnZswiJpxBw0c/GBtMWanfTPfmyPVW4ssZ5MoQbHhD4thd8wb0lVn0QJC/nzsqO6iJAneqfWR0iBt1EJ8p1UJKyToFAbROr87ZuaawX+U16XL1xY1o3ol0dWbxNGpWhvpomFntpQ3PEVkjWLnIdwEAlAhRhoRLsGImEL1vB+4rJHm4QTmh/SAPwdR9YcswwVxj82BNirmROGvjs52RnJxS8432jw+tUhe58kcKej8IO9Nw1CuUHBxw6DNutkST1MrNk12vMDi7Nhu9bgFuwnjfubVZJxvbA3auIafg204YbJprPMePBE3rhehvS8ycbb6A0xNOnvnhJd/h+k92rW/zKb81P4uDTvJY0PasCvPYw6M94raIYbVkbS5RVwXQhImxfrwL4zGxGuZRk11/OVjdWhz2LmTLgs5uP6sTv+XStPs4r51jwqBgAhvBIbzlUtUvwX01637PeRJ027tiYLiuCxUL4ApsGKCyZw3mdS/j0gA5i4swwGyNKuso2almkvPiPmcAarIrNQhtAaQ4tHYp1NMc7YBPg5N35VmoPILrt+eNTkaChykI9yG8GAamZ2es6Z50OHQiJbgGiLviJFPuL06t3tEHSZDZnqyqGZsqr5Nrm9gUaOF9t96ik74CppSvsK/Uk2tPy8/z63eRtgTTS+qiZiCBB1GjRMiynR3Yj/i45sGtf1+YSmszzYOYDEceJQuDBAeN/M+NkvO1kFJhJBaC2m5zlYE16TjefWhAOZzdNRw9XWX+rDTvD5hmu5xzlUE/SBqgTsel2l15nOD7DpWLDlTbpUrPrfLcjeaoB99ZLGWmfZSK2X2XYiGytP6fJxayb/LjvlGG4Ps8BU/yOHkeqdOERrmfzTk1j5IjyBEXq2BzVlht2D/a53kAalEzrAnyUgA5A3eKbHFL9uJQoeIn5Bx+OC2ayILC1WP36BsLqCFOT5SPZVVRXuyIhob7s/np5OiNb2OZYffD0MdPtZo72K/Gjdj/th0keWB46LrXzjKzb4sXL9jS3rPfqGQg8akITBzE5HhDA8OjI2Ftcl1rk2TZuSHLXtHEcrUHpuIWmC2yxtK5W8pIVLpBLnutYg8NNsBc5LZcFDktVLBljFFeGRgW+qFlSLPYRQx21/dZBiDmIHoituzJ3frzu8pzd5462ljQ0FUvxE4IGgg1WpajbUIFCxi80oLXZksPvtmKfmaRVK8xSq0cnba/FpuPXo17IPgnl9gvHJR+mX2tOudtH+4GI/2qjTy5WdK1CgoaS+4+eQZtP1OtFKe0Yy8cwQEB4oWKVyuWrLV8p0rZy7QQl1zaehTj8bxuVnB8y9NyjJdBrqv/GVAab94ZfevPTH39kR58Vt37+/NMd0b8tuvjGJz/8wI28IHd+++rrfflJdaOmfTjxR+2Zrketyc73FX3mzMZW07mYSLj+vdQC5BoeVAEcw2BQH7vqk5Bc1ZC0I19gbw/YXEtHy1ED+q/nNwdjBg6b2m0nZkJfFf+fvFYYiGXt5VCABODcK/PNWYOOMyMx1eOiwIZLNwHvlF40BlMb98C88YfxIT81yb7cXBQ5TmhLu9/Sh/dt28mln2eoiRyuiSwP8I6dWQOF+2KG2fAeOryp9r7etDx+ac8+A9l6J5Qn0Z2YToJKo1R07HnU5QWmQYzbwgx8CoeXMofVU5u2RfceeEScNs0kB0PydLbEMhTatTznLM0j0HYY5UU5xuxChqEQNE4ubZ7jo1m96Wbhr4SmHQtXweWB5Rv1Rtq+cgCkKLgkK5IdDZSjyRFy68DdKGV3BkQ1drxRu2OJ9cZoBfChseqGth3R1TBZUioNL24qu9L82Igq2D2VSvWbJqvsZUNeWrVV+wawQ0Z0Uet1A9aVx5HTij4g8IZ2ijCXv4pgTeqBNU7pCU47tVYk3m6Jba2m0Bj+E11/0BzRTVD04fJbu3LyQ15xi4ujJtwUeGaknd+rh2IP1PfNamVp+JbRTI+r7uLQDvWGxtUtlx3TZhN2WLr4QGV28151eeTWsfyF+go2lfQEjQOq9IwNycB06FIqSlxHFKa2/0O2s8rg8LPhOag/E/iQ/Ujw2dx1UsEyBWLD4hnzZfxn6i+0YDgVuFXwxR4QBCDHI/hq+87Su3uiycKcgr9xZG+HRJBae3nb4yRU1krfGM7TkElQMFTQ/lIkRYV8aSMjeWBbYXWisiKT3ZYEVMfbCGjZa7NNIVrtwkzFkM5qZ2jPjMi0bx26pw0oyQvHnf+e6ifGGWW7XhCTw2SJP4jZETyyALg+n9AP+EnowZlLaPEh4ZOYl0J6cokHxUtPZPEG1ZMN/ha4zG9aoKdJiFbcxVAUHsE2s+PK8Eam98M0Q5mXLx2xYvt3JMBoa0abwoO9NxnqZs6ns+Y/36OvoG48fBU3NSNflIx5tm18KMOZGxS9erM3WyE/z0cMH7ykAS69iCVj+4yNWKFuo+8usbk0mV8rWvRW7TLXoEay0kXolkDNLXH2qnB3KP81aNz8RGYrTWim60B7sN1rsIvGTHY5Gg0qmMRlSFyRLjNM0svZ/FeC5S35JQeAeXeBcFfUdTOuNwbhAXPv+GWJyzP7HxB43ZkPPbIbUTjGL8Yz8tdXG81iwwoY+y01HbgQQ4MK47tkU+2Jc9BSUB736EZTuF2ylgY96STPR1tKQ0RZAmplrEML+nusMW+p2eSnO6L3P2gJtx+MhToDFT8jdzp5dKyPjNHUMof2MSK+YHJhrSInlOvR1OlEPHfU/wRjIQH3iYyqfl0liXDnYXLdxlex2kyfrtFLJo8Z5O+4q1fNckZA+F7eG71DfYLlwtNDXn9SmmFeHLpDmBRjNfowe4Bhhq5H1yCCiZmsf+b5fUQ7HSCY4RDTpm8J8PtNG0wtwUwhuu/Lg7ZJAplAwbzwP4hnL+J284punZrAB2XafsedU8pJZltyjLnYBlfKKhs15C7IrrkElDezFHetEgLcABCak4+CQSw3X6jSCPVavz/P0zxs+e2z0bi+5TY3qhjVoSlvfUtB/LvYztmM3EpbCQ7ziKAPKAW92K8epMuDNP+FQgOB8qFiiQZAQdFHnbEKUl5BsupI/qTFo8DT9OUze8KUQE9rLXpBIYgtTni+RHFqS3jQsoILP8fbGkFL3rXjnvGGFKth2tvz8A7KAVGAV0uyu0EknHgl40xOuDdXYaHJphgOyuWLyvSYiItNMrOqqaHmaJvCMxUj7A5EYNx19qru6akxBNQkPcWoN5sBgT1sZxlmrzeyRk8kRmRzfvwUPI/Q7wj82EkBob5Nj8StC2x7m8pv8EUQrj1vFHvTWutV746yRJuu+lJ51LddDzFYZe0S0ZVGnB5cRKPDj4FzOmUqCIENeXBQ91O8R9yGMjWJAYxmu83nxkBIXvOxh3aBikw/2Q3QQm4HU+vjwRfYgfT9Psd6sJttN6q9BXU88YGudsEn27jStAKAknXYzWSjK5Zn2W6Of7d/x5lMmfTA43qhmwhdRZWoe8umpGjZ4TVmJw/YyTPjfrpM5jtZgl7vy2UW6mpnj9iwRahZvgM60u1nm5GtwQSbaMY2QQFq6U7RbifmhRadwd9OnkdISdy/HiFEiKH1Tm+bfBDJtpijV5rYRW87RPHymLP+xD5WN2KqWGq7ZKq/kVnUlhFslFXKUu+Jsg4wQPSPIADtnVAh56HqWv7UfaD4L6Jtma8C1ovr5JgZwD1UoSmeb8u6nntBJ6KTArvA8AevmPk0xz9UU9hU6fjWpZIOGYgtuHCQU+DQnpiO7+zcXsa4hd4g9y66YoEQs9raNXd7A1rzqRMy6IMbekgjRt0vSQJfwlfg8NeDIi0suYH/mEK7BT3oxLclCEUKYyKHdN1ksqwplGdwsolg5cv4RVw/fuNp0GZYJUD9pZmALsjUzK4TDHC4bW7q0Li7Gt7t+wdAp4itf1sXY+iujtP6J8b03Khz2SINZ4ugG7FrhDlAlEdUQ/W/lngBmQwHMOsSDayPMNQrWulsudu3fdNqWOOTppu7N6GdjO7OLS54T/9qiPb2GpdZOEZyhgO3n1MgkIeEfSjT2XQjdVmg5rsP6SsDw296JUrUeyJjiwO6cRFK8Dz1MRF4PCbPEBaSrovr+y+ITu2zoueJ6kiY7uzWIUmRlB8ambkE+UE6P9KOj3XeFx6kTOMiXB3V+TboIMQIJddCJ9y/+zoqKjr5fhbgEnNTINodp5KtZY5byeu5amozlQkOQsqoQzqXQCxSiNsTrLAJEbFvtcNBIbGyhdWV360uuZUF3Rkf+pqb1dDEOhgPAtjF6x1a8Df1bvZG1G4KJNGs+MAYxyW2t+mHDFdcZyJ4AzyZIzdH2oMaXaAcwNbA8WKLxrh2+f5H1QtOVgCrONcjiZFw3yH9RqrJ7iLXwPfSf3JgAQd9KryZGuCjyOWW9vCiOOPBm30sCHIzZow5MHnUR8G0DX6DUS8SRGPB4ANsSfBD+0rgINnOx2UnzdymWWGHeqctw8mX9DSQHcyu4Ak53ZCsqJEX92L1QGmZDN2FWnzRSqO0lhyiLNieimJXasjna+JgXMW0IqVGV9Q2dAJsuoOj6JZS7lZTlu/QCmpHGqht0vOgDR8USuyBe7Ww3GS/EfOMaGXOLX26bmbdcwZ0Wkbm/DUbr8Pn6Bbl2/ODMY05O8XQrALZyewMnbWElNZkmFzEdLuG9QqzHQ2gzxlbGmXTjLDqy3TVAfAr47LLxjic/+6ElLqbxQyQ+0HKPdvFnuE3CdcMdMrNth8V8lKjPMtGF/92XFox7SDsPd2IgFk3VwhSbcqPcoI03Sd/KmjFXXbkKWyGfSE7v2wWou7H7ycfbm+4f2ttaTmCafkhPCFVfe+aSgQr3Chl0cLiGmvOXzw4vJ+9Jvnonh2NcMnON4TbahgdWJ/VQMIQs9qYpmP7tqUJm0JXYRFAimm+S6gA1ECu2yfUCFtihYSJO8uD0ghKS0djuf+K4PnCGyrf9woEcn6tkLm6sEYhkvGRMXXOiOX7cEh87APLUMZojuwWoU2nplfx/m/fCLUXdiHrrZQvYrmXRnJfo/NtZA9vryl2oLUI33O7uoH1E0VvVJHjhPlTMxKeSh3FAEP9aTSK4JhKFBuGLB1F1sbAMMb8L6SKzo+1fqoAHLAAg+kFMIi6ZnaNHlpcNlMtc9VacucnGIokzDx6dKICaJogSYLSMBkLb66/ECpFfgxM3NC62qZvj9JV7KDB1ZvOf2Ppmv3Pome9e78PpB5b1EL87LlX1t96vPXKxsebY60Z5/tcAg16AIOlZ0NrEMi3Hb5wKZ2WsK1UuuSjnQ/fg+G6Iq03djX74e4xQAwgCCAGSVa34bMQ33vOdnG1hbpYHP5Z7Jtyb+LHqfB8jOv51CWqpeUNfamCzKCoEBoiqJU/EnYUyEyZ4oJ+HNyXGOWeNvRUmgiy0FScv1FiSLdzcxQ0DT0w4zHnodIhvUHrH4Q59w+Qo3oVNerJsvCEWrnTsrd2SX3mtD4WMHMFB7PyZW5I8BJ3n8hitsNN55WzanPY+U1Mn7B7OAm+bxIIvniGuT6yaifyPAbObWZzdJsaJLC8uQHJOmW2ZRg+Kd1lUh0iPQteb6GeBTP04IxqRkmDJ1+78ixIyOFLXpqys/Gty2TDVdD3dSgRwkNLfyNK/qkRPR0tYPxbVFVFrnWfBMk/xPJk7vbrlWjU/OMXOZnT8K/wRj+N2JDWYn7swx6VW3N6sgUh46uAbL9nXtOqIoYX6PcecV2yIdVuXG98dTC0+wX5tBSr5s2ajB5UR4i+FNIzoeDEQw9FK01yryoHj/wfBqp0bml6J6uHjA/nBKdMmXUHtJtlWCp1xBtqFrZjzphSGxdnpNqQYuJNs3q20fGh5wSk0Fjuu9mp0mALDPh1WwUtrCy5rXLUFBHDKknTmU2x+YRbC+53hCRSMkYEqGIC9bAUo1gv5ly5qcy3c7YJICr4wpfzIh+xppGdz/sFrOXPTn2jM4bh0EnUkaErWFnXIRE9EGNkuP1GZ9ZNqEfkym8OX13WvjMDWaeHuHWKBYhe4wr2K6SRJGOCuXhCG0Bw2KR2thITMI72hCeq7/ZDUyHk5zOydAIRygegqOhKMYIBr66TcbxP5/qVGQhvqzCQHcLhgXEx7j2xd3ZuWLwcPE2yhssgl48mA+Vo1+Rcmpk74eie6+9E1B3KA5kKp/cxsVcvtk9xk2VES9akx1ELaOrCUf3AlgA/NX1Qqr00+0En5o3yZLDRrz9rIRdPS8EcpOIFjUY6Ja/Z8ZVnn+UW4gA+oMFtuhQ5IXmfsSiFa43diuTv7vRW23M/COIs3uj6RlQGyhvPixR10KtFk7d++jv4pcid15CAN220SYLKmfCjo+mGBALH0eVOMqR/uCEysjlXU9EewdXryTQrm9LGuEc3Ycu3OXyVxizSSzDvlLc8RTlvRilKo6PjI2eO2KCxrciDduobHKB2vTwurOQa/pO1I56KndvXi4+FimFc/f++L2Ijre21NBK/8zde6PGhjTgACCLw8zUBDGamMQ9pBdQ7HKD0OVjDBSJmHYgtpnirrqmStqMFQQwR8Qt8xoUYlKaCeZxD39k5AKsP5AtYCom4QKt4mKoGBlZo9B5GJ5yRkMKTaMwBBkULUS4Y9bAKQNeHkfFGTGOAoeP26JYlGL4pbc0AAiQ459pj2nMiRTIu176J+qVvecl0OIDf+vnNulr5AhSqTflx8MYvvQA+lBMI4AIJIdg6bw3Dn+AcMchco2YsBMvtjBPLvwe5eydiOFw3mZyNJO0BMKwCJFFaxQDFCVS3dqpoL4KYOjlUmfnwbas/ScS7pQW60P5yluygZeItr76/sAdUmgniVOuRAyu1m3mtWg0EqS1XguedbiN/1N/u1mS1t70MC00VjfKdskYklxVYxZVtOz8q5CtKUcW4Ysel3nsjd8bqLSQhgrgXQaZoEzLwniW385olFVy2xDLAHHQFt1mrB/Gy2vaCWq90NcMbpUAKGOqN39y9WqtvyceipFLD9TWOghUUWqIbcQXVA4Ky+1bFyM0Reb5WxxppCmmGDrvybo1wQBFQserROz4bea2yLfdaoFhU0AC4+gJE8bPXPf+QBxx+/Vo6be92r9X59uptrlesBi5MrYjHLfs1HXCGdaPc5vQ6z/c89yzBLLwmwojhXhT8fDVoO/ZRDyaIIYIlYTRAd2CCq2VGrfYauRvfie9DTyK/9x16U9z+QLE+bp/17GAFY723fD7KCwQThp55+Jq5exX0Vz/nKMF4O1KE4e16z2ZEija+mqHrc6+QK/FVU5eC3JITFU/Ht3XuZkulIx/1nj3HRtV6l5kvmzZIPWQLJUPwiD32szaioBK1zeYB9UIk5A8BUEqruJ67kCDB5bVWw6gV4T/10waqXW1lXwgYQL4BcVQ4pbT4/9iy+kjpi/FZ4PLfepebzPqaVY4vpN8ibFq/63qCmNB09WaQtoKXPpNY0SNkuzu6Wh3QSPOQn8Jny0P1pXRjzIRoAnNaKUkyoaSsq01ROylXCU/VLh+ssOLNjVg+2iIxeETp8gf/yVbN6DS/AwWD5RKABBV7RV75C2L1Mo/UMskj5gKRjlTd9B5YZVE0zFcLi0KUT7P02XBDgRuofThNyz7cI97faXD2eQPOXcwYPooKy4yrCBtT7W5S/Is23kibcQA+puKq6wovwxvO40J9puZmUZvzGEFz8qw2CgFkox2Y2kJv1s5TG9oQw2ruScd5DsZU+bmT3Nl9eFnNNI/iP40XyrOvfaQlqqoN9AKDTxI4/bJgjh0zwnObsT/u4EvTxmiOI7CijsasEF2H2ehk7Xn6w3UpRiXdKgocQSW/9kE57a/eEc7itKVknPzJWMbwvJ7bjjxlhrOrZ/KRM/0njsn6zZ1ZWrwhwOoXn5ZQn2jS1ASVrCbHeHjancq8RdcZs8o1lV10fqYV8gIhCl3fxYaUw1Jk2JCkWKsm2kTOw/5NOrPiOyqDMBmyIs/xVAbgs2jhyrpqGA/ftISlE7Yu6cl2+0dfhupyzRFEMfjaecowqR7/NtKOdoXg6Y3h5CxK+DO0vl9Ii3+xC8DcLLjhfoIG1NaXt58s/uOYLoMbTyrnhC712OnpfORjtMhDCkyHKqHbXXHpI1Lj2p2A3dIM92f0JMbLGhW6deFvMbfPbw/PEM1X7plKKEK6xejO/G49OkT9AKEnMbkLhR15DKYMO9hFmDxd/RFl3lPr/ejJtNf9fZO1MxrPjHyL8YlOO+JL421yoeXAZQVA9uwpWTSEuGflHaqYqlLeDMJVMwgEe4xxSy7j6DIclLPEf65EQQy5cULoBUVdzXG9XmnzRZh/Q5tJaZFo/OiNSVNZupYO2+/7m4pIg6cM4EYswpCwG3paQLBsWrxDnrq/nzdCtI88xjP+b/d1ouSqOr0h9JAOQS9WjNFNh644RAJ7Z5VzhgkSUHvjEHYrZS84mR6LB4rJOU9Cty9e9PGmxQF+1Gthsyo7jLBUQ9kIa1t4K/P5dtF5o3bgeC3oLgS8LS4NkacFp2aJ3d+lxpw9qzhZ981PZgG02B1buf8X3yg4c6Al78AxZ3cmdwH2g3dlOCHwF6zrNX+unfI8DLEkdxMXUxNbYABICgj2Ochw2T/E4b54Sgyoq7/BIJRmgAXwLmP5BOLVJYJhsZPdEFuXoHSVJ6gEUbPdJ5KWrFBDLBjpcSYGMFAYN4tMZ3SkqJnw84i71BH2o1I9BbR0BZ0yLLh2sVXWXz+AXKybAKSGatOBceXLYfEu4b9VGGbaGwM4ulPOYFISZuqe6XJtS9w1q0xN2UmPUD3AUnP0sBaS2e+q0sBYTy7uSiu4jR+L1jxTXq0Mj9aWF4fVkQDjHxn8oj7b/9UL+a9MMB82nY+T7VG+uYZRx06fjI8kGsyEGHoyo6B4BoIKgDRBJ5aCoeHpHs2lKIl43MW/udoWVPHEYKKe+EA3HTjgsZaBBAK5qG0K8NQ+t/xH31WwsN9XFBwjnc1zzmVMs31l2RkYBae5PnHNdymC7L0BBEhKCt9CYippuHDVQpXvUi4TprvWwJkfQTknqK5cI9BMQykkPP8Ob02ez0QZdIPodyA5fzqfMHHyCdcX4lf55MS53KvR64Yzd8Zyy2W2w70Qb4Lh0N+d60OQvvE6pEBgQyMymJY9bbOIgl077/KxDOoEQfNuvcLua9ehUQTBhxAAS5pVqdT4EnxyiIejc1x4WIwjrygIC5laD2vlVY0ssfn8Nl2BuaYg+9GoeRUE2aVJ+iP+X0biTuJaYdd3fkpigJYqCv7y9BFAAENkS74R6y8EBV/DIEC+HdRR1TZqlYXSvSGIeyTouYGjoRfnck4HXR1ko7vXhlA0OvK8Nyl1XjFr84yvIwGcCNeUFHJs0esf/2fsHBXJTW9BrL8cvTJeAmM0jQ/9+fL8xAKAGBOC2DPP9O4upp5tFxA6CaRt7OFGWK55IUBkdXZbEI3FJwhnRrcOltGyrrjhJyI74+/7XVXQNDSorrYkJbSozaU8aIT9rpBGwc1QcnNtfg+7eBYuz4v348NbxRfAyv5b5L48mAIqhFlGiAQ34uAyZmRzsJjgcD/xYXdlKqnsrm57fQQ6vq8YBf/+/EyjTrRVaeeaHHK4oXdrSTPVl6y74/h4baQhr7wvY8emGe2WbRjaH3y0Jhpb+v14maYPMskWhvWIqBi+Cf0uX7O0/E+CvAhagkroVAbp1q3jG8AP7eRIy5bVY08k6dY+2IbdQjBhMZbDtx7Q5mmtCQscBIK4CUktYhgrfQ61fl7dDBMZspSMp0ujFFmcw2PRnDnqpKgYgS2vKniPzXEzThYycVqSZ+/CLTSm2/hvVvrxV+4/+6cOYfBvt7OiA266pwfENGlf1NbFWBOmD8efwEOq5OPz6jksGj4A4sw1KDOrSf7TFCWQNb0Szef0A2hBUNGxmLxIUZ4Y+qpKnijThUd60ze5cMv7VBUiIbyTFkgcByzOCDxpdj0a+qrn6U0ojanQkExOTaTH0hn8anAmRORCoxFmLE+DgEL0H+INpa2jorI81SVH+AmaJorNdoQLhrS5ceoZz4BUywVjo8ldlcRPWQjf62iwcrIm1ca3YCH8VBJGdIrQ5pIVAp4RTa9JOasQKuh6Y7uZqnVqYZAXOUOeXQ3Nq8RrRf0CTQAwy6HMJXRqCIQwV6RQJYLkfZdLsVRb+60Tw0/hKGphiduax5UCiIdJuSC9kr7HUw7OcR2QGj5o2H4i8UVzP6RuhOEUVVLoL0Hrd3CbYW/B5EZTw4BGhygOSdFCapjUZmYFW5yhHXUzUDSIvSDpo14HDljiJNs/VFDh4CcB9x1caNHngfUHdwhFUxOehrYKm1tfM8+AKDimpMKhIBWTWQI5tvoDH6DWcCKG4RqlMriAoffD04cMWClQiz0ryFcr2eSfbFJRchPEJJmCGNRWuxgoCvTtIHU/LF+Xvf0GroYilMv3QfZNOkXgLhioYqIUemgCveDgu3lTmnEgyahS7iM8qo4iJqRQiE0hKpxf3OXJBJcCi6APSsVHI5zpiVNnCDBAH+bjozHKdegH0tXwrd5XxIKTmfikEvvxAUsR7S387ICoHwDWj7Vdjgv7OTGuYpCy+LwisVpHhxFqFSbcVTnQDcUeH2mUX1Gc/OTmBLxkcjFMmRdQt7J0EKgAKinHwZhivZKrS0+V+9/+LGk0qE3RcDKXRwTpSiGu/0u+tMph2Q61Md+XHK2zmZHBrZ0fviibvfL912Y9gwPZTbhz/sU5VbJuOeuyw3aIm7u2ty/k+lFdQoywyuVyaL8a7sq8LuRHP1jDgTdQB/8Y5O9SO4e2cLWegNs29CqlzS0TFG9BrzitaxDPgmgaZ3tKq60/TLvgjmvmPWurcoTLvez/fwpKoIYp5fIYcRnrjsvxUwYRIHh94TCJ0bHIMi9kML9XnYxPRGrmmPHOLfHUimYT3Kz9Type3MqnO4O95mykrqDMpGXO3S5xnjRtRQWzmvjjmDmgFlfNlBVs+VX1yslYQxcRb5GtLTP430XVlRyj4vDoxvBREJ1S3zuXlEH0orXftZvY434EXeKKWKpc6TTnkr6KZYzceR1NpcsD5QcL9cbUuK8ADRsyYQVXZsY92+4ah6W5QcsEF0YX9TK6CKnx0KyS66Fyg2N4KThw7WkE8DPpKDkSm7N40sYAaoHpdxYbnGe4v19NZe1D3cQOOff6Ng8N2bweNY68rafh8O/fyhU8/voFaw+1ccOr2dADlYjrpoovM55nJb9IDbVtsQE0EXJzZAKcSuA5zkTqD5A/GGNzWWOuFTL03jdsC8TV0cmRIaZFpIWL5D1+PxBivWtcbo2s307iS8bCO8PjS1Gs0PlJ8wqu7ky1thtrnWcMiBiOaDJmRf1U8mbmv2jGKxvNlX8qm9H08pLn1YOdWx/hBmcYmh1PaufiWRVkK67b//eQj4oqzTdsy/C/j82V+ZxFVBwAh0TszvyjZW8N+EM5pVPGXlsw8P8Srstpn0LlrKqS7DJv8rRTiCeS15lU8L64ZWz+RAvGK60S0ihcd/7s97y/0g0zFwhi3XVNwP30v4qr562CWsZcimvHp8252jdOqTI/4JLb6/a2BT/VJYNe3E0rOG2q55pO3O1kuk1GCM2Vz7ivk05mywnCLd2GJ0Nx2VYp4vHQWeooRzjE4IQmmljuCVfRZAUNTKEj0/7gfJW4XT6lMoC5bbu8bLCljaiTYOnH06/3dnTndbs3GTrM8MYR2reu4voPjsu43jpWui7H66IkJOQG8ZPON2vz8Y/d3OC6Hjl6IwH5EOScUhET3ncVfVl8zRIuwYK9Ag4KFnBsiSCBAFawJAFDGvbQcc0IiMEFjxFXtWRDIW8HKNTUokDChhxtON5+SlwWUA1rNhySgoaSgL6HJ2IgqHI2U2wOrJtajMeqIg6Ey1oGLJhtDBTLYP4Oiy0xYu0N759tkoKmhyLyfcs/uqFf8JWiRVnAYJsUO+F1BSMdWjjHUlYBLTOxDh9Sw7y8ZrmmmZWYQog1IzO0je9ZFwiCNQp4cS4AOSWUgrnvoyC0JAAB5Dw5BVO2cVmWrxoFDEmksbRUK/W8sA8UvJVw0OvzK+gSiANONiYMmOL+0LWAAqXMKbhgj2s0CghmwFC02Z1naAoO/gsaDKcAjmLD3YW8Acv8XYEHDfgGRY22NbJEkR+17pcFNrpP7Q9UOagwZldIwU98hSne2NYOzLWJ4dCnUOCC5d+EPZiXzPBtua8Ggp/oioKU80UyI2DkoDkuyiccNRzwo4iOCK2DI3pUiP3BF6cnzkd0BNoBnzZvp8NAoGD+Hd5Uv7DOxAVu8VqEZvANR9cDBDh+G4VQWSipgEc7scJ1383ZLBcLuoDXFq0rfACxI6GRtDXyIUJnlRP6UtdjifIUBhAWoEFzHDy6lqCJ5RBVgCNC+8GZjNY/dB5NqgD8IcrDplh0oIBaiTeRQHjFs1j8WrAiv6miY7QV9vk2WviVMrSFCqXoLZMn5h8EnWNBCzxx2KMMbUt7wI4LJ3LrH1xIE+xiW1CMmuNEfMg3KpomnWnVIddxLyQyx1yK73MlH//Z4qEs/70QcbYc0Ufx+omvVRcwy9OWCiyFuT619cXoDhSTvmnLUKmJpSkg6mFtMzPjIJCNb+N7/ZdVmWV6A0qVXwsLtSqyiJ62OxVjLrrLc/9dilMQWjuw9T+K81VEB29RjOnXnICfyfuqHEwNWZ1CwzABHUbKOGne2jJ09thWtlPOtP8Pd4kgWWc+IAIKgnulcm8AeV7HVb0kWWHBDmh+3BG7t11odxWNWna+5b/ZpQDn0enoTsTSiXRXTa8Lov/U/OD/X1TN9PqGALZkU0xvv/CSu8lj9XfL04sOXDPmjIAphqv2R++5s+fu2PvhIwKlXZwIFKH0ewetJyZ3/VNc/uv12h478y68SfcMTMLf9J/REiALE7neNpocgob/frO6a+KJPwvPPLfN244CTnEGtsroeI1hTm9dPvNlzKm2ZfWccfndmcsllvBxEHiaeg/U5ArgZE9yuAbKKRqN9HvA54WQNfxZkIPnAI9ZIhla5CjUtKVgcIZlGDEvk8sEbzTD9+vYwt6gOS0Bj27Sgf5Ir0U5HuoNIc04HU8E/CwswZ+aADLgcTo+2jQuZ/4imM0DTb5Mj8Yy95to7IOm52+OdUaW9L/d4O8zM4cxE5XMzcq//ze+jeXrE0Yj2sOr6p+O+Nv0fFx8On+6OGf+6+k/pJUbNfjR0vWxKoazwF05/EVjDKToGFMZhkoAgRlhTIdZxe3bocGKmAksatfvCm1iWPVnyYXf8Ny5AbQwM5625Go0zc5M3nuhbN2+WIcj+TRAM/qW/oHb5ZsvynUhR/ROIu3xIqWIdfSfp8QJhuTl9K1UbAK/gW8O/A7NvcHyqFhJGuHKwSrc1vwEgH93hk6rGb306086tp2lHnzmC/jJlBRvntD4TGMJ3DuI+H42n60j4HF4naXQUr9Tt6a3jOkEki55GA0QzNlbJ/GxWVh+0m4qYAOqqVCz9KQ1nzv3n8PyHzyjMCz6XVz6LSwzle8/nopNce+x8gAGd/A1/Bzm82fMOQGgYfTdyC+DR5CHDxHIkQXBeP7aGVbLlwdsanFJ3NBMzHFbnOtObNmQ6NKyuT7wO4g1ihEjo86jiBgzSrlOMQi++zqZj7o0wlouEKibIdTZ7titmWue1sx/CO963q0sIkBUBhXHcje7ePWWREWEoh/Br9Ig/MP0tJ65duuYyXbL6fig+/cWHRcHznaO4+9Xqn/5eLna4Q/O6K79czx4SdH9ou9ym1r7YrsYagHgahth1IV58dbFqx7WzP/rQeAR4zY4us99Msova4vlUdcDvlH1mwu8t1c/S1MzY90v7clzp4mjl2T25Hu6Fne+sR8w1cV1PQtp3GbRW8pI9Mjb9MCatSgw3i9qS3YWBQFcRLwJuXwZ2cTcZl7wUINC6KqqtkdksBrZdPnypv9lUHY2JBMoaBh9N7DASYKqqiDIpAXB5+wQmhQdjcUGm2TH991J8WZrYuNnPUjVcPPISPPKgUdGdhBYfrawaZWLuFsjJhhR4dcKPaiRQCApMsKUYOswo8U4m8/mNA9saea/sPaLUKRgjFLfsWuUb7LV2bWbwx1lf3V6pZbH15DWD2WSzY/YWVE3pkPpqd4mXvQcQaS72Ga+3FuY5mSctmfxDABwsVsv5abwj2/d33Qs0iZhZrx9/W1Kb1VmVfe0YvhN4rkEB8sh7Czm//8xSZ7dEIz+l6uWSxZgSMgVJlOS+d68ji4NW6jWlVb89ofOkk8EC3OzQYTRWer+U7W0QqcWsjUdXTxvPirEti0gOuKUBYA1FE6usbRj6/s1mv4tdqZ6TZ9GE1vPkjTVt2n69JuZ0/TTBjbfUtPXTX0agsiycdPqc2DqNDndGxrU7xJCf1/f992w0FK3c0jkAJz5UnhgawBwEO0cOlCsbF1fP2fYrVQ1hsFSPgg2UHQjP3j3xmDGf//9MDKOFDTIwyQcx+Qk25/o2990Uc6J24xcWmCNyOZLlzZbmVy+hGyOELY911jqeSZ7xvWW3kQwu0AS+Yn8dWHKyspGrBVnuxplWDNQ864eD8YiCGcnhsmM8BDbIbBHhfHOoTu3s8IwiL19lDMbwxmCMZgJL9oMPk3NhdeCDFZ7E+Kq0/AzNC+sHNpKOETYh3n/zycelY6KUQbKF8yR+G6oMfRFUYzSqTMoz4qPkm11K+QmRpBpsNlqQ2WMM9B+d7X9NEXlUxckN88OXQMsF1iP2+FWw1xtE1AI/gX/Ed+5aY+KiY0e1ZlQ5TN07P78Ar0lCJrvTFNR53znqKmqL86HAvgj/IBDzs+eVWa4ppQzyxp1GXXWhwO+dN4IP/Cgy5fU8pq02+hyMLBugU5JLfjsTR+he39OK/jMeIrWg2c7dakA+YJQB36wUUVIV4vV6QQVoYBvMtph9NseT8KzUEElxI4PsDC0h5W4PGuQV6skgKZhGLCtTyHy+SxP2RDjuC8zWHUBbNf5IEDdjMN36Rk6ti5N34VLLTpU6mMMuHC/baLqlErN9iuKVqifjjrXZJfiQ9Qcwj87hDpVswvCbDvvhbfeOfbCKnj9eriK6pU7FiLm7xHusQuTTLsl0+Cq9euFH2U4EyYNDlsFJ0s890X/veIkHDpoN+D++EJwWKl9WUi43C6COpxO9lLLfStXKry6prdXnMUXNJ7AM3cyJHwCUK04aSdOpn60RjL1nh05l/k7MIIf102TVu4LaDkyxJcXccTtuJYA5YpVfxlcUoEUiD2yhse/yasiC4jNplE9UIZAKZk2EyVdekXqNqgUQJiKUdwSldWkuamouqmp/t39edrqqOuzubnGPu3ml05NjU9Fv8ZkLKykw5ILE1xWXhFWXpGMo+qGhjRsoOSo7Ur69Q9oR7zao7ab1wgS1e7lqh3YVys764zy6nWdMrkYNRxG+Lo9FCwo87mD4chwuvxKwADFWEK6vXsVNE+96iRw3/HjfUnCGwL23wHBxTMVuq0XJRZR+4AkwrPj2IC2a7VAGa6+FKgORLfEnDm5/1jbWDrM1SgUeHw41tyR+Ux0TMDeiTQfuWhMD2Tl+WC8ZjgtUB4Y0bNwh34TyrtQ4L3rqp2UyrBioFLHXXfLhTyGD9MUwdTg+/F3UCaqFJFIScgAm+3QbXLpeps6gJYclfHYN/apKRqi4AaFR1iVnjJmt8vYwKyCwvU2ETJ9xEgpVpBM6slxjxVmm17npQb8RiLlxvMCSiNFQm/wz6+iSKF/eYLdIhLptwBeKuu6KMc9hldVMklQHJ4Dp5MrMtc5R5oZWLJMONLx5NY8QaF6wEuZqzsZYZ8Gs2RmBufIdRWZ6WTPrygDnZKdopjqwHse06lOJ0gJ6epum16kJEU9GMuh3YJWqu1kCn0qKSSkH1VzDjcGsSErBrFGbBCR1CSRAbbOOa8Wq4FtZ5jfsZidiM6f5ydp1dSGO+/vNFCraZPM2BWz2nvYRiN+pDzS6tgxqVVYzmsqsO+1Cx9f71XY0YWr9Ef1JFxKoVOp009HaVdnR7HADzKjgbpJmMTnCMxMo95jBlqg59AXIG5c8e4VN9cJ1KTPFqm3fQnkJJvUlGnXaFDpIDZzMZBjdhDV27tOp6bYpKLEd8MZ0s47W2ZdGQ/c3NgLqD7RzHcuUBTTh4QybCDUhDLvRP8KJ4F46DY4GGLXL4vQsPVpYWOhafvVOllEeUTfxNEt8j5ZpIagSQ8dM6ZlFqSl0D9xpE/Z+C6dnn6CzDgC+uBk7dDoTXYWv0ubT588EkFLfwerxu3LpGQn/hNqjrMcOaprlpBHm0tRKsFJH+lvQG51DaAtFYwiLfhByOgoUCi/uB66zNZzNoknoHPW+wSjO6xRI3L3AzX80jKH6J98GKlcCYLgkrlcMF/Nqx6P4Ie3dzJXEde3qinOMV3ZUnQfopm8USqfOT7L8jeON5sK/QGvFTdB55CxVNLDXn4Ny7pHCwW65qlwfr5YK9aeny9G3GapWRfAURLSUzYP7nBGGdYPXjpAvyl/MG8Rvh+1RE+JGyEY7Mo3T3mxVow96Q9z2I17y670npRV4Wjbnx86NLb39512hEw/JtO8zCT6nFWxbwgNl53oeKLpVOOJPI/yULlFgdbVw0AYZ67qp2lt47hj9e2OcuSopfYt20LKQKawKNqwIV0mbV8rlHqmgyJHTgcCYDW3BdGDOiTbtAVu6yoDuQ7MctQh1Mc/YN8MgiCV+GJYFKs7jbJCY/EsMRDSCcDgsF5u0BTfcFCdUPW76f0Xi7pA2CkDC5cvde6IJLfyWfqO6GJv7xhPpsNA2KPlaqJJ6+tvW020hKjBl5Yp9cXRRBYxP8r1KZYvB6Px2laTb1+btBLVyx+FDThk2npBe2qeK4qQPbFLhqIsQnWQ+/Il92CEqkzBbGA87nY+x2hgbmpQRfwI23Jt4R9VEQ2vq5vJOOfc/ZjBbDC94DH0XNDjANumpec+NRmd5ZFplogfNWqj+uGenZH9RCNkpKQRVLBzymR1VDU5J4IPgIWG4rb03NbmPS4jNnccr0D2H7iL+CB4AweCWDETO+h8Gm9hRyLxV1kJvZP3Cb2As5y7dq2ck+igo0dwnAWivV7J3tYXMMApGkTlNNctoAwU6w3MtoDkC3tPSi3jZKyT++RmjsDMwi8FjzLQMfgpN4f7DAJCwG3psuoWL4Ql5V+bgKwYPMJOdQHKtALlwbBiJp6fusOQeU1ReVa8yYOC8EMb7isrULo+dABcJNRYZxtWEr4dbWSr0gobbEzSvUKstH1r2QlF+flwWTUIXygpvBSvtgCpFJhtjfsYl88nPcWaYZ8mbYGTWCzGio+fcKdnD+YStNci9we8fM4YOBJZmIv4YXZVV+71OMmubpaRzzhECaBXYYUDrmSgDKcyqHOU/tu/i+7+3kThOeucWd377p2h2X80y+DV/ka6QPqvgFH6OIDuowzgr/p+fzfGch+HiieWai023/MLz5iyraJLCk1rV5JSsjxliV5KRgma4REqt0jISvijsqy9tzIip4FbHp+1OKCNUW9aEhqa00upWnOozSopi+J5OyQ9olrKdZRDOTmQHO+Z6c1Te5nx7zdO0+1Gxo9vfG67rc5YyRQlNv4tyqbk+Zr9CUTD6Ryu3sjFH5fDsL5LLt665ZPJLb5/vO5cl1kvLzm2sTWja2w2WdnQ5MtEqcriW764Y9aoGTLoLVub21jPdisqM2JwqNRuBd1bNLSzly2WlXrfm1VUXqHvfu/b4GMlgPJDJ1Txb1TnsG9DXIMFT7G3HF/nJ0N0HxB0VH2sJcRCniRNHR8oifVcsspb6jxovid1jcxb0+ksLTycFpbkF83MdH+wKc+Dpnidv9zSqSV9W2SDyRp+j07xjao1/XBoGqPadaa5f8uJ4bBkHCTQfgoMNITsBcNDhPTkkpSS5HTwz74hCDYYxJhrJPVekKFsbre2UwyoPHSusF85hzKqpzp0UJRPKWUjgdBhYcuKU/0/BSLjf/wxjk+w/IEZxy0AxuNfbvW7WHp4mc4ZM7DPM47L7c+1EGxCrlxGNg9Q1CYecKfDm2Vt7lWxzau2xEV94+eTQpfisIgA8ubpqvYHdL/oJ/K1+sS4hDi9lk/sz84wqUNYLmRk3IZkiDYoCLpXtMaJ2tKacm0a09ncKxH/P+ln7XOib531Dom72JEGW8JzjqQvbtbbhcvSaNyfuQSlMIXZcyItV1KyTZXof3b+bAQjswCki3bAICIBksgAe7sYhrioMitgJfv01Vqi3YtQOg3Q6DaABij89SLaMLaKHpsBGtbghYO9WCwJAiPcULPolcrhYlIzRV10k45rp9rF3UWpwivZVMoNZq2UJoLZhvToEm1Ya6YVw8uTVx66EaThd4BAfU0gh0F62KZGgaI1a99yImPQTRrZ5rqmw83fQzpIJ9Xvi148uXig0ecYAZSd/ed+KOPbj77fcRKRtDocZaAS6kelemj2C6LZuRaDdRblWYkKhHSwsEAtw8MtScIAJgCS47tl9rn2HZtYJVaXXyAUirt57dj6egRn5Pi5BVK2tyshoQWBQ15bez6G6GTzq+QFwNpjGIUKe04Z1cZOJTeIoTgFVC5QDs0d1LhubfI9Ku1uEm51FdXpG9yXmS1rFsm6rk/dOSfZFujAnSZkC42OXhc8gQTngZmUe7CBHh+kSgqiN4zX1KMe8XQWArsJgCSUi3ssao3TMrOl6evGQJCJC9mpvuWb3VHrvJbzavLbGMatu2vPTQhkzYgb6LGm5/t6viWWn29mNi5+ps5IjtxblJyxdbEoZmB/YvzYrVN1CiBtdZCdu4aYX2/7wJBc0wv2/rFeuEG2oclvk6zuPxK3GvNEcMtzj7wRavY8AG28iTsOY07VXNJn51TQOQuGrpqtGTGdMzIsutUoMSOfH55DBEgdMwIys7anBJzs+Sl6n9wrphNEIX0Pj4/AAMBFvHyViI8EBeX7+ZwJlx/iGhkUYqSn2bkAYWk/FZ/yuUnuOoH7+AMY4jT7lqCMI+HqRXgJSimlalQQ2TgvhOgF5eNqNOqIq2GqokdOVcr2+RoVmRp16UJBuWkDy9Kju8BoXAYnNMARUGncig+s0jJWwYUH2fH3ktstUqfnKRL6tVWRS6AcILvZfxPIshyrxq/SJVTImNphkSwAvAUIUJdqYlYRhVpN1MGjZlExWSyTfkUMz5fJMoGZh0/3L7lVZynkMjD8oxOapVSz0ft3aKz4Wl3/0eNeMdH5FPTxyV95szbpCRYymdl7ytesClsFYfH+Z3o4fFiVkKQbSakvj4KiQW0hnN39qd6NNG7tKQBKaIcGU6vu3s35aq26x1c03AE0J4a+vJYgTUM9JSAOrEjky3IbWxsqdxWHBic0FcPZErTu7QTn4wsJiFSMIbTb/nKOIPspUEAiF6Y0qLh94OG6AULwKGyoLiTIrBipnsOy+cJdYRmpb+Xtgdiqp83rwEnMve1QBuNMnKCGMJRCjEaiVy9dSlntq/k+b5v4f4B7f1dWvziVYSGW0lOvgPjLp1bFgwCL5b28jOGfjs5EBU+DF1cjc+OB2+4GRfD2iayRtlK39SrHzEJDtcfGFM+MpevGK8PVqtxQrcLv1X33tuUiE367ACnYQTFmarGC9eUCw4Creg1KF1kX1GbZSHn0rV1dDdDHd5CB8RszmhPYnpxnLfVmnOpi77iUh91vzohiu0aZqe/c8ssvXb10SMUtC7HEJ4TLsNgEhDCXi1WlxHzCJC7XKCTtEiSJk+bDorFzasH3K7dG0YhZA3TMsRWrxEaxzdRsuEotNhqSoiOxYly0gmgk8cZVRpXBhwz8gEocikK2EBoqLtJ4sUxiZArboW47brnxvhq4Nibkn+nmZhKnxC6QWCYvTknskrzPnZtMSsL08h/wrkp/IIS+GEcmxa8otxPjKNZW5nVj6+oxuCbYsOtzE3NomxLW5msQDa4yVCK+n+6kQUAwAtznUhKqBm2e1uSe9/DCcgT/7guWtrXDSnhxHoaUp3SGIBGlUBwTu526c7enUESbvrlJy3apKf7oG+2icPFWYdWbimssKdk3S8UdPnqT9AVvFVElWSiJf3uzBP/Yb2HhaZ90sGMBrtRqK+EB2pG1cCWIkNXUJfGWrzDJtjp59Cbe/pYlO9WlEFIJr11/tmLAPA0oGaqs+pJA+2BL5lKQJFxFzckemFS+JIGActyp746mR8dhCYq40UedrpKZk73NleVbSLdkblQK7sXFtB73yz0/BJwKPhyac9GdQsFd+D6YLlMsAUGFKoqXUcNK6S7LhEyyoK6ye0KrntNo1u4pEWFgFZCLuW3CXjOqkxmxtPcHG0ZldbusGNRf1kAJZSVxkEk8VFIGxWm/Ryb9eVWRJRH/5f9OI0q3paPG4P+T9/PB1LRRlG/+vi3aLNsT0K7uGGxbFBqasPbqS9Rr0ctCqwKrD4u80JdX14YmhC5qG9xxlQY8zbKzqt6b89HR0+mrszFG35EEU4uxeUTgk+rcnyyXSPqp4uvxHtE+x0qbDsfHLdbvjYspFHGR+TGLRNORiGnTrEuYNU2lx3zco9+59RToLHQ/StGYcMqL6d9uAZl8X2QO4UnsvWM5sa0SmibQGptz7F7sE0JO5D45kN36bfoFJTxGisoS8hOaJp9rb9/6HB2apVBWFgQp3RAYuZ0BAm0THUJgrot0Q6WQRcWxA33YLGHlhhQT1X5uRgpkm1FZwtbuFFsud819FnvP0j1s1qs1dO5r5c4jdIADdJVDJsGekPkhW0Bf84pFzczJXA5iafZdr9etiC3TBzvcL+Nb2JVddBgQHXj4Aeo5+aTLngafzYzJpLpBgYvbEfqBK9j3CD7VWGTrm+NQ4XlQuQjq6IAWURt5IdSxZ0I15kUdHSAEyFwMacGBYjt3MSGihlfTBgkMxiXAuqI8KoSKrb6VCjCDXE7IDWJR5Iqa9vGZ0nOsN0zC+XsJl+eVGC7qTeWiEBpK/IFec/Hs1SDTIJQQoebW1BO4TOG/l+bdxXLLEf6xNbasVaqNUcwp9+KkdlqqLZlGbVStZdmu2bWDtooya8O45m6TFoUvo6xFi6nuN0Tknkcqqo0pt9xN7t+Mdwp9W16utxRZ6jujA7b6yBg8bVth4d4LF96GOsXfvG/ifitlIw3Qdgnfp4KI/jW9NeXkICOfYrCle46oilSbR7bZimwPbN5cuiG8SFUUsjCOpQWJVUV2+eIg6l/AB+HWcmEPpJGgj5MP4NaKxxZ8/8+489FTUs5dv1WmGxDdm1wYkR73JR0dsuHjoP0UldutjD3i7tiTAxZCc85BnBJ2V0jCqsCqqkDNNgcL3D22r+bCHsh3tk4IGUCzsTvpAABT4VoZfoYo16aePAvR1Rt/ITLm0hU3fuv92a5FkhkyHCDTdwmd9f/5ro31ZRe25GW9wvjzyqitK86scN5ole5OjWquc2GRXjl+m1lRoVmptxBZ6Genmq1NLECIQCYwyFM2KJr2kWNfE5cAS/CsgLaQkzDHUDFBmkS1dYuKPy5hjzB37ZhreAKPDwIVWoSa5Kyo2VW/Y1eJV8ck0prBXB5jO/CvNbfc5mjyVYzQnksr5MD9B9zkYnHJpJybxC1UXdOZFETmYdkasLSnma5+nrWZosarxcN/10VmsxJdKWR3MsXVNCkqa0Vy6wMyqZrcxK3oS3lRMPN6kP6mmDv65KpPMqbjNH0LTkZpE0ZLwzc+KC22XfTZKntRkf8gF6rt7qnsbrgZqUxc/GcHAOEg3KLw4TmK5TcmZW44N1zRLAsMDowwgw12RLhilQyt0M8hEy82kFA+xGuNZbkuLtowTmkAhUKkahue8K6XTjEXBECPMNxBMTnHzVxM7ZdIJl6Y30HJ/Yzb0m9ioMJCKEag4NYYf08c0i7JdiHgxFYVhT44+phlvtmIX+aFSyutEa5znmtBcv2xC2WOI3lmFt/QEYEozbYUCM/mcrACKgJLQWEz/5ZGezs/93VEfq2yXel7qFYxNnNvOZy3c7sJ387FmHABMUBRVJQLVbQlooV/om/rW47tn8H2Ermfgrs9jixDJSdiKLYuf02fWEsa1JzVDztWeeKtLs0RKfZxCXpLbzagpPUXGiC8WWCYmx47dKSCIKW1fBNC93Ujf+c/jPzwA5Lk8IbAJy484LLv4TlJNcgY6GyFCXmB2Gc2450d9c1xwerTp6GEb+Y30KV2V8OuRgh72L+E8V1rIhIeLlmylIMT666XMiWMgTHNF4+o7b/JRN84Rw4GDK7EUfGra8wCq4WLKdur8JWgy/PqpyyH4I3RZnePu9XrA/SR2wKYzxMDP99f93dZ5ob5W+VlASl1gYyF7bajo4yLIASOIuOIHN0efY6G0wfGOZoc/R4dB+wnLf9V3PPeEC4U+AuE4Um52irPMlVoWklx2YwPEuO5roqiyQiDqqzab8OPLsRGALMY34VotUmLW47Tf+ceebQEtLi3LDqdtL/LqyHC5tuiUod0kI4jtWVxM7hwXvkWMray3b09gJuxsNBHKk76R8eM8Q6/Q0XNuCyLuNxdUHh37Q4GugMEd23oHCmzczxMer4Ud6JGXOKd6qjGWtZZejcE3G05TrN2g88Equnc0W8BOOG45BWHSZzj9Lutzg1ClzpLrKPaOzWi+lJNaxWojeNPXrXNv3wpYgUEXN6KFKIEt5XvvO2kw452ZZ1DzRb9nTsQSHzIp9bLFtiR9U+seKrGqq/XE/mWusrK4gHTljyivr6VVrDzlhaTZUy8EqsX0BpaNUQeW1OyeHFliQqdPLiepYRXJZ71BzcV7BxbDHzHuScN/aR/SP2GiWSugy6n/yOwJyN50JSrSf4mHCCwgIVzErgXlASg5MrKZNGcrCQIIFocADY6Kjk50EtltEseockOt4zswuVV7YJbFs93zdEZDS0ciG5AjeEa2jfoPCHwQ/BSVZVJ23x8Nq9j9L4HoDGmU/mB/SvjxBj5PlCtLCBLuObWoAuskNfXzs8b+4hE+nYIgkuV/dkkc35J4VuERTxFay1UatLl2Xi0aLzHcYu0wUvjIKOZV4EPKIVP0HyzJWzfppADkOOooXbh2g4fpn7nCJVvqcnKep7/6VluVoZu/espIf5q8tz11MREnbaO0q/M7Ce0VDyJelvVbKErSOsLavzMrhYAAd1o9RLyHfuNa5IkOIsOWxKJricq2hRb6DFJ/469qKR6KT6ayMRGRRUkh87UTPQXG8A2IJl9B9cTDDL/06n0F4GFEe3KLUEVF61TPQX2ORi9s7Bbv9a9NiTAoSKIdfEvqmZCsKTZs/pxO+8t01LDcsrIc8gQaSxNxCPYY5KFwMjwvafFB4JlGWOnT2ntnPUFZjH+Awa/9e5mBXpnPetKIGpioS+Dmve79kTHC9f9V3lK72TXrbNu85MFj2SnCDd7SYzbvzav/e2PYF5929DQulg88TVsdnxc2fCnkIUkL5s7PWrwieDzFMv7ZXkV2eT91b0yaqvnBb++gU/svN1cxyVVbFjjtuovLf4KS5EVkdXPrqEdkFXnf+urlPWDjoMVtQJSxd3xBeuzTA7Cw4ns4qClPu9Jnwr4pbOzQPRwB/Z/R3dNTPhhRfd3/AFv+LYnh6Or8mhbsGOm8bzFGG4SVyDkRTBNlAshWy5KcKRPgZ/aqrtMCCkn+87k2yQ4JuSbjYuc6aQka+ukZKMxOZlCSU5irmUsKi//nkG/uZOHxpWUXESvmQD+LygBn0gf/T6y61ykDbOzGcKCT6T3S32CitlEqp5jW8bDy60jgc2AoZNHc0mPyvnBywjModzMU/ZOESn+Y0v7U5m52X4bBjn3HkRbGxDu2PjygEJa9oney1knfZwjUp3kDnuzcjOJJFzKtrATW3TNF4ctPIMDi866Dgwp0Y4O/Q45OrPM+6AE2a4fyqiLlhHK4qds68cOZayLtsC3u8jjwxlxP7Awa4KM5fHteq6YSx9qOXXycnY83nJm/flDUcTz6IILJkUtWnutR2nz80/fudRsX/cq40I5afeY5MxzC6u6lc6LT/17IssLOjbxT4tL5zqj8zAg2JDSf0zmku9P1WtRCWvXw1XgzvBy0Kk5PkYjrdzvDDWycFhnQGCHkiqrPkRWdd0tjzx+oQH0uDvLbaL6eIvi+pqbYi9lmckltQxIYtDGL7gyRFk9c2YdrIVnzpHWucva8X2owQWgy93kHURW30y63T1UlehV1kv4dsOdWKisBEoAsSVlCVAcVFoCxcMiq8u7qzzdXMlwqWZ1BVwOrdJAFZKQCl6adV0nI8u6hxizjRWraNuypWAOoLbcV8Fbhn9in3KRpt6CkS7/lQ0tLrkMdIbbAHpQh2byz5bdGtIx+gy7+Kc98B7Ypmdrbly3gy787ff3QW/LlR/Hg7Vfv2gsQw/fygFmlcb7aSDbjZ3trg5FuFZ245aHAeBOdaqFTxZ9jl0dLp4TgwUOF8wuGO1u+qiKdiw82SW3e0rNVYMhSlAEARErREbYRe7ccQHk3kM1OoQ6EwnCZ5uB+OqMsMc8CyDoDYiXg04vcV7WsEo2j1gI587JvTlrlTb2DnX2kmnbW5x15/nu68Y4d63fbb0eUPR7bztd3XYZZccOyrIZcALCWkZZOxT+2lCnzrllO43cOxkDphv4GzY0lp3AFUBt+RqpOc36SNIAj1SgNlxB2YmG1tzLaV0BKjMoMjjPo0BKs+6A1Mu5w9n5fcAhA8mMZOB8Zdw7fCHowuF7OX2Ty6gvdInLubDf1iwDKFtBDZwaO/L20h5RPpQH7fF58CVmBE5d5Jab2d7Q4hqz9IAr12SThuH3ZaSFKNsVF6kRU/ZHNweZXY/XkeSKzuzQCtGD0lD/Q44TqbGmbg/NTEvMqQUckoJrGNIqexqUrA1FVqbFRWwOQnWS+ovfyPFI9K+Di+Y6EreE2G3R+s7BWgpFXL41n8KhBFMD7j8q3CKUgYLi8qZ0SOyYtLRIRupSN5b/zUHVXTLS0iKnJEE6VN4EilGG0CiOJkmDtvpK1iqCSNLoIl9xjooNlMWYAQg+S0W/kgus0rFzBaQpFEoaNz0gcwklNUtrPV6Oze2YvpmyLI98FLlWD+LXkL8jTbodc50kfUfsnO7gyrw7GSpiDX6MWd55sFZ2mbVuG3fhrWSCrqWOLhMvfgfGkpZSGVSucHq12MLQfMAEYZ/ppfRjjAzad8CBfuooN2w9guc8GC6P71wboHZS7N7iXowhxknoEpG8/kgifS5EDbOYVQZiGau+9/08frY0RvEpDnmcTp8VzraHQVWU/sASdWL9Ebnopky4yrR5pXViJncQhMDmZX8H/EdKMVnf8z4KLjNQts+Due2DhEN77cEFIHIe1Y2hPp0Fq2v/zYNXD+7vYlnodvRdfQw0ebS5H5+fuH0iwmxq/7d/tQQdGYe2nNHkdefM3N2fcAYEbZh6EX6vw+ZcSsRccU4pUxE9Mhu+wUgGtMIXzebZsCcZeF/Bi0Ial2xk5rJGQ8Ixj2ZEj5svJZ1c+X3W3vx6bgyoSTGXjXk9T2Fwbn4Qq2l195rNp68GzJysqLxwgB51wWJOfOAHq1F7go6qGzCx0FD6bnojRWNhMqAaRLBP7jRdmB5Qu4dAUkNKiio4qXCA+kerp0UB8NOpoiikBElFfsujLjfiUQfzJFgS2eXrmI6tG/sasnjr3hCOMsn8RthB+Q3zpK+zCtkLwvNyMGDJ/Q/ViC/CVkHkJLUqWOKV4P3CuQINqLy06qIA9CF54e2VCIsbKMdFyywr7tSYkfwYfsoh3txiEPCD5lAf7eA1x6b7UVi8WZ9AP1cjhvvR3xXnbfBT8/NZQ/EgMMtBSe/oZwhVp5VTO3ut4ENxyMDK/BuCE6ILfcT6HPL5y52m+fIMhNwwCPyAh2DAZNozeFIAUvD9+oVdvbV3usI+hOIC0jXCu/n84Krmz9s1YqZmzo2I1wTdtcXOz3dTIt6GzG3J/hmRnqZnnWkOtn9/wBioE5lYp6gn1zIg+mDu2shVWhN84cnGXNXZ9d47lZv+IMcFr1gSDUK8L6AscrKytuXs3fizNkKIRnpX6HwA83sfZTwwOM9fNJQJlUEl+Nma3XLx/mtR8pcE/35fChfiTbSRq3PXrgXXFdRnFw9Nv1tuKd6k3LhT0qmazGt0QXir+yCI5bNzp14XgdPcMGpSEFaUtzQuxZY6w85SXnYhgd5qJaVl4iJfUY78u3BDg6VCwFEKegMwptT0B4axdb4Rwj4BVzbsrZOTBiI03C4TQtCsFoMOtZfEqCQlVk/1bB5BEx/fzXuC6dlmnZ4MVh3germ02awI5bJh92eh0kTOpJUsUNaQGP4qYSnI7Q6MAk2sw5itCqSnQHnv6lYy6mChW5S29Bt2TFLit2XZFAwYrDdRhJnGgCwG9+LpKSqfqSV088vG/E2UJvfaw7L9UpgKEOQcDUmX8cV54EJolHBmzQ+CidNi6UphSf5aL0FZfRsMmivBH5FWxqJ9ENSYIy6zSTTxyg0z3cOgtUqVyqPF/4kCeM4uDlrqe56GFKVnEYRu/+677Si0czm0HX3cE90e0NqStR1oiNXU1MOHqeqJjqoOS02d/IoEcO/w76y0cAQKCqurigBOCYoWg2JH7m5FEC6P3BcdlLIraTe4Da8uiskfiMgqvcOg+jRIY8jj7ygy2pkunyYanJjqx6AyrBjGfFBRBnJBdOCaz5YKdCA9i0o3Ah/YKA6k+1AeQe1dqUj1cHet+ctuultIXRhWsM9wuMiklccDdA8Za0rxxlYTpuDr8BkeVAbVSGEYjX7A0TptXOtsp1Gdgcfx448kDxC+yddpY7wwaDXum4aG6wnX+/rOxp+7FCYSr9tt01s2KpMzDf3HjzfiH2ue9rN1gzvPxp+tqZWDCbBqVCqdngr4+PFpKNNxQplsT/VAw1grVcfWSaL1xKLEKo3WWLp8RBXPN2nCkgHARuNXnVW/Tq87GPr438GLkm9KljMAkEntpVFTo7HU9PUN7vzlWW+fjq2vb9BAr066+kYdu5N52Yk6iSI05qSAzzFAyC7N3dmYxx50HqWjoYDuHE7L3JFDHP8tUpf13V3ewDAZW8pAoQ4gqnWyVvfrbyJWBk5svnHkcGTHKcdlzWvYMiPu6JXg1Rdu7rQV5+zg7khwgocZXs0HSgcnD9XHRfA6GCxw6Lsa+g1jThUQwkXlKcAN33yz2my6xVOsopbpC7zMcEMPUtrdlhF9SJ0O4TwsO/sH4KgvvVhopbebvpCFghntQkNRug0DDcUhgb4hyAYAu11cXBOk00J1BxHUnH6wZijUoauTjUEZy6vyIFwWqKwEWZ8uruUTtCz40icApxfijzcOv8ZAiNinSWZJT7FbnsWYv2KTUrFHZvUDtdrM9P4Yng/7x9lFH55eUZ8QOpeHk/dQPe5fECBkGzbeJScdZvivJD0u+e1Xl7DnARziwgENVuKQuIIq5QvRAz5oHU8QjHODB8JYJV2bgBAGZNcT4SjW1mB+gFH08Usne36JPlUfVXbLygbA+RpBYzLagWqWzeiafu8abhTjNIzwqsbWvtwL3dyXXJSBLjncPUUWZuyMqx7Lz3mWVtKvuRPXX5zUIuuQmdPkNedXTJFWogzqelIivDnVPANwp3f9l9E5UlxM0GDNnEFpbV0xzPLMly4rg6W2o/JgUgHarmChduhydAWKaVAAEd2FqnvwIMJcLfVT58H58wGuRQ/ut2J/QoIOfekCgCke2CNg7SGWkKdGz+CN86USBmN4OG9yBQX5WWyUyaSMmpwcHfsxdvkqDZPxRsFflvZoEropqwQDhG4TETMiosWqyqSB0dGfG248OA6Le0t7gx2wM2HOhLkX/JI4lpkJMjMm/17Sx1o2ml5mEf7m7QeL0owJubWTS9LPSWNZWSArewJbrWMtHxuTWzlxHr1+g5iXlelmfNvAFJ6jxpsGCMtIpFL+RnEC9YaIx46K1lEBVRefUKh5RkayYcYtaiz2vwVksi483mLnxS6Tii4+XsPWgBCmukC2TsBi8TMCw994Ux2K3QYOqzOInEH9hce9EzysTBpn8P29PGz3fMlmj6D9VAZVQOdqsxIQqMq9/yAXCAnx+kCkH+TdkNBvpbqPOZN/2bi9e67EFRSgYKBJ+6kQtT8+4SQTmdQpKKrN6F86AWs/RYf0FdVUY0ezs6GszEmvT9jVSW49Wmpe+uHtm7BSi5JtrGWNS7CTGRkgM3NM+X2d26Z0y8zLMK9fP+I6RliPjpksB+GXuQRcdGQ1HycS50a6SbpOtQmncIjYJxw3U4nEuhNvaq8brcVqnWnUooIoJ/UNIyX/KFlRLzSw3Of4CSiNMKk3SKvJZWPnPxKom1q8DoRbF3aQPWD1KzVf30leTi7oALRszMAb6z0jpTkOQVbue8C11rPEDh5k7mJI7ojWofoUbzhQmexLgNvb5elpdroo3SfNV47rVQme04t1b/YkbxEzAEx5mYxSST3k93zuMTNKMxn32A73+vq8Us6iEYRARvR11d6ev3WCrj88Z9JwOY9KpDfHc/pIwpcJera+r++eA/seI7M0g3lRV7kHm0+RldGbPRobNZb3zXk+Hsmqr9wXTI3UlBAG8ZFau5pi4iAuSmtnIBl7SHMHu4++mKUBCs+SS8tHXakVFUIRxB4OVQTKDLtY+SfhbXXZPVqcgFd8jlStFePy8aU5JdgQwhPgxFQeOkiFaXYvnx4PUuC5fD6EYSJ8ACOJdfmUb6v2FebFgWEbTm0EngTD8l4kiq93IKrqu4TLiTwNjykclw93IGswtIoK3flsZQx3/WCErcW8/xTxEbXAW/tfMmS9CJHS7DsmKA9/3TEQgW/q2/yyHUEMnR74gK7xS3tMVoixGrD0UEEkvqd7jwxbC/WYgxVOuIDGb7+xADfKGz85Uxr8+21fRvy4N8MjH6FsJHUnf7w92Dc4FjG2JSXAZB8xZpgdeGAfiZWIi8VV4hIxUfShjIMky4PEpN9JMdZ0bd1HoZcAYFaEo7QZWxACrsOPAWFNrvM6wWxul+km7Nub+GzU5cCj6tWUTIpqJQJXYaMSRO1AjnqD8kLKSiQ8AkigAgTZvx4gR6KwDx2VvfX/wVqWab8gelUsmScrYn75zyzCdCMxCZWuJHWGtlxt2b1JMBc6J/j11w8EvaMvlWJikiNtV3uKsTXUvhieDNZYXC3r9SX+m7gX1boTibuCF4vBchNn+9nowMuvNjkWgC32AzRhDKGbMEeTMaE4DFEdXMCYGVbxHkX9xZJ6rDpt3rmoxM1eris3TfSINqmI/SZiwG5AW8Md4J63HTCXQWPBz3ni+eN+NXCxZzaMUf+e1/nqxbud8VzYFGqe7NsrSrwZQdwfTk/N7msuTIbVlgL/2keZN3wTRhOcbijixZYr/zoVl7Dc8sK4X1Poynv7qk0TzyZo/7VLBiDMzpF/Sn5TzHpLdoT7ItiwBlRlH2SpHgshNVi/Qx/Qn/WfMw6BoCEpMzMDvHncpFT/uKj185dzy1t7cx8PXt9R2djaGDt3OWlLYlpQTQxUiCpCWKWYfmkBi5Y9Kb5pnyUxEJLyFIVFlU/wlYZ+ff7uLdphHlj/+vdbJXOeoPozar96m5rKcPcEZMT+9EOIUcbJT1R9SopmsCn0JNpxelkNv2jR3c+73+WmNpVKZ8mtqZ/tUtYOoHKX+swRvtCy1H3oKFVXUWjRW60vyFrZm16kIYc1LKrqpx5jMkD4fgT/363VtTD0XyfmEf9hJ3Y5s/A/uO7WmmcPEgxEjO0Lssnyw/RD/xUxli/IfuOHGBmBohDhzCsPAlIwuIUfU3+MDF/5GKNFChV5y3vGM0Ke85yfvnJ5laDxj6kC0qo/KBBYawXiey+B3LMMKPLhwrWY33sjwx+lXsMtPH3p+uoJz3EuMyTn67wuMtwbgdfCicMpUI/j5z8P4Mh6jga3oANV1u5hpagIFgUNKY2TsfOWMKIda25UN2ZSc1EKEChwpeSecPfCK1t6dP6SpKeQPCtLDskh4NYYJ23XDgUr/t5qJXaCIrPy5FDHlbk2muy03PzogxDK7LhCFjRoZT2Om/vwaiD0wcVfip3cAtQWbpRLlYP0XCjaiS1ufBCqGCr4CgZlQQrKHaC+UvSHGYz2haDqzhAKKJvUVlvjRBnYveQfN4tPFZWZlQsb3A3jyOvXSJLj2218oYlE/ztGJQC44LN6zJWwvShX+G91lrqKsrKyJkKV/SCgpllXXlZesURWzJ9BKe9ngwcntgjqS4sDVwREbtxWaij4cC3cjKleeWJlRaNZVw/ezlpuh9pIlzHrN/xY4XbfJJcow2qOGVjt9WnJtqE9sBSGAdQsW3EQUwaGR37K6i3LvHbxkTWxEhWGcEVeGX3SThOvWGMS39H/1m0Hnksg3d4gerP/GnGkt7zTrslpO+ZDGjfEfES2FUojalaXW6jzPy2JLwK1v8GwxDfvn3HX6DzKhwt3Ge6eTpUGn/SPGeleH0TlCALxqTDER1TDg+mMvk10CDYRy1qk3YcwpfDu3T8DIRAHIPv4uhs+GcEWIXqImuUWDg+eTP3wDj2BL0BC3iZZjj+2XkE4b5ZMr9X1rerrJzTD/tZ7q6fiUngCu6FhDRuIav+23W7YzrJbHOY6lIKBUWKwCUIJCCyM+Ptda3S8178vtQiJ8TrbZ0QEduIN6Y/faNgfnuktdSdGdWwTbWvGJCCwO+Kfd21+tKNqaAx3UkfBcO3FXaVME+HtVEsTCvWdUVOz5I6nkH7w9NWLVyqcs1kXRB7eCWaFUGcq4hfEN6mAOzUbue9e19WzYoOYg5JLVBAKWc1Pm9DYN0+yv6XYHZm3YqDjbhDHGum4M2EZTZGanqBn46nnyTTg+pKbx30K74CfPkvorwl6Qp7A7ojKpvJNbC5JfHeb7NPA7DhpdtW+Yn6zw04Gcfm+rMVPbco/E1s2KaNb9ttkk3Gv9+3W4uhTy4mMnab8ZhqGX20zaCGHkPbweJws8KltJv1KBABuGbDdS3rL+pOUTkLzogKfYdyvLFv2H6vzFvwKti2ljRte/rvSRqDIxkWygq1sS6ZdIoFg77rdVgP1ZvzeLOjZXwpOL2dNQ/C6PfdW/O38lnXRzOlTZPwmxjYTV4ZcQZdt2yNNCf+OvoZXrCG0OYZIS6yrXDZv9A9LpVd4s1b8Xt6J7SaaKIMr3MpKclYqOuEDKjhBu/lARSeuE9mfjsQjCfvrgRicQSqPalvhHnhUC1fCVaPre2DrgGslQk5KTnSZrpSWgSrs7whW0sg9x2il97w7TXqpkQM/kYhUduWVVRp4K/7aHqRDEdMY5eZQ1RlOeMTjdguYcMvY9uBCVr9Tv/ND2M7ij2zBQ6eHzvLVgO+7wRBotBiTpMcvkQII0RwCwdnNwA9SneN4+LcVXGH/+qA/on67a9q7hDzvFEpKCjyAZIPZ1960wmKzyJ5KWhbNWbAmF59L8NXS7aipdiq8iWiCXkCjh16PW2u5nn0rLo5OZxWAtd18S4WdQMBRuJrQt9tiuFJCuA6WChGXn3j1n0omVUPhk9nk+JeXYk4JARWjTGjNVoZ8bf1m+nECvWyQwTiXRw4tWPx0c6qFyFQUS9CTqAzX+We0ZDdTt/Vx9vaVXEwEW4b1fucbfcAkwcTNJEtFVF0yzflWJeyl36LKo/jxrHi2Y7LfcroLQUMKcYWtXkBQTLwBw1gAny+6LC8wL/BDzOsRLADKNXjz7EenoXZHF8lEhAWAgwEDODPe0lebuO5FkDKxeHNp+qDpTxBywQOAxZWkSQq7xrTGBwi8f+isCRdHyUBbQ1iIjLpbuGGNL3/7I4s1A2uoEM1lYMDNm7PYZsPAhvMRiWq5qNO8LyklmcLcgPYnJyfZQAK8ukmyPNFhezH+hBSjqi5JT8+KzbqeFZeVFJ+kiFNcV8Qqrn0CBAJVgvG86ahzE5+OnF+HGRVze3ms8UVcZFSw9s8/T81MfRcXevXVd3s2QM8g4Snq589iAGWxRsXaea1gwnlCAMQPQWceyFW+2+pTkAsPU4e3+GYf0QNWK3KgZhSGalWgBtnmDP69aWVtA8MVvr0DI1Qot9Zn6zvWqMsBASw44DIKgqGM8fU4OuF7FFgKCp2d/JK0wOcwHCxYxofsAJHZ3ZOsupN5Dg4IX5GaFjC/94xzhRcp3jwmZHb+uMmkNNLX0zfIPMh15amrOC5XV06DAMyE7SWG5Q7rkSXJUpJ0uhW/Dmb29lgSB2BCLw5sLXhCelShXX3Mzqx0hDJkYSJ5d/c2ZPU3o3uEHrlr/66//XxZjChzydh4sWfo2Z2282aHGgLgCGh1s+15Sdq98pzcuqP/nnqy2iRpgCSgC8jcgUMS3CSJimhiU9NgZidEm4Pm/e13bA68dBHauOLRaDUjBmR5XqcGUjYdYfyn8RinMkSeoYkeJpCFbeUS8zBk2tRcBfDz5FrpbehfALX/67zxJDZbmtzIhP+CL6QaXfQuyt7xBdMFCybFy+Og1RREmYv94Hfg2HRrzCoPbpfA06iyO0QbxtOyBb4CtsAhJ9b9HfzT4iugZ9PQWB4tv51hQ02MXrLEjbWDf5I+7Wpz7Aq0SqFRWZ7BKrw608LxR+LIDuQwvzC+L78Sn/8LKR49aiIKLzBFy47WJv5qwQzyqVMnLxHZ1WbsFripVvcW2xmME8GFWM4kTLIcJOBO196Np+WK1lHvmjoE1ZpTkzaZttpbnthpnos2mbG3MQrMM3txJ0wcTEDHmkrrJcFFNi9sioKXWC9eGvn7D7P37Lrn7q3/4ffItwnW5qHmi7Q2kikqlE3Nytqq4/orLcYaQ/BOgxxwpDM/3OWOabxjjo3zGVPBD+kzs5n1pG7T/5nVUAM9g94AdRattsE14GzcrN1c3SILD4wrnx7wZX7+9yOjoatrK/CWZtkU1OZbp0wKn4QBHP2iYIm7Yk1dFWxGQRSH/4hhYHLeqUB7vwUwQlYMKm1DMfSF5AmFXUbD/57FlysKuyxSuj07bdtw2KhIcVJkpCluja2wL34Zl5lQ+EfW73iTE+K+HzQ9x7lqdjLkCnIZORlq+hCYnN35AoS+F6OzInYZSvgtmyeLKey2SO726uSsccJERUqSIyMxzqs53n0JyxjMxII/sj85g2jc94dMz4KrpqdCL7vU0ewhzeTczuc7OdRrhJY6qygckmTxvBvBId3Pvc1ZWgrbnLfdDxjc5TgACVRWBlGPJ/EyY0ExucykGNQqIu+AAL4b4SZBTUSUnR1KmLkI3qnDSqKacINIJwSeNKRqTwZmOELxZaVxENPvhLIyKI6oZv1O72OSj/XkkSZMJkh5m3aRmY1bAb2RSd616VTXc4zuW/aFGIJ5v2Zlb08NTBXxmGKDs3fpVgqpV978cP683LOzM9kJBIBzgAahNArqUd6aHcsTvMNsuTelRpLIIOKbV8++rUtO7JYMEV9P2AGzS/jLfrZgYeKJ9jzCEAGO8Hz5DyMYGRbkUihqodpZ6nVupXXO6J7qScHbt2Otb7t3f6WYwiNqtllFJsKMzoiLYu+QX26fZ6epSn7kzBJO9Zryta/vE1f7VIt7QZBx5/D3qRoeenhtXL5T/j27IurmiuTtTpGBAuuiP3760zb98LESKnyHQTWQhvbv2Y7cvo1sd+2D7ySGV2Z6Of8cEbgi7/QWC3yNUMVfGepUG45sv33b7UtfjbkzswhBQUzlJVpeLCYyQwTmRJFCQWymFFUArcMtg24AWzf3azeaoQSRpGYxQgIe5AhIS7jFqERirKBKuCA1UUyUhkh8g1uaznvh3QnkyI7b325PEtlx4R0WTtZhIx9smCxYPTamZtfCo2OImiao+QOmcIb5tMNr4vOcFt3lFqE9zSnbnCICJeMpf3xHscu9eqYM/8y/0+yjP0/jxuPGhjkxRRBIhaEUzZ3fbP6toam4DJ7JkYPRqkoobTg0iVsJBMP2o99R9Gzr9Vzy/y6f/hsoF29c90w2/QTK2726vhPePeQc5Wc6/ckQjxpcUsy8/dITKwjCuvKNndjEP15PMLcrG+a8p6InriDot6iaBrl4bKSyfo2biDbdfE6kZl9mqeQde7EgyrZ7XsBQfRuNutUN6muFhAoL+7z3hzt/e9hTzyXNHkvOyY+Tjsv1FnqMfWaBQ6ZIYxlYeASvG35J0Jxs/U+4NtYNTcA+rqipM68MQDICdv3IcvPTGvwHYtL1zqJa3bKmQFn4ntPhe9u+IBrG0+aw1DHWe460CZ3xjo5K+WyHPqXfgFFFaQn+hVRYUXGfTr8JQSCCsqWmfJBL+Pu+D82OyJ5wd4WlsLa5uwaT+P/jOF7J2qH1a0u8Q/64gUusUdbfkZh4fSb+JzzzaWJnCMLd69bqu+0IFaZ2eaK8gPhmy1Ob1QvY+phT3t6ByavlpGBJq0fNpE8nZKlH7LMvbZKX+yjNynyzg0f8ZON4/QjiuvVkpX/VQTo37rjr3YoYf21C0mdyu9G9emfNYPfWZY3BEeL9i/L8yl9Ur4SCbQrHyjX9/TXVIgv9gvw4FtUMDWksQEm4w3dDOruovqKYFU2PC6L7Y/qL2p60FQaJ1caWX8I6hfCTz5P8iJaWF5mHR3jy5UXRnc2zBTH9EV2A82FCWmlePJVusCIxnHAZt2uaqjfTT+37ZZTdmv8CdMjtbD5Og7dmUmoUqAZHrunCN1GbVLWSKATfjBeuFkygVw2+/+XvjvLYH6yZNTiWAGa03608fD+1X1AN4OBMAP+C8B2DxE9uJOJdkiaJjBET/3Mjstu9Y0mrKKtIsVB5jM6eAxLAngRSE1lDioI6o3A4t7+xYK4RqtgSn/AHl1uxT1bsFfGAmlBrFw1StwW5yh7QGs8QVp6PJCKCPVSzKim5K6rr3Kpma8b9VpO6gH9d5tSU7DjOSEWsI6BOldTVLVNyXksMxm0P6sI08JDOh4KXmYobcE9M4VPW4pQN7ZkQPQtqcCtqKVyUyVwkCbmTeSeHW9TknpZ03Y75Z7UKHxQdKNJVUoj+LkMFKTbSnOmkqqa9drg2xJn3N34qd3LKzZrPt3ab+4ySGEsrA9QUxWTd0lt8a/QzunpplVTK1HhkP4uEjdycSSHp9bsYz9qPEKuB/3w7BKlgjHvC9Gzi3ftUExPsoWdOvBkIa7G7eUbuKuD+d/7kcCQRa23935D8j7dO3O+0Ox0TJ4Py3Y1lqhivLnW3EofkT76EOnchppuxyJ1nZxg+o/280EPRzU7pLU3YUhbsgPImLHOHYfp+CAbNxZ99Ycfm9hbI1SCa+QK5GCbAx+wdNxB6w/tgYG3iNBP2AQ763FTEgGE9HS4Quw1KZ+xN4mhmNWs+Xjo5zIY4EEIuJUsBB1ZM3Pn+FkIryByDI6QDsqADxP2LYk6bUWuHwq4O6z8CiP7Pa5Fvp6NUs/2Lkg8Qf/3Xlebh+lwgW23nS6Z06Z1eTNfDj7ma2NzVSiuW56FcH3i41HFEXJHBXka55ix3h6OY16+RI8jREo5ijhwpjARI8wjmeYCVlWhctmGDnCrny6iyoqLXfyjPJl9OloNHTkv7pMuH60ygwtJlxeOB4HseXQKxALk99GqV7apsuA2C1Se6fJv1NsQMvj96fTupXL/hGQLPIrcc3v75J7DZYkTx+bFx+vd/0hyB/7uhOo6fuDG02c/rwQun+I5aMQbBipOT25zeg2NtrEZn6T7k6VNkL7KvqH08IDXMPiBxbpQ0NwMPhgco2d4A79wJp1LjzsEGpBEZHIQbX+EO7vxDBo5JY8irV8iYQMGt8Tih0bXyhsBNmfQfoYzQEkF9iXdoBvwjPWpzY9C3xGFxLUVL5QnowLZgxaCIccDvLOIksbKSOMmcJKoHLAdA8AsP5JgThemunwtcSfyw2wqz8mOdmvmPB8exYX1Ib7hdqeQxzKtXmDGMBzxB0Pu2fz8ukbsWRyyXIieCO3RaKilmLPsNMsLnjz4cshcEwYV7Ng3l8mq34Rcx0hl4egnjCKNknka8wbxBpNHfwEfgN3Q89yks16RLKZIt5PNkl13tCfDjzuj9Zq7MRvu+jbURBMOXizWk5PEY9kxTBFFNqgsyPkba7U04QGF6ZcBTL5tyfCJEYSE8Z0Ta2SkdOQ5oTIPAVwFwT0/ZEFJXF7Jht4MGd+juN/XuzikwRZxUA/Uk0biDwdduapowSQTEs8pAm8E4JHHoUS+Dk8QUwSmkrSdcBxl5zjUdrpCXAa6DkqMeHeuG7Whpnxi5u6esE3Jsks5nMB6DdFO7RYv5+ZjS+kjSbU4JlenMpBbTz0HFyzaGbKpLA34Xhh5xnyGnkbfcK+zVWwO1gSTWEnxS7dbVllcEXz8tX/PaR2r4hbnnw/klgCdk62ozHkoiThCvGGICtZPzIfOTrRZjvEIYI5wmbCc8QkoPTSRBN+VPNpabKbwDBgMCIUIFc9W+ISoTpXvJDb8f+nAacxlzHp2gdI738plnlDDt1h2ssWVBt/AYJvnuSHoReKUAgxCeB3oub/5Pqq4xdL8yXedNQ63xzmFPmz9A3hDGvo5gb24TVVNlVotuoLNl6gtzDDG91ogTYaMe1nXZ1UpW0F1Vc6o1mJ/T/jp6mpj0QRzx9fmckUIZVv/skmPPwUJEBt8GBDDTAXHSJCVA0UL4DXwxRMATfudRmlFhTl793Q1qtG90EHiXHw5oU+byEMQDf6bmp9ul8Ds6+cl26ZNew0/p6HiWp9tPAhFkxyRAbnJHp7sd9mXjMcz8PCbJ4xsCdASQx9ijylHeke+TZc2/iBkR737lcjycZckOb8wzoj3sU90zAtwd7A498yW4I/GmZgwvD6IO0+7ut+GZbFzknV719y9prUL/YcBF7I8hf/yBQB7bEBg5N7KMtQO5dw+B3LEgMHLV4PaGiC9L4r2nv9rzqzR8kriduK94Pes0Mvtbd+D6WMpVwkTaiXoWT5Sw5ean4a/cq8nOJfb467BPFzpU/OyUlBUQADkeecKL9YAy6+szIUMM58apW3E890yovh7KdOfFPTn+JE3uBkd2j+PdOl576+pfbuvlbomqRDeUt9tfBTh3KKt++Tpf/ivyOmUHP3SKQEAoSRrBTCcnqdc7Mi70FvJFbdpW3aFl620qPO8WIG/Tj1ITB4PUPPL6xV7X69ugvGWuyIywgS7jgn526QZnZElHD1Ws7MlmWd5KVMp7j8bLNyx8swnyLbH4h66w1XLwK+0qgMqDo7BNpKEUwAnZ5ciVCuCgjNpUgALPIV2kubXj/Ewkpw5vluVmP1DwPDPHysGtGTtqWPT4l4NMYKi3zgaxKJ6P9okwpI/DOLmqpPQs42ze6oZrENoXIkzfXufnyZTKuC6//Ots3brCIvEmMck3bVEEYwYABIHyXmwZIJmz3/B36OB0KhsDgS2CsCFzR+uGzJw3OmCwEBHtpUMwOJ0PKRgTOYDRD7CmE4JeTfvaT1F2soH5gsY1lZTOuZBHx7WPwR/q8VGyFX2srLwpLv0tSAe3CouUVnkukVECRtP7DZqSA8DlnGAhep6pW7DroDONKWhj3Q0SYx8C2Q/D6juTlPuUyTud7XMY94fYSG0nNC6yut+Km0SZC4bbvdSJnjuYQdDeiNLnfBBpLryIUqbDnVXG73yj/rxcXVYvQQ/4LRbAEdFLTuYBvyMmpAnSNSrjzmKMAnMNivK4hurnF8/rUcXuiYdwDkvumG3GbsTvw2Tet8dGsxMTDM4OxhA3Kc/dw1XCD3OfFjsfiY8nCQoIjdkHLKbPOVcEOI9oZOSI0cPzLALzYSCUI+BSXZy7Ggi+7iJCOgBUEnJKoLjWcZWlySAJVJV+u1eVyI6S0uKfPw+OBHYL5uYU798kThLVcOf+Ax2wlu87gHSq20te8Opj5/vJacaVRT2qbnbUGNP6yT/h4NWGf4RJSilo/MUeSJ6XJ4dQB10JyVFFJtNZMQe0YWUeSY5+cnVsZjYozcXI6DnKTpyEbscsSC95xPF2B1+1v5oBcg0phQ8cHgQfsijwSOBW8podQHlMLuKb0KZYKgiutX17fbEkCJhqxyxVd+0iWE9hGEHUWaGnEHRgnncLBd2tq7kKz6u1o1uv3qIjlfDitfXAyLCC0KcQnW5kUCzVTs6uB6eHPoMAhVrXUXX4wchw3b+67qUh2LGB71HjMhns98tlQCi4Ljr5of3+i+JBkfnonRt/fbt1AGOhe3fz7SKnsDc+Ft/S5UAgfED1Sb+/h6NSrC1qRyMb4BGaE34A4No+cZEGaIZ+qoqBwj1fCWjABlK7QDYA7fwy9Zf6IkuJC3xH3EkLhnxsavOSLIiehTQv/Uw1n/yVQr/t2qumqHtz6pvoYig7ITclN62tIupbQsSUvmW/pQSSaUplwn4xAzFuL+jyb42JzCwOit1j9kPB/OqCFUHtMZG7pot8llKt6S1LgPCOOHWuo80xTbvijPpmpCrmnw6Pk1L73aLpn0WrJGoKFzWlCb58LDCiDBsqePFseEs7aRCqhRRlqliI5aBFSKFdUPG7UwsXr15ZCrHKIc1KuFhLgXfL5geXbghfE9u0qiEk46zjr4WCtUs3S9fnNjb3xmVP7ZwDnQtzJRDcufLbKesjiNvQvpMX4fP4i6yt6DYMjpW356moFUT8MSYg6hJoTgpbaXS8JHPuNnnOWdlcYxhTn589uEnwGpuynoXDbDMn1kRhj8tdPtKsqAVE7TSUGNbPeRTXnfdz0cKUBDz8ce7W8n/9p1T/MJfzUtZzbicFv2QBtN1dw01PljlER1Dm5FCKHmWmUb5UBH7CuRltJB4Q5drDU04E+MhrwyjDG9grrWjnUDotb1b8ikWdJ6eYpo4PgMhZAg4YpAcWPv/UacR2Ypoa2w2/3vDnBkkS1r3TtxPlmv/th4V2ygJ9HwvxMeXO0b83S5OwpNT3mzfMkdvRdHo8oJ15znbjydWIi2iANoP3R7B4iONdChKQ92voHmfbTW495b/SdVPehmKPhSnHA+unfx6SflzYsUKLTZL8Bovh34qZxQt7f4UJi8DQ1Om71XWFCztSTR1vjhQWnl2QbrZdEbvCrr/uSVPirQvMC0N+PYcWd/1twSP8u5MRRbeVrbLLcshRglzpzvOlNqV7Iou7/8pPQN2k9/7r8N75DBrQ3WTno49NrwVEx+JZhFgX+cbpG0RRwPjjwb+2bJojFQAajsaGMt9yHq+IKcnjMnue6i3suvWle30epoY8zOaRJhbGRr2LgZ64/c9Hbln8q2GSX5c903XznTWP+k288n2a0268KeGbBSEFMvJYzGiEV5HC4ovOzxBSbeQbAcm8eO/51pneF7KM62l80CVVwsdBZiTdNnq9FY2K3GXQEi7XiQJ+ApaYCWA+nSFmwlQY8GDAB4ywhBcUEv0eIcOh8nYFSdzY2D5Nea5DuioYrSCwYAuNebSEnVheIYpERCM+iYWJdfPQCICRMpzyLS1ii2nc9I6hPrphEtJyWTULEXsbmFUSfcxZP2DscsxzC7xrpF5Mi6SZuEXvi8YRmCGezE5VoFyAwOC1U+ZdvGWcv8Fs+EIjApgQxEiAoVdoYmCfvXxl7MZhFfas+81N0rOLtkOldg12jXZl/fmktyzmH5KCI3FYHr46nTndV0EP2RMWS3ccAQ8eNX2tip5Y8s+Z4ZXjbZ+7fUoebI1NGKdsBL4jy5p3hQVVBCY3Rd/qAkQJlJXIJvk6999BmQT++N101srCxSwzD9Y9mBZcw3U4ltnaaq4SQBHc5pnOU2UVDkyFIzJgNGoRurRnSfTPF+ARwRjmp1fIN16sjLbIjwSMyhV9bKZ4UetT42C+xd486Oy+bH/Zphcr/4QgemuQFWwPQxHO55O25CB8xO62C+Sbaqla3hXH0XKubS/CV1g8aq9UXiD+LaLDiV7w69lI8FSeJf+3OCvSgZO2/m6WF2YS7Pab8IgjQW8fq8iGwJos0rW3GIp7zLYi38YzUCVlkpq0GD9AgesGoOqWU4em0AXrBTTENgQy4atewkMQIjM16Td1FsVECe8mnp1BAYEqg5ITwgeAH3KMuZ+yE3pzh2Fk3KHygR8QM968nd9QjjI7xmn6bkrOTmiJ98pFx55iBOsVZz2TbDDQl1LKu5CBPOIXQEAk8aXf79+AsLf0eMWi+G6eTTR2TsZNxXFiArA2gphjJYmOYb/n8Qa+QdqhZbsKz4EFKkVomULcd0Jvwe/WRYTFDWVRrnAzagkAwOUC6rtnthXSPixKjFtFOovTrM+ixI+qbgQwZGS4abNMXK9TNI7gJFTwQgGISSguCfj28HTrpJuUEZgCUi2299yVphsLNm0zyYTrOqB8uLCxIwuyKdDW50GlkK7PcqmMlroEioeyyhsToK5MhkJvvonPL/rdGzesyAJyWlR2iTp9O62gvTULigetVaaZJALN8l2yCigEKsk7KteGxi8RpotZQPDyz6immEOeHYkLTpJEBA/PknOwfGeT/dPyoOk8nYxewPKT9D0voNRZ6jx7nhpXBAQfhwM2MNmC+IIIeRMOMt8qk0XJ+ywYhEaqwfvE7vYuzF3L51944cI1vuBAuIwMHOTMosIjXGsazMVZt7ZaW9g7XrivCL170XYmeGubOOv7u+M9ku3KVA2XPvr4JcjCI9hgAHkUN7KdpQG5fx8hd+j+AxLZEJCGH9yGlsNwtVZbDQkvCMQq7cBx3APAYn16um+h72RqYWprqy9U5KvnCZ953FTRHslCxPt8ycaN4tB9xMfI5eWv3W5h4YMisU9xseiJ21N2OFFGukOhw43UQlmb7cf25r/1eJJEb9q08cv+L+uhwNIjJ5MY2AksIwkqTGIYj13JT8mTpCBPwpEmjzEwn43cr8hF5CsXqLxwJUwQLxImCUYOARG/IZ8oW5SPVj8exSjjufmTsSDQWOefutUgIGGCCqh5VIg6kddEhYx5RghtyjPfl5nnGaR83Nn5NvmtxVcKVkX+ar4Aemu/7xIWhBSkQjFjB1zc5XOKs+/LoydJWx7JSVV0ucYQQBm/tZK834gZP8BeeXMORQP6SDMRQOvjvSCNkrbh+WyMFRO/jTRBfMnN5AYQzgIhzIWbh0eaRZMZgZtBVv6aeH4hV7uNXWm+vhYDwjmtZ7e3QHqOjGaobNWqsiShLYPKjtmvucqISmo6kLDi/RB3+SJ5dCVVkggwRDAgbsblBFxZTO70a5z0ZHFSnY3qZN5q+uqZBfV8sjON5Tl5yi8xOOhUCC6zPPaMP5n3EUtARfDyPn0jrLvhKv1DkjrVPDPQ/8VR8Rvae/tJRYSOLTWbDMmOx9hHVFAjux7ztjXv164bxp/yycgBiaxSlh86parMgr24raJxv5WskXD5fMf5HBYGjP4xpZtTrYTuPXf/8+D9Se8Yk1AGCluAuA3TLmAoOQkVwCjzckDVMSWqKCACb1r5Srhk2Eku/BN5IpS8sDn0kK46CjLDvJ86xuWwS6weOR7QUqCuTYM6sYfQu4GPal7UF+hWd+gPAuOKguMUQ/Vt271Hl7vnfi+D/Jp6TJVeN9pGwgpH252/ax25Qn7o9kNqpOPDDXPsQF9iaKZqIRRHxnljaptlL32rKKiUHYS2We7/ZlXYfawiOISLiCJZ/fl8hGqzeEEVSyCccb2K+5Xbf5JAXwwB2iBA8v7ujoebgicPVU6BbaHBD7xZaEUzI++Nc1iEzZYtkbApN3sqZyh2+EH4999ZMHNvzaI5NoT8JRtXeFwWpv/8gOVzX78M1iQQunIyojL35/dbi6GeHrQ5blKIQX1WxH4gmOY+ulD5bksUxKSsEtBgK+gJbJ7YYsgyXmwy91hUyQ1wf8nTTB7ZBT1b5irrZRMweyFm8GWtxIKCmqcVyeWW5HlUpZB9R4mJJPUn0KV9bTPniJHGiskQbDcjJEvPneCYNI3ZDfUjhhzc6CiF71rcRsIuPnfI2gkJIlGdDhW52gRHRxgceieo1ei7dox36bRT24mi2Mla4nLTR+Kq65ge7jJHIk5aH9jQweXZJKRTxoUObKtISG9eCLOgHGyY6XWRLJ8RVBoUilOl2q7JVu72gpyarmw5r0w5rD1yPKkh3mRgxY3ZuMlriihK+02AoMS6kih2SNFOYkVCJlBYiZrhw8fq3EFkAqYyAlugqBT5WASUvrEcAFsrFnkLBqB8rBLiIGVYpBaoNkgAoWCy0aYO3rIVrqV3/Vo/9v/X9fQuuHbr1tpUMT2WHgNiAVgnBdbMc9vuvtCfhcYpuxul/2+qg3YwkYhIMZaW6QM3S5phn0w6RhwRiWHsgOo2k9ojdlGsGOd67xobbgEDdXez7NOeOrAGYCIjBeZzNRJNFmhYQWQkAq0Bdbv/b5Nv/AiQ2jD7UwRIoSqOxuAKRAW4BvdOQjGEk/Y1YVxw4wDZJ9fHevQGQJaFs04SoBhlscIKmKQSnYKoUB3KhW6OWkfmZw539Q8RUH4+FAG9hLwIaF2eB0WS3fz8CMadpyj16Z25Wza2t+ZA2IALXNbfXwbT7lolrFiUBlXDAwNwdRpUWwslmb4BanZQAb6r9126qTEJv+uclGQMCoLSNOOLQXHU4kh2ehOUGAQllJcnTBLaZijhGBMEiviO83qaKU0/D51dXKBGpuZfIlgD89/0eIhHbITi048x+xSZxzTMRmgMaqSfpQ/rxSX9TIICwxQl4MKyGdaNXDGxCdMZ0wmBN+vmBZNezKi4QDxh2ms6IS5g3fxgYrGrFY9iLDTHAky62yhf2WGUNpeQBFAaFvt5Fa5izKs+hiUgZSExyffsvmDhhQjwGQcvFM22DWGs3fYlPAaBw61RzvZqysJiYtFQ824X0M8OPRXksYr81vIrZdVv4QlM4+s26ldLQP0qzxAfHJN4lw4iaRG0SAACZSydlU4ijQ84QY6QisWzRqdZJOq30oklUjn5REC8VKq30nbrcRj9yk0ryzeafQdu1mfdAvn5QE8QWm4FC0/xN4olcvJJayNJNJZSdb9UHBdwkiyXShySLhdnbczSY+y+djaCgOkdNTVbyTduHJyMTOHfSb0+1lqFr7Hq1SH3LlK3VkMYTGinpxwA/IwvoabP+Wfnvho4ZKfpGPIzMmZKYN1gMSOs05ppn5g+JZmRnpo+GdrqVRGm02avQVrjcu17bVuJM8RbwHGG9FRLekak4abpE/LMVXNK22PYEbfIPQ7N7Sn3+oGUZEEwLDFkSHasFNNa7VTBr3lzOtphVB+mR8tCqm1/zchkdPponWSczda/hlSWIWfsME03Z8rqYsa56LZNVnu0LfHYPuqylRk/xPoaRX7MfEo8THpCf0KERebwybiAP0ON/8aDLsZ7RpP7ydEv1PP3riddvyem17x4vQv2R5M98XSxxzdJ+o61KYKICAQJVgDbg9ef3whmYcGTkXwdc9kjHL+o//P9/CBvIfc1+pEYy3l2x2Y07wYYqvqW/L+YKQwO0XDC6+zh60/oVzGW/9ADI3tkRUqoJun86NZedszSoiniw7NmVm4o8QkpgbgaqgwmLBqFbiuZEj42PgYwJ/kC+XaG9CRVH83gWC5oL63Fhd32yAAM58aHcIGWDVxBhnvB4fCsNu6lthStIqu/GVvgchr0qq44T2pdrZ677w66NrmtldjvQNTHnKLnXZid6kX4G6mVoTpmPXAjwMEKCtqG+J7q0RSJbf+B9fGLfDCFnHrvBR5qtNLAjb47HB0Lq5RZqbhCkI5w+SoWJMw7sxINBAmH06v41X7lUuWNGzKsCnVERp52TSr8I8CsXxSE/VoJWhPGM7xoIRoysa6ZpVAGhGW1gGuIOOOK4HGLla4gXakx/dwrrzWz6NKe0N/D1hvLfkkfJJd7DJyOHNPaD8l6MjZXqXY4ycqKuOBRKuqKuD8HoVRg9Bi7YLaom7Qi0nclETEC2aONGQ8k8rZ9JJbF2khMheRajmrametGK9Dg3Kfhnmu2AaQciZfPl+yGdHQlCsNdjRC3GLZiYLvIy6aruy5ySCJ57sXKHaBCRkvA3TPPmssyLuwg6kd+NGzp1qo5hQM1Q7Oq54mkynfFVGT0JBHvMM02u6rETk03sO7vvCpugExLCTA2C3hBy3Mjg2YGFHjcXQ3Q6G/9dKk/p18SV87rf4yVnB1p6n11pdqUZVZbEjdKd/42jDH17sCIN+HYdCW8zBL/PfWd56fFXYaiSkm7cTgz9XRYdJsOhsNBsi3hxEO1hxfOKk8wl7UO9nXnwpCtogobkrnjP13qvbp0GjQgABz4PTow2MjxhSyMgrPRYK7ys0U6bqePWSvljjOvmru00FhCf9antvJK890V6n9yjd4+aDkFkknBeqcHFofTDGSdgZP1/tYuDtk+dCns7BltnvMN39t7XJw+WVcNs8Bpz9yYsfXG2tJXKzZ2em86AzUtm4XlrbNX1OO8SIvYvTPDPzwfOmGYG5V0nDyvkmX92rG+n16dhtmZTC4cnxmLRrLT5VnWiGbfLEHNeG2kUnBa9xai4+RilXqqvkA1mmo1VFpLfrKrW4pzJV18NAWO9Wg41xBDT29FTs9NE4ByS34dyZthOf9uabjxyrt2SPnRYAbn35vA0EfTrKqrp2Hb2lqOnMo6zU6rz4oE/60bGfJn7MBD54sV8LuEX+yUnv9iDcq042e+gJpbp0akzp8V3Ig3GcyhRu49yJ+5nhfF9CTkHd0wKQD4uv16pU/X9E5ZpBwg83+3KnBfQfZi2ouF/+p9+WlV9vztP5Jf/2P530j/DYjoJdfhuxCQPTtPAIAC5fMbcF9S1pp5tm9X2tjF95A6fc503JvZeCTz8XQeqGEpjySW88IMss/X0MISwIgPAabpesiFeh4zHb9kNn7NfPyWB9p5mUfq+c8LB1DxjTWMK7/Mf33F6DiEdIYZykZ+xjvWHq79xrHmqFj+oFzyj2pzXbh3m/9Z+cYNdT6OHePDnQJp4fAat9Ix5xJEy4Lgl8ldnteepVEGFyj81S0pRschpPP7k89QNurs3c3aw9vvG8eao4676J78H9XmCxful9u19s1snC4tJLdjfLhTIKUVHF6momHOJcg42oLgl2miUZ7XzxsiLnPRZXliH3/SUL69M+lBaSImLkH+L6BAYkQg/ydQtlzwLWO89ZqYnJr+v4JCzb04QzCCGsip3/WMhoayMez/URZ4XwhzZZEVE/iBrxumZTuu5wdhFCdplhdlVTdt1w+b7W5/OJ7Ol+vt/ni+3h8AhGAExXCCpGiG5XhBlEhl/0uKRqXqXyY+MLU6vcFoMlusNrvD6XJ7vD5/IBgKR6KxeCKZSmeyuXyhGIRRnKRZXpRV3bRdP4wTgF97JqGMC6m0sc7Py7rtx3ndz/v9aZYXZVU3bdcP5ve3rCCRZaCzS9du3Xv07NW7T99+Ebv+qlq2dFzPD1QYxUma5UVZ1c1wNJ5MZ/PFcrXebHf7w/F0vlxvd+5gKFykaLHiJUqWKl2mbLnyFSpWqjx4L9pHxUSgaKEw3SwsaWjwILV4yleKpLvUlUqx9R+M7DOQibc5k0BJOL8gXKNaKWE8K51zU+hJ0BjX30XN+3poSXgvV2m7KvaSOjPUdDWuJwXPXok2flRXr1VKDk2Vc5DnPIJ2rJA0udB1AvYduUnWH2tDzq0W5J/fN4zSSsiEzKn2tnTGGkztoqXEDy50v5MZ/qB0UBxEL2PmbKzkcJ50Q+1NmryZpHQLoJYgYwtDWpJKaianqWEqmrs3x8GsSry1eR9sWDXE6NAg7riJqHs4o0TjIEnOn4hijYToUYl1cI4gU0qWB7tfYj8sHr29eq3YrlOb0YFzFcrj4II6KMo9StQ5G1BVt3eSjGndTib3wgheWlYqaCZ2DFuMKQM6+G1RPiayKrs12HCKR66hdRG5XSn+I5BudEP/MhyOHLaZFgnxo3QnfQ0p24makHMl1EhhTJjmoOUKu/Tm9lHtiOQWzQXTSD1JrJ9Qisf3KFLf9nmxIevFvh0q8qPoksEpj1t24/NfoVM5xOhwDf/EILbUhZ5LUycCZeJLNqN2jOp8wPhnT2+FCfIrLDsVqGehw63Y87VKZeRHDS6JzEIF1w0TUR9Qc1nhTOfL7BXqtk7Hiv7IkZ547QEljH/RVZ5wFnGXalpWsla0gK49KX00x8wZZegqU0AGRu7g0SVCZFRRJYHzCj6JOTwXWtCuaSLDLZdFOZBHwd1BoabeXO+U0BhVDV+S4YnjP4x6DHC8TkBnfYhHPpOYGzd0MKIL+9o9wNtUd1Mgg+SP5ZC0vBpDfjmmBsYet0HcGUooIWNrXmCMeydYolfMk/ylaYZGULpjOn3c2pF3KBhWvxaBms3a9psfMgn/sfh9teCqEe/soGLWY8ZfHJJyJGqKFdkSqbeRTgtUyikfF26K+2hRRBDGbWB5SbpIs0w3Q63yCKzaAvKlifkF2T7mgVBsXEvfR7EchZAklCbqpF8rAVVDBxIh74TRJU8COfopPorM0tmYwIpWwLTkI3b6X+lM+qKmkBjGqCEbG+BhGvhYxvhhWwFUkDPUAUYta6M0q880/88GWUDXanvk8C4QhP9xdmzpxxBXGV8W4KowoQ9haRmhUcCbSRZ5RsnGTNir7iKQY2vSFbeBPBcixLaG01Vqet7wPKQBr8AbbIUucfNJbC7vxR+GuaMxregnSSbggSUfez5Ox2WuHZC2J5cwcHGT7t2f30FmNUgIJbUQcBvwqOqwRAvKFUeCUsZFmKFUNdkWbkZb8pHp614u9s03/09ErXOgmPuNk7ZHL4vnpVWgXeP8W09bem/YL+JZZdxPHfvRBHepkaexoXgJWlTj4iewU5LbqMF9BviNJ8IXCq4jc91vtAl4Kyjy8jml9mMZ/q4g7p47cdrzRzRyjX84o7cuY89ZeSCfBBMnqkZ1kvpGJMR5Y468Sx5yMYxBUoMNqnlNxiKdqASi7grrSuJocC36d9gTeZKDEml4KYnRr4yQmiSOhIGLEOGn632fRIvAd9m0I7bO+WAHSep4MVrJ0X8M/dg7xM9VMf4ifD0p5z/+Y7SuGBYVQCgXajrTVlBmcoh5IjtD4TEc0JAlrIh8Qc4kf2XmvyceySiFcWD5eN8OdFh+m8GXNOSIhRn86plhfC0S3TTVG9deilonkRwesjDiVxeBfNa0/AsQNtgsLVU6oIhwmguYqY+SWkcgSr/Ez/Go/xNv1qp/7ePEjl8wNRX472cnkf6Tnz+foYhhh+MXXFD1W51ahn5f6d1llwV4MOtwDk8rvN0rK9AXV6/4x7/JP2NdZLnhr/G1i/nJkBsqxUzB1z02LA6OBJ/LXlX9BA==') format('woff2'),
+ url('iconfont.woff?t=1571378992759') format('woff'),
+ url('iconfont.ttf?t=1571378992759') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
+ url('iconfont.svg?t=1571378992759#v-icon') format('svg'); /* iOS 4.1- */
+}
+
+.v-icon {
+ font-family: "v-icon" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.v-icon-appreciate:before {
+ content: "\e644";
+}
+
+.v-icon-check:before {
+ content: "\e645";
+}
+
+.v-icon-close:before {
+ content: "\e646";
+}
+
+.v-icon-edit:before {
+ content: "\e649";
+}
+
+.v-icon-emoji:before {
+ content: "\e64a";
+}
+
+.v-icon-favorfill:before {
+ content: "\e64b";
+}
+
+.v-icon-favor:before {
+ content: "\e64c";
+}
+
+.v-icon-loading:before {
+ content: "\e64f";
+}
+
+.v-icon-locationfill:before {
+ content: "\e650";
+}
+
+.v-icon-location:before {
+ content: "\e651";
+}
+
+.v-icon-phone:before {
+ content: "\e652";
+}
+
+.v-icon-roundcheckfill:before {
+ content: "\e656";
+}
+
+.v-icon-roundcheck:before {
+ content: "\e657";
+}
+
+.v-icon-roundclosefill:before {
+ content: "\e658";
+}
+
+.v-icon-roundclose:before {
+ content: "\e659";
+}
+
+.v-icon-roundrightfill:before {
+ content: "\e65a";
+}
+
+.v-icon-roundright:before {
+ content: "\e65b";
+}
+
+.v-icon-search:before {
+ content: "\e65c";
+}
+
+.v-icon-taxi:before {
+ content: "\e65d";
+}
+
+.v-icon-timefill:before {
+ content: "\e65e";
+}
+
+.v-icon-time:before {
+ content: "\e65f";
+}
+
+.v-icon-unfold:before {
+ content: "\e661";
+}
+
+.v-icon-warnfill:before {
+ content: "\e662";
+}
+
+.v-icon-warn:before {
+ content: "\e663";
+}
+
+.v-icon-camerafill:before {
+ content: "\e664";
+}
+
+.v-icon-camera:before {
+ content: "\e665";
+}
+
+.v-icon-commentfill:before {
+ content: "\e666";
+}
+
+.v-icon-comment:before {
+ content: "\e667";
+}
+
+.v-icon-likefill:before {
+ content: "\e668";
+}
+
+.v-icon-like:before {
+ content: "\e669";
+}
+
+.v-icon-notificationfill:before {
+ content: "\e66a";
+}
+
+.v-icon-notification:before {
+ content: "\e66b";
+}
+
+.v-icon-order:before {
+ content: "\e66c";
+}
+
+.v-icon-samefill:before {
+ content: "\e66d";
+}
+
+.v-icon-same:before {
+ content: "\e66e";
+}
+
+.v-icon-deliver:before {
+ content: "\e671";
+}
+
+.v-icon-evaluate:before {
+ content: "\e672";
+}
+
+.v-icon-pay:before {
+ content: "\e673";
+}
+
+.v-icon-send:before {
+ content: "\e675";
+}
+
+.v-icon-shop:before {
+ content: "\e676";
+}
+
+.v-icon-ticket:before {
+ content: "\e677";
+}
+
+.v-icon-wang:before {
+ content: "\e678";
+}
+
+.v-icon-back:before {
+ content: "\e679";
+}
+
+.v-icon-cascades:before {
+ content: "\e67c";
+}
+
+.v-icon-discover:before {
+ content: "\e67e";
+}
+
+.v-icon-list:before {
+ content: "\e682";
+}
+
+.v-icon-more:before {
+ content: "\e684";
+}
+
+.v-icon-scan:before {
+ content: "\e689";
+}
+
+.v-icon-settings:before {
+ content: "\e68a";
+}
+
+.v-icon-questionfill:before {
+ content: "\e690";
+}
+
+.v-icon-question:before {
+ content: "\e691";
+}
+
+.v-icon-shopfill:before {
+ content: "\e697";
+}
+
+.v-icon-form:before {
+ content: "\e699";
+}
+
+.v-icon-wangfill:before {
+ content: "\e69a";
+}
+
+.v-icon-pic:before {
+ content: "\e69b";
+}
+
+.v-icon-filter:before {
+ content: "\e69c";
+}
+
+.v-icon-footprint:before {
+ content: "\e69d";
+}
+
+.v-icon-top:before {
+ content: "\e69e";
+}
+
+.v-icon-pulldown:before {
+ content: "\e69f";
+}
+
+.v-icon-pullup:before {
+ content: "\e6a0";
+}
+
+.v-icon-right:before {
+ content: "\e6a3";
+}
+
+.v-icon-refresh:before {
+ content: "\e6a4";
+}
+
+.v-icon-moreandroid:before {
+ content: "\e6a5";
+}
+
+.v-icon-deletefill:before {
+ content: "\e6a6";
+}
+
+.v-icon-refund:before {
+ content: "\e6ac";
+}
+
+.v-icon-cart:before {
+ content: "\e6af";
+}
+
+.v-icon-qrcode:before {
+ content: "\e6b0";
+}
+
+.v-icon-remind:before {
+ content: "\e6b2";
+}
+
+.v-icon-delete:before {
+ content: "\e6b4";
+}
+
+.v-icon-profile:before {
+ content: "\e6b7";
+}
+
+.v-icon-home:before {
+ content: "\e6b8";
+}
+
+.v-icon-cartfill:before {
+ content: "\e6b9";
+}
+
+.v-icon-discoverfill:before {
+ content: "\e6ba";
+}
+
+.v-icon-homefill:before {
+ content: "\e6bb";
+}
+
+.v-icon-message:before {
+ content: "\e6bc";
+}
+
+.v-icon-addressbov:before {
+ content: "\e6bd";
+}
+
+.v-icon-link:before {
+ content: "\e6bf";
+}
+
+.v-icon-lock:before {
+ content: "\e6c0";
+}
+
+.v-icon-unlock:before {
+ content: "\e6c2";
+}
+
+.v-icon-vip:before {
+ content: "\e6c3";
+}
+
+.v-icon-weibo:before {
+ content: "\e6c4";
+}
+
+.v-icon-activity:before {
+ content: "\e6c5";
+}
+
+.v-icon-big:before {
+ content: "\e6c7";
+}
+
+.v-icon-friendaddfill:before {
+ content: "\e6c9";
+}
+
+.v-icon-friendadd:before {
+ content: "\e6ca";
+}
+
+.v-icon-friendfamous:before {
+ content: "\e6cb";
+}
+
+.v-icon-friend:before {
+ content: "\e6cc";
+}
+
+.v-icon-goods:before {
+ content: "\e6cd";
+}
+
+.v-icon-selection:before {
+ content: "\e6ce";
+}
+
+.v-icon-tmall:before {
+ content: "\e6cf";
+}
+
+.v-icon-explore:before {
+ content: "\e6d2";
+}
+
+.v-icon-present:before {
+ content: "\e6d3";
+}
+
+.v-icon-squarecheckfill:before {
+ content: "\e6d4";
+}
+
+.v-icon-square:before {
+ content: "\e6d5";
+}
+
+.v-icon-squarecheck:before {
+ content: "\e6d6";
+}
+
+.v-icon-round:before {
+ content: "\e6d7";
+}
+
+.v-icon-roundaddfill:before {
+ content: "\e6d8";
+}
+
+.v-icon-roundadd:before {
+ content: "\e6d9";
+}
+
+.v-icon-add:before {
+ content: "\e6da";
+}
+
+.v-icon-notificationforbidfill:before {
+ content: "\e6db";
+}
+
+.v-icon-explorefill:before {
+ content: "\e6dd";
+}
+
+.v-icon-fold:before {
+ content: "\e6de";
+}
+
+.v-icon-game:before {
+ content: "\e6df";
+}
+
+.v-icon-redpacket:before {
+ content: "\e6e0";
+}
+
+.v-icon-selectionfill:before {
+ content: "\e6e1";
+}
+
+.v-icon-similar:before {
+ content: "\e6e2";
+}
+
+.v-icon-appreciatefill:before {
+ content: "\e6e3";
+}
+
+.v-icon-infofill:before {
+ content: "\e6e4";
+}
+
+.v-icon-info:before {
+ content: "\e6e5";
+}
+
+.v-icon-tao:before {
+ content: "\e6e8";
+}
+
+.v-icon-mobiletao:before {
+ content: "\e6e9";
+}
+
+.v-icon-forwardfill:before {
+ content: "\e6ea";
+}
+
+.v-icon-forward:before {
+ content: "\e6eb";
+}
+
+.v-icon-rechargefill:before {
+ content: "\e6ec";
+}
+
+.v-icon-recharge:before {
+ content: "\e6ed";
+}
+
+.v-icon-vipcard:before {
+ content: "\e6ee";
+}
+
+.v-icon-voice:before {
+ content: "\e6ef";
+}
+
+.v-icon-voicefill:before {
+ content: "\e6f0";
+}
+
+.v-icon-friendfavor:before {
+ content: "\e6f1";
+}
+
+.v-icon-wifi:before {
+ content: "\e6f2";
+}
+
+.v-icon-share:before {
+ content: "\e6f3";
+}
+
+.v-icon-wefill:before {
+ content: "\e6f4";
+}
+
+.v-icon-we:before {
+ content: "\e6f5";
+}
+
+.v-icon-lightauto:before {
+ content: "\e6f6";
+}
+
+.v-icon-lightforbid:before {
+ content: "\e6f7";
+}
+
+.v-icon-lightfill:before {
+ content: "\e6f8";
+}
+
+.v-icon-camerarotate:before {
+ content: "\e6f9";
+}
+
+.v-icon-light:before {
+ content: "\e6fa";
+}
+
+.v-icon-barcode:before {
+ content: "\e6fb";
+}
+
+.v-icon-flashlightclose:before {
+ content: "\e6fc";
+}
+
+.v-icon-flashlightopen:before {
+ content: "\e6fd";
+}
+
+.v-icon-searchlist:before {
+ content: "\e6fe";
+}
+
+.v-icon-service:before {
+ content: "\e6ff";
+}
+
+.v-icon-sort:before {
+ content: "\e700";
+}
+
+.v-icon-down:before {
+ content: "\e703";
+}
+
+.v-icon-mobile:before {
+ content: "\e704";
+}
+
+.v-icon-mobilefill:before {
+ content: "\e705";
+}
+
+.v-icon-copy:before {
+ content: "\e706";
+}
+
+.v-icon-countdownfill:before {
+ content: "\e707";
+}
+
+.v-icon-countdown:before {
+ content: "\e708";
+}
+
+.v-icon-noticefill:before {
+ content: "\e709";
+}
+
+.v-icon-notice:before {
+ content: "\e70a";
+}
+
+.v-icon-qiang:before {
+ content: "\e70b";
+}
+
+.v-icon-upstagefill:before {
+ content: "\e70e";
+}
+
+.v-icon-upstage:before {
+ content: "\e70f";
+}
+
+.v-icon-babyfill:before {
+ content: "\e710";
+}
+
+.v-icon-baby:before {
+ content: "\e711";
+}
+
+.v-icon-brandfill:before {
+ content: "\e712";
+}
+
+.v-icon-brand:before {
+ content: "\e713";
+}
+
+.v-icon-choicenessfill:before {
+ content: "\e714";
+}
+
+.v-icon-choiceness:before {
+ content: "\e715";
+}
+
+.v-icon-clothesfill:before {
+ content: "\e716";
+}
+
+.v-icon-clothes:before {
+ content: "\e717";
+}
+
+.v-icon-creativefill:before {
+ content: "\e718";
+}
+
+.v-icon-creative:before {
+ content: "\e719";
+}
+
+.v-icon-female:before {
+ content: "\e71a";
+}
+
+.v-icon-keyboard:before {
+ content: "\e71b";
+}
+
+.v-icon-male:before {
+ content: "\e71c";
+}
+
+.v-icon-newfill:before {
+ content: "\e71d";
+}
+
+.v-icon-new:before {
+ content: "\e71e";
+}
+
+.v-icon-pullleft:before {
+ content: "\e71f";
+}
+
+.v-icon-pullright:before {
+ content: "\e720";
+}
+
+.v-icon-rankfill:before {
+ content: "\e721";
+}
+
+.v-icon-rank:before {
+ content: "\e722";
+}
+
+.v-icon-bad:before {
+ content: "\e723";
+}
+
+.v-icon-cameraadd:before {
+ content: "\e724";
+}
+
+.v-icon-focus:before {
+ content: "\e725";
+}
+
+.v-icon-friendfill:before {
+ content: "\e726";
+}
+
+.v-icon-cameraaddfill:before {
+ content: "\e727";
+}
+
+.v-icon-apps:before {
+ content: "\e729";
+}
+
+.v-icon-paintfill:before {
+ content: "\e72a";
+}
+
+.v-icon-paint:before {
+ content: "\e72b";
+}
+
+.v-icon-picfill:before {
+ content: "\e72c";
+}
+
+.v-icon-refresharrow:before {
+ content: "\e72d";
+}
+
+.v-icon-markfill:before {
+ content: "\e730";
+}
+
+.v-icon-mark:before {
+ content: "\e731";
+}
+
+.v-icon-presentfill:before {
+ content: "\e732";
+}
+
+.v-icon-repeal:before {
+ content: "\e733";
+}
+
+.v-icon-album:before {
+ content: "\e734";
+}
+
+.v-icon-peoplefill:before {
+ content: "\e735";
+}
+
+.v-icon-people:before {
+ content: "\e736";
+}
+
+.v-icon-servicefill:before {
+ content: "\e737";
+}
+
+.v-icon-repair:before {
+ content: "\e738";
+}
+
+.v-icon-file:before {
+ content: "\e739";
+}
+
+.v-icon-repairfill:before {
+ content: "\e73a";
+}
+
+.v-icon-taoxiaopu:before {
+ content: "\e73b";
+}
+
+.v-icon-attentionfill:before {
+ content: "\e73c";
+}
+
+.v-icon-attention:before {
+ content: "\e73d";
+}
+
+.v-icon-commandfill:before {
+ content: "\e73e";
+}
+
+.v-icon-command:before {
+ content: "\e73f";
+}
+
+.v-icon-communityfill:before {
+ content: "\e740";
+}
+
+.v-icon-community:before {
+ content: "\e741";
+}
+
+.v-icon-read:before {
+ content: "\e742";
+}
+
+.v-icon-suan:before {
+ content: "\e743";
+}
+
+.v-icon-hua:before {
+ content: "\e744";
+}
+
+.v-icon-ju:before {
+ content: "\e745";
+}
+
+.v-icon-tian:before {
+ content: "\e748";
+}
+
+.v-icon-calendar:before {
+ content: "\e74a";
+}
+
+.v-icon-cut:before {
+ content: "\e74b";
+}
+
+.v-icon-magic:before {
+ content: "\e74c";
+}
+
+.v-icon-backwardfill:before {
+ content: "\e74d";
+}
+
+.v-icon-playfill:before {
+ content: "\e74f";
+}
+
+.v-icon-stop:before {
+ content: "\e750";
+}
+
+.v-icon-tagfill:before {
+ content: "\e751";
+}
+
+.v-icon-tag:before {
+ content: "\e752";
+}
+
+.v-icon-group:before {
+ content: "\e753";
+}
+
+.v-icon-all:before {
+ content: "\e755";
+}
+
+.v-icon-backdelete:before {
+ content: "\e756";
+}
+
+.v-icon-hotfill:before {
+ content: "\e757";
+}
+
+.v-icon-hot:before {
+ content: "\e758";
+}
+
+.v-icon-post:before {
+ content: "\e759";
+}
+
+.v-icon-radiobox:before {
+ content: "\e75b";
+}
+
+.v-icon-rounddown:before {
+ content: "\e75c";
+}
+
+.v-icon-upload:before {
+ content: "\e75d";
+}
+
+.v-icon-writefill:before {
+ content: "\e760";
+}
+
+.v-icon-write:before {
+ content: "\e761";
+}
+
+.v-icon-radioboxfill:before {
+ content: "\e763";
+}
+
+.v-icon-punch:before {
+ content: "\e764";
+}
+
+.v-icon-shake:before {
+ content: "\e765";
+}
+
+.v-icon-disanfangweibo:before {
+ content: "\e701";
+}
+
+.v-icon-disanfangweixin:before {
+ content: "\e70c";
+}
+
+.v-icon-add1:before {
+ content: "\e767";
+}
+
+.v-icon-move:before {
+ content: "\e768";
+}
+
+.v-icon-safe:before {
+ content: "\e769";
+}
+
+.v-icon-haodian:before {
+ content: "\e76d";
+}
+
+.v-icon-mao:before {
+ content: "\e76e";
+}
+
+.v-icon-qi:before {
+ content: "\e76f";
+}
+
+.v-icon-ye:before {
+ content: "\e770";
+}
+
+.v-icon-juhuasuan:before {
+ content: "\e771";
+}
+
+.v-icon-taoqianggou:before {
+ content: "\e772";
+}
+
+.v-icon-tianmao:before {
+ content: "\e773";
+}
+
+.v-icon-activityfill:before {
+ content: "\e775";
+}
+
+.v-icon-crownfill:before {
+ content: "\e776";
+}
+
+.v-icon-crown:before {
+ content: "\e777";
+}
+
+.v-icon-goodsfill:before {
+ content: "\e778";
+}
+
+.v-icon-messagefill:before {
+ content: "\e779";
+}
+
+.v-icon-profilefill:before {
+ content: "\e77a";
+}
+
+.v-icon-sound:before {
+ content: "\e77b";
+}
+
+.v-icon-sponsorfill:before {
+ content: "\e77c";
+}
+
+.v-icon-sponsor:before {
+ content: "\e77d";
+}
+
+.v-icon-upblock:before {
+ content: "\e77e";
+}
+
+.v-icon-weblock:before {
+ content: "\e77f";
+}
+
+.v-icon-weunblock:before {
+ content: "\e780";
+}
+
+.v-icon-1111:before {
+ content: "\e782";
+}
+
+.v-icon-my:before {
+ content: "\e78b";
+}
+
+.v-icon-myfill:before {
+ content: "\e78c";
+}
+
+.v-icon-emojifill:before {
+ content: "\e78d";
+}
+
+.v-icon-emojiflashfill:before {
+ content: "\e78e";
+}
+
+.v-icon-flashbuyfill-copy:before {
+ content: "\e78f";
+}
+
+.v-icon-text:before {
+ content: "\e791";
+}
+
+.v-icon-goodsfavor:before {
+ content: "\e794";
+}
+
+.v-icon-musicfill:before {
+ content: "\e795";
+}
+
+.v-icon-musicforbidfill:before {
+ content: "\e796";
+}
+
+.v-icon-xiamiforbid:before {
+ content: "\e797";
+}
+
+.v-icon-xiami:before {
+ content: "\e798";
+}
+
+.v-icon-xuanze:before {
+ content: "\e628";
+}
+
+.v-icon-roundleftfill:before {
+ content: "\e799";
+}
+
+.v-icon-triangledownfill:before {
+ content: "\e79b";
+}
+
+.v-icon-triangleupfill:before {
+ content: "\e79c";
+}
+
+.v-icon-roundleftfill-copy:before {
+ content: "\e79e";
+}
+
+.v-icon-right1:before {
+ content: "\e670";
+}
+
+.v-icon-pulldown1:before {
+ content: "\e79f";
+}
+
+.v-icon-sousuo:before {
+ content: "\e63f";
+}
+
+.v-icon-emojilight:before {
+ content: "\e7a1";
+}
+
+.v-icon-keyboardlight:before {
+ content: "\e7a3";
+}
+
+.v-icon-recordfill:before {
+ content: "\e7a4";
+}
+
+.v-icon-recordlight:before {
+ content: "\e7a5";
+}
+
+.v-icon-record:before {
+ content: "\e7a6";
+}
+
+.v-icon-roundaddlight:before {
+ content: "\e7a7";
+}
+
+.v-icon-soundlight:before {
+ content: "\e7a8";
+}
+
+.v-icon-cardboardfill:before {
+ content: "\e7a9";
+}
+
+.v-icon-cardboard:before {
+ content: "\e7aa";
+}
+
+.v-icon-formfill:before {
+ content: "\e7ab";
+}
+
+.v-icon-coin:before {
+ content: "\e7ac";
+}
+
+.v-icon-sortlight:before {
+ content: "\e7ad";
+}
+
+.v-icon-yooxi:before {
+ content: "\e612";
+}
+
+.v-icon-choose:before {
+ content: "\e614";
+}
+
+.v-icon-cardboardforbid:before {
+ content: "\e7af";
+}
+
+.v-icon-circlefill:before {
+ content: "\e7b0";
+}
+
+.v-icon-circle:before {
+ content: "\e7b1";
+}
+
+.v-icon-attentionforbid:before {
+ content: "\e7b2";
+}
+
+.v-icon-attentionforbidfill:before {
+ content: "\e7b3";
+}
+
+.v-icon-attentionfavorfill:before {
+ content: "\e7b4";
+}
+
+.v-icon-attentionfavor:before {
+ content: "\e7b5";
+}
+
+.v-icon-piclight:before {
+ content: "\e7b7";
+}
+
+.v-icon-shoplight:before {
+ content: "\e7b8";
+}
+
+.v-icon-voicelight:before {
+ content: "\e7b9";
+}
+
+.v-icon-attentionfavorfill-copy:before {
+ content: "\e7ba";
+}
+
+.v-icon-umidd17:before {
+ content: "\e61a";
+}
+
+.v-icon-full:before {
+ content: "\e7bc";
+}
+
+.v-icon-mail:before {
+ content: "\e7bd";
+}
+
+.v-icon-peoplelist:before {
+ content: "\e7be";
+}
+
+.v-icon-goodsnewfill:before {
+ content: "\e7bf";
+}
+
+.v-icon-goodsnew:before {
+ content: "\e7c0";
+}
+
+.v-icon-medalfill:before {
+ content: "\e7c1";
+}
+
+.v-icon-medal:before {
+ content: "\e7c2";
+}
+
+.v-icon-newsfill:before {
+ content: "\e7c3";
+}
+
+.v-icon-newshotfill:before {
+ content: "\e7c4";
+}
+
+.v-icon-newshot:before {
+ content: "\e7c5";
+}
+
+.v-icon-news:before {
+ content: "\e7c6";
+}
+
+.v-icon-videofill:before {
+ content: "\e7c7";
+}
+
+.v-icon-video:before {
+ content: "\e7c8";
+}
+
+.v-icon-askfill:before {
+ content: "\e7c9";
+}
+
+.v-icon-ask:before {
+ content: "\e7ca";
+}
+
+.v-icon-exit:before {
+ content: "\e7cb";
+}
+
+.v-icon-skinfill:before {
+ content: "\e7cc";
+}
+
+.v-icon-skin:before {
+ content: "\e7cd";
+}
+
+.v-icon-moneybagfill:before {
+ content: "\e7ce";
+}
+
+.v-icon-usefullfill:before {
+ content: "\e7cf";
+}
+
+.v-icon-usefull:before {
+ content: "\e7d0";
+}
+
+.v-icon-moneybag:before {
+ content: "\e7d1";
+}
+
+.v-icon-download:before {
+ content: "\e610";
+}
+
+.v-icon-redpacket_fill:before {
+ content: "\e7d3";
+}
+
+.v-icon-subscription:before {
+ content: "\e7d4";
+}
+
+.v-icon-xuanzeanniu:before {
+ content: "\e604";
+}
+
+.v-icon-weibiaoti-:before {
+ content: "\e627";
+}
+
+.v-icon-xiangqing:before {
+ content: "\e728";
+}
+
+.v-icon-shuju:before {
+ content: "\e660";
+}
+
+.v-icon-home_light:before {
+ content: "\e7d5";
+}
+
+.v-icon-my_light:before {
+ content: "\e7d6";
+}
+
+.v-icon-disanfangQQ:before {
+ content: "\e6dc";
+}
+
+.v-icon-chinamap-chart:before {
+ content: "\e882";
+}
+
+.v-icon-tubiaozhizuomoban:before {
+ content: "\e601";
+}
+
+.v-icon-set:before {
+ content: "\e889";
+}
+
+.v-icon-yun:before {
+ content: "\e781";
+}
+
+.v-icon-kongzhitai_:before {
+ content: "\e654";
+}
+
+.v-icon-shuju1:before {
+ content: "\e61b";
+}
+
+.v-icon-shuju2:before {
+ content: "\e640";
+}
+
+.v-icon-disanfang:before {
+ content: "\e6be";
+}
+
+.v-icon-shuju3:before {
+ content: "\e606";
+}
+
+.v-icon-kongzhitai:before {
+ content: "\e66f";
+}
+
+.v-icon-headset:before {
+ content: "\e600";
+}
+
+.v-icon-shezhi:before {
+ content: "\e611";
+}
+
+.v-icon-up-copy:before {
+ content: "\e674";
+}
+
+.v-icon-down-copy:before {
+ content: "\e67a";
+}
+
+.v-icon-left-copy:before {
+ content: "\e67b";
+}
+
diff --git a/public/static/admin_static/lib/fonts/iconfont.eot b/public/static/admin_static/lib/fonts/iconfont.eot
new file mode 100644
index 0000000..1c2cd5a
Binary files /dev/null and b/public/static/admin_static/lib/fonts/iconfont.eot differ
diff --git a/public/static/admin_static/lib/fonts/iconfont.js b/public/static/admin_static/lib/fonts/iconfont.js
new file mode 100644
index 0000000..87d7ef6
--- /dev/null
+++ b/public/static/admin_static/lib/fonts/iconfont.js
@@ -0,0 +1 @@
+!function(p){var c,o=' ',l=(c=document.getElementsByTagName("script"))[c.length-1].getAttribute("data-injectcss");if(l&&!p.__iconfont__svg__cssinject__){p.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}!function(c){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(c,0);else{var l=function(){document.removeEventListener("DOMContentLoaded",l,!1),c()};document.addEventListener("DOMContentLoaded",l,!1)}else document.attachEvent&&(a=c,h=p.document,t=!1,(s=function(){try{h.documentElement.doScroll("left")}catch(c){return void setTimeout(s,50)}o()})(),h.onreadystatechange=function(){"complete"==h.readyState&&(h.onreadystatechange=null,o())});function o(){t||(t=!0,a())}var a,h,t,s}(function(){var c,l;(c=document.createElement("div")).innerHTML=o,o=null,(l=c.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",function(c,l){l.firstChild?function(c,l){l.parentNode.insertBefore(c,l)}(c,l.firstChild):l.appendChild(c)}(l,document.body))})}(window);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/fonts/iconfont.json b/public/static/admin_static/lib/fonts/iconfont.json
new file mode 100644
index 0000000..00e4602
--- /dev/null
+++ b/public/static/admin_static/lib/fonts/iconfont.json
@@ -0,0 +1,2361 @@
+{
+ "id": "1378173",
+ "name": "ok-admin-v2.0",
+ "font_family": "ok-icon",
+ "css_prefix_text": "ok-icon-",
+ "description": "",
+ "glyphs": [
+ {
+ "icon_id": "29923",
+ "name": "appreciate",
+ "font_class": "appreciate",
+ "unicode": "e644",
+ "unicode_decimal": 58948
+ },
+ {
+ "icon_id": "29924",
+ "name": "check",
+ "font_class": "check",
+ "unicode": "e645",
+ "unicode_decimal": 58949
+ },
+ {
+ "icon_id": "29925",
+ "name": "close",
+ "font_class": "close",
+ "unicode": "e646",
+ "unicode_decimal": 58950
+ },
+ {
+ "icon_id": "29928",
+ "name": "edit",
+ "font_class": "edit",
+ "unicode": "e649",
+ "unicode_decimal": 58953
+ },
+ {
+ "icon_id": "29929",
+ "name": "emoji",
+ "font_class": "emoji",
+ "unicode": "e64a",
+ "unicode_decimal": 58954
+ },
+ {
+ "icon_id": "29930",
+ "name": "favor_fill",
+ "font_class": "favorfill",
+ "unicode": "e64b",
+ "unicode_decimal": 58955
+ },
+ {
+ "icon_id": "29931",
+ "name": "favor",
+ "font_class": "favor",
+ "unicode": "e64c",
+ "unicode_decimal": 58956
+ },
+ {
+ "icon_id": "29934",
+ "name": "loading",
+ "font_class": "loading",
+ "unicode": "e64f",
+ "unicode_decimal": 58959
+ },
+ {
+ "icon_id": "29935",
+ "name": "location_fill",
+ "font_class": "locationfill",
+ "unicode": "e650",
+ "unicode_decimal": 58960
+ },
+ {
+ "icon_id": "29936",
+ "name": "location",
+ "font_class": "location",
+ "unicode": "e651",
+ "unicode_decimal": 58961
+ },
+ {
+ "icon_id": "29937",
+ "name": "phone",
+ "font_class": "phone",
+ "unicode": "e652",
+ "unicode_decimal": 58962
+ },
+ {
+ "icon_id": "29941",
+ "name": "round_check_fill",
+ "font_class": "roundcheckfill",
+ "unicode": "e656",
+ "unicode_decimal": 58966
+ },
+ {
+ "icon_id": "29942",
+ "name": "round_check",
+ "font_class": "roundcheck",
+ "unicode": "e657",
+ "unicode_decimal": 58967
+ },
+ {
+ "icon_id": "29943",
+ "name": "round_close_fill",
+ "font_class": "roundclosefill",
+ "unicode": "e658",
+ "unicode_decimal": 58968
+ },
+ {
+ "icon_id": "29944",
+ "name": "round_close",
+ "font_class": "roundclose",
+ "unicode": "e659",
+ "unicode_decimal": 58969
+ },
+ {
+ "icon_id": "29945",
+ "name": "round_right_fill",
+ "font_class": "roundrightfill",
+ "unicode": "e65a",
+ "unicode_decimal": 58970
+ },
+ {
+ "icon_id": "29946",
+ "name": "round_right",
+ "font_class": "roundright",
+ "unicode": "e65b",
+ "unicode_decimal": 58971
+ },
+ {
+ "icon_id": "29947",
+ "name": "search",
+ "font_class": "search",
+ "unicode": "e65c",
+ "unicode_decimal": 58972
+ },
+ {
+ "icon_id": "29948",
+ "name": "taxi",
+ "font_class": "taxi",
+ "unicode": "e65d",
+ "unicode_decimal": 58973
+ },
+ {
+ "icon_id": "29949",
+ "name": "time_fill",
+ "font_class": "timefill",
+ "unicode": "e65e",
+ "unicode_decimal": 58974
+ },
+ {
+ "icon_id": "29950",
+ "name": "time",
+ "font_class": "time",
+ "unicode": "e65f",
+ "unicode_decimal": 58975
+ },
+ {
+ "icon_id": "29952",
+ "name": "unfold",
+ "font_class": "unfold",
+ "unicode": "e661",
+ "unicode_decimal": 58977
+ },
+ {
+ "icon_id": "29953",
+ "name": "warn_fill",
+ "font_class": "warnfill",
+ "unicode": "e662",
+ "unicode_decimal": 58978
+ },
+ {
+ "icon_id": "29954",
+ "name": "warn",
+ "font_class": "warn",
+ "unicode": "e663",
+ "unicode_decimal": 58979
+ },
+ {
+ "icon_id": "30413",
+ "name": "camera_fill",
+ "font_class": "camerafill",
+ "unicode": "e664",
+ "unicode_decimal": 58980
+ },
+ {
+ "icon_id": "30414",
+ "name": "camera",
+ "font_class": "camera",
+ "unicode": "e665",
+ "unicode_decimal": 58981
+ },
+ {
+ "icon_id": "30415",
+ "name": "comment_fill",
+ "font_class": "commentfill",
+ "unicode": "e666",
+ "unicode_decimal": 58982
+ },
+ {
+ "icon_id": "30416",
+ "name": "comment",
+ "font_class": "comment",
+ "unicode": "e667",
+ "unicode_decimal": 58983
+ },
+ {
+ "icon_id": "30417",
+ "name": "like_fill",
+ "font_class": "likefill",
+ "unicode": "e668",
+ "unicode_decimal": 58984
+ },
+ {
+ "icon_id": "30418",
+ "name": "like",
+ "font_class": "like",
+ "unicode": "e669",
+ "unicode_decimal": 58985
+ },
+ {
+ "icon_id": "30419",
+ "name": "notification_fill",
+ "font_class": "notificationfill",
+ "unicode": "e66a",
+ "unicode_decimal": 58986
+ },
+ {
+ "icon_id": "30420",
+ "name": "notification",
+ "font_class": "notification",
+ "unicode": "e66b",
+ "unicode_decimal": 58987
+ },
+ {
+ "icon_id": "30421",
+ "name": "order",
+ "font_class": "order",
+ "unicode": "e66c",
+ "unicode_decimal": 58988
+ },
+ {
+ "icon_id": "30422",
+ "name": "same_fill",
+ "font_class": "samefill",
+ "unicode": "e66d",
+ "unicode_decimal": 58989
+ },
+ {
+ "icon_id": "30423",
+ "name": "same",
+ "font_class": "same",
+ "unicode": "e66e",
+ "unicode_decimal": 58990
+ },
+ {
+ "icon_id": "30433",
+ "name": "deliver",
+ "font_class": "deliver",
+ "unicode": "e671",
+ "unicode_decimal": 58993
+ },
+ {
+ "icon_id": "30434",
+ "name": "evaluate",
+ "font_class": "evaluate",
+ "unicode": "e672",
+ "unicode_decimal": 58994
+ },
+ {
+ "icon_id": "30435",
+ "name": "pay",
+ "font_class": "pay",
+ "unicode": "e673",
+ "unicode_decimal": 58995
+ },
+ {
+ "icon_id": "30437",
+ "name": "send",
+ "font_class": "send",
+ "unicode": "e675",
+ "unicode_decimal": 58997
+ },
+ {
+ "icon_id": "30438",
+ "name": "shop",
+ "font_class": "shop",
+ "unicode": "e676",
+ "unicode_decimal": 58998
+ },
+ {
+ "icon_id": "30439",
+ "name": "ticket",
+ "font_class": "ticket",
+ "unicode": "e677",
+ "unicode_decimal": 58999
+ },
+ {
+ "icon_id": "30440",
+ "name": "wang",
+ "font_class": "wang",
+ "unicode": "e678",
+ "unicode_decimal": 59000
+ },
+ {
+ "icon_id": "30441",
+ "name": "back",
+ "font_class": "back",
+ "unicode": "e679",
+ "unicode_decimal": 59001
+ },
+ {
+ "icon_id": "30444",
+ "name": "cascades",
+ "font_class": "cascades",
+ "unicode": "e67c",
+ "unicode_decimal": 59004
+ },
+ {
+ "icon_id": "30446",
+ "name": "discover",
+ "font_class": "discover",
+ "unicode": "e67e",
+ "unicode_decimal": 59006
+ },
+ {
+ "icon_id": "30450",
+ "name": "list",
+ "font_class": "list",
+ "unicode": "e682",
+ "unicode_decimal": 59010
+ },
+ {
+ "icon_id": "30452",
+ "name": "more",
+ "font_class": "more",
+ "unicode": "e684",
+ "unicode_decimal": 59012
+ },
+ {
+ "icon_id": "30479",
+ "name": "scan",
+ "font_class": "scan",
+ "unicode": "e689",
+ "unicode_decimal": 59017
+ },
+ {
+ "icon_id": "30480",
+ "name": "settings",
+ "font_class": "settings",
+ "unicode": "e68a",
+ "unicode_decimal": 59018
+ },
+ {
+ "icon_id": "31334",
+ "name": "question_fill",
+ "font_class": "questionfill",
+ "unicode": "e690",
+ "unicode_decimal": 59024
+ },
+ {
+ "icon_id": "31335",
+ "name": "question",
+ "font_class": "question",
+ "unicode": "e691",
+ "unicode_decimal": 59025
+ },
+ {
+ "icon_id": "31354",
+ "name": "shop_fill",
+ "font_class": "shopfill",
+ "unicode": "e697",
+ "unicode_decimal": 59031
+ },
+ {
+ "icon_id": "31356",
+ "name": "form",
+ "font_class": "form",
+ "unicode": "e699",
+ "unicode_decimal": 59033
+ },
+ {
+ "icon_id": "31359",
+ "name": "wang_fill",
+ "font_class": "wangfill",
+ "unicode": "e69a",
+ "unicode_decimal": 59034
+ },
+ {
+ "icon_id": "31416",
+ "name": "pic",
+ "font_class": "pic",
+ "unicode": "e69b",
+ "unicode_decimal": 59035
+ },
+ {
+ "icon_id": "32089",
+ "name": "filter",
+ "font_class": "filter",
+ "unicode": "e69c",
+ "unicode_decimal": 59036
+ },
+ {
+ "icon_id": "32090",
+ "name": "footprint",
+ "font_class": "footprint",
+ "unicode": "e69d",
+ "unicode_decimal": 59037
+ },
+ {
+ "icon_id": "32091",
+ "name": "top",
+ "font_class": "top",
+ "unicode": "e69e",
+ "unicode_decimal": 59038
+ },
+ {
+ "icon_id": "32092",
+ "name": "pull_down",
+ "font_class": "pulldown",
+ "unicode": "e69f",
+ "unicode_decimal": 59039
+ },
+ {
+ "icon_id": "32093",
+ "name": "pull_up",
+ "font_class": "pullup",
+ "unicode": "e6a0",
+ "unicode_decimal": 59040
+ },
+ {
+ "icon_id": "32305",
+ "name": "right",
+ "font_class": "right",
+ "unicode": "e6a3",
+ "unicode_decimal": 59043
+ },
+ {
+ "icon_id": "32312",
+ "name": "refresh",
+ "font_class": "refresh",
+ "unicode": "e6a4",
+ "unicode_decimal": 59044
+ },
+ {
+ "icon_id": "32326",
+ "name": "more_android",
+ "font_class": "moreandroid",
+ "unicode": "e6a5",
+ "unicode_decimal": 59045
+ },
+ {
+ "icon_id": "32462",
+ "name": "delete_fill",
+ "font_class": "deletefill",
+ "unicode": "e6a6",
+ "unicode_decimal": 59046
+ },
+ {
+ "icon_id": "32468",
+ "name": "refund",
+ "font_class": "refund",
+ "unicode": "e6ac",
+ "unicode_decimal": 59052
+ },
+ {
+ "icon_id": "32471",
+ "name": "cart",
+ "font_class": "cart",
+ "unicode": "e6af",
+ "unicode_decimal": 59055
+ },
+ {
+ "icon_id": "32472",
+ "name": "qr_code",
+ "font_class": "qrcode",
+ "unicode": "e6b0",
+ "unicode_decimal": 59056
+ },
+ {
+ "icon_id": "32475",
+ "name": "remind",
+ "font_class": "remind",
+ "unicode": "e6b2",
+ "unicode_decimal": 59058
+ },
+ {
+ "icon_id": "32477",
+ "name": "delete",
+ "font_class": "delete",
+ "unicode": "e6b4",
+ "unicode_decimal": 59060
+ },
+ {
+ "icon_id": "33515",
+ "name": "profile",
+ "font_class": "profile",
+ "unicode": "e6b7",
+ "unicode_decimal": 59063
+ },
+ {
+ "icon_id": "33516",
+ "name": "home",
+ "font_class": "home",
+ "unicode": "e6b8",
+ "unicode_decimal": 59064
+ },
+ {
+ "icon_id": "33517",
+ "name": "cart_fill",
+ "font_class": "cartfill",
+ "unicode": "e6b9",
+ "unicode_decimal": 59065
+ },
+ {
+ "icon_id": "33518",
+ "name": "discover_fill",
+ "font_class": "discoverfill",
+ "unicode": "e6ba",
+ "unicode_decimal": 59066
+ },
+ {
+ "icon_id": "33519",
+ "name": "home_fill",
+ "font_class": "homefill",
+ "unicode": "e6bb",
+ "unicode_decimal": 59067
+ },
+ {
+ "icon_id": "33520",
+ "name": "message",
+ "font_class": "message",
+ "unicode": "e6bc",
+ "unicode_decimal": 59068
+ },
+ {
+ "icon_id": "34920",
+ "name": "address_book",
+ "font_class": "addressbook",
+ "unicode": "e6bd",
+ "unicode_decimal": 59069
+ },
+ {
+ "icon_id": "34922",
+ "name": "link",
+ "font_class": "link",
+ "unicode": "e6bf",
+ "unicode_decimal": 59071
+ },
+ {
+ "icon_id": "34923",
+ "name": "lock",
+ "font_class": "lock",
+ "unicode": "e6c0",
+ "unicode_decimal": 59072
+ },
+ {
+ "icon_id": "34925",
+ "name": "unlock",
+ "font_class": "unlock",
+ "unicode": "e6c2",
+ "unicode_decimal": 59074
+ },
+ {
+ "icon_id": "34926",
+ "name": "vip",
+ "font_class": "vip",
+ "unicode": "e6c3",
+ "unicode_decimal": 59075
+ },
+ {
+ "icon_id": "34927",
+ "name": "weibo",
+ "font_class": "weibo",
+ "unicode": "e6c4",
+ "unicode_decimal": 59076
+ },
+ {
+ "icon_id": "36012",
+ "name": "activity",
+ "font_class": "activity",
+ "unicode": "e6c5",
+ "unicode_decimal": 59077
+ },
+ {
+ "icon_id": "36014",
+ "name": "big",
+ "font_class": "big",
+ "unicode": "e6c7",
+ "unicode_decimal": 59079
+ },
+ {
+ "icon_id": "36016",
+ "name": "friend_add_fill",
+ "font_class": "friendaddfill",
+ "unicode": "e6c9",
+ "unicode_decimal": 59081
+ },
+ {
+ "icon_id": "36017",
+ "name": "friend_add",
+ "font_class": "friendadd",
+ "unicode": "e6ca",
+ "unicode_decimal": 59082
+ },
+ {
+ "icon_id": "36018",
+ "name": "friend_famous",
+ "font_class": "friendfamous",
+ "unicode": "e6cb",
+ "unicode_decimal": 59083
+ },
+ {
+ "icon_id": "36019",
+ "name": "friend",
+ "font_class": "friend",
+ "unicode": "e6cc",
+ "unicode_decimal": 59084
+ },
+ {
+ "icon_id": "36020",
+ "name": "goods",
+ "font_class": "goods",
+ "unicode": "e6cd",
+ "unicode_decimal": 59085
+ },
+ {
+ "icon_id": "36021",
+ "name": "selection",
+ "font_class": "selection",
+ "unicode": "e6ce",
+ "unicode_decimal": 59086
+ },
+ {
+ "icon_id": "36022",
+ "name": "tmall",
+ "font_class": "tmall",
+ "unicode": "e6cf",
+ "unicode_decimal": 59087
+ },
+ {
+ "icon_id": "36025",
+ "name": "explore",
+ "font_class": "explore",
+ "unicode": "e6d2",
+ "unicode_decimal": 59090
+ },
+ {
+ "icon_id": "36037",
+ "name": "present",
+ "font_class": "present",
+ "unicode": "e6d3",
+ "unicode_decimal": 59091
+ },
+ {
+ "icon_id": "38737",
+ "name": "square_check_fill",
+ "font_class": "squarecheckfill",
+ "unicode": "e6d4",
+ "unicode_decimal": 59092
+ },
+ {
+ "icon_id": "38739",
+ "name": "square",
+ "font_class": "square",
+ "unicode": "e6d5",
+ "unicode_decimal": 59093
+ },
+ {
+ "icon_id": "38741",
+ "name": "square_check",
+ "font_class": "squarecheck",
+ "unicode": "e6d6",
+ "unicode_decimal": 59094
+ },
+ {
+ "icon_id": "38743",
+ "name": "round",
+ "font_class": "round",
+ "unicode": "e6d7",
+ "unicode_decimal": 59095
+ },
+ {
+ "icon_id": "38744",
+ "name": "round_add_fill",
+ "font_class": "roundaddfill",
+ "unicode": "e6d8",
+ "unicode_decimal": 59096
+ },
+ {
+ "icon_id": "38746",
+ "name": "round_add",
+ "font_class": "roundadd",
+ "unicode": "e6d9",
+ "unicode_decimal": 59097
+ },
+ {
+ "icon_id": "38747",
+ "name": "add",
+ "font_class": "add",
+ "unicode": "e6da",
+ "unicode_decimal": 59098
+ },
+ {
+ "icon_id": "38748",
+ "name": "notification_forbid_fill",
+ "font_class": "notificationforbidfill",
+ "unicode": "e6db",
+ "unicode_decimal": 59099
+ },
+ {
+ "icon_id": "41956",
+ "name": "explore_fill",
+ "font_class": "explorefill",
+ "unicode": "e6dd",
+ "unicode_decimal": 59101
+ },
+ {
+ "icon_id": "41957",
+ "name": "fold",
+ "font_class": "fold",
+ "unicode": "e6de",
+ "unicode_decimal": 59102
+ },
+ {
+ "icon_id": "41958",
+ "name": "game",
+ "font_class": "game",
+ "unicode": "e6df",
+ "unicode_decimal": 59103
+ },
+ {
+ "icon_id": "41959",
+ "name": "redpacket",
+ "font_class": "redpacket",
+ "unicode": "e6e0",
+ "unicode_decimal": 59104
+ },
+ {
+ "icon_id": "41960",
+ "name": "selection_fill",
+ "font_class": "selectionfill",
+ "unicode": "e6e1",
+ "unicode_decimal": 59105
+ },
+ {
+ "icon_id": "41961",
+ "name": "similar",
+ "font_class": "similar",
+ "unicode": "e6e2",
+ "unicode_decimal": 59106
+ },
+ {
+ "icon_id": "43903",
+ "name": "appreciate_fill",
+ "font_class": "appreciatefill",
+ "unicode": "e6e3",
+ "unicode_decimal": 59107
+ },
+ {
+ "icon_id": "43904",
+ "name": "info_fill",
+ "font_class": "infofill",
+ "unicode": "e6e4",
+ "unicode_decimal": 59108
+ },
+ {
+ "icon_id": "43905",
+ "name": "info",
+ "font_class": "info",
+ "unicode": "e6e5",
+ "unicode_decimal": 59109
+ },
+ {
+ "icon_id": "50905",
+ "name": "tao",
+ "font_class": "tao",
+ "unicode": "e6e8",
+ "unicode_decimal": 59112
+ },
+ {
+ "icon_id": "50906",
+ "name": "mobile_tao",
+ "font_class": "mobiletao",
+ "unicode": "e6e9",
+ "unicode_decimal": 59113
+ },
+ {
+ "icon_id": "52506",
+ "name": "forward_fill",
+ "font_class": "forwardfill",
+ "unicode": "e6ea",
+ "unicode_decimal": 59114
+ },
+ {
+ "icon_id": "52507",
+ "name": "forward",
+ "font_class": "forward",
+ "unicode": "e6eb",
+ "unicode_decimal": 59115
+ },
+ {
+ "icon_id": "52508",
+ "name": "recharge_fill",
+ "font_class": "rechargefill",
+ "unicode": "e6ec",
+ "unicode_decimal": 59116
+ },
+ {
+ "icon_id": "52509",
+ "name": "recharge",
+ "font_class": "recharge",
+ "unicode": "e6ed",
+ "unicode_decimal": 59117
+ },
+ {
+ "icon_id": "52510",
+ "name": "vipcard",
+ "font_class": "vipcard",
+ "unicode": "e6ee",
+ "unicode_decimal": 59118
+ },
+ {
+ "icon_id": "55043",
+ "name": "voice",
+ "font_class": "voice",
+ "unicode": "e6ef",
+ "unicode_decimal": 59119
+ },
+ {
+ "icon_id": "55448",
+ "name": "voice_fill",
+ "font_class": "voicefill",
+ "unicode": "e6f0",
+ "unicode_decimal": 59120
+ },
+ {
+ "icon_id": "58464",
+ "name": "friend_favor",
+ "font_class": "friendfavor",
+ "unicode": "e6f1",
+ "unicode_decimal": 59121
+ },
+ {
+ "icon_id": "59492",
+ "name": "wifi",
+ "font_class": "wifi",
+ "unicode": "e6f2",
+ "unicode_decimal": 59122
+ },
+ {
+ "icon_id": "61143",
+ "name": "share",
+ "font_class": "share",
+ "unicode": "e6f3",
+ "unicode_decimal": 59123
+ },
+ {
+ "icon_id": "61146",
+ "name": "we_fill",
+ "font_class": "wefill",
+ "unicode": "e6f4",
+ "unicode_decimal": 59124
+ },
+ {
+ "icon_id": "61147",
+ "name": "we",
+ "font_class": "we",
+ "unicode": "e6f5",
+ "unicode_decimal": 59125
+ },
+ {
+ "icon_id": "65413",
+ "name": "light_auto",
+ "font_class": "lightauto",
+ "unicode": "e6f6",
+ "unicode_decimal": 59126
+ },
+ {
+ "icon_id": "65414",
+ "name": "light_forbid",
+ "font_class": "lightforbid",
+ "unicode": "e6f7",
+ "unicode_decimal": 59127
+ },
+ {
+ "icon_id": "65415",
+ "name": "light_fill",
+ "font_class": "lightfill",
+ "unicode": "e6f8",
+ "unicode_decimal": 59128
+ },
+ {
+ "icon_id": "65416",
+ "name": "camera_rotate",
+ "font_class": "camerarotate",
+ "unicode": "e6f9",
+ "unicode_decimal": 59129
+ },
+ {
+ "icon_id": "65417",
+ "name": "light",
+ "font_class": "light",
+ "unicode": "e6fa",
+ "unicode_decimal": 59130
+ },
+ {
+ "icon_id": "69052",
+ "name": "bar_code",
+ "font_class": "barcode",
+ "unicode": "e6fb",
+ "unicode_decimal": 59131
+ },
+ {
+ "icon_id": "69053",
+ "name": "flashlight_close",
+ "font_class": "flashlightclose",
+ "unicode": "e6fc",
+ "unicode_decimal": 59132
+ },
+ {
+ "icon_id": "69054",
+ "name": "flashlight_open",
+ "font_class": "flashlightopen",
+ "unicode": "e6fd",
+ "unicode_decimal": 59133
+ },
+ {
+ "icon_id": "69055",
+ "name": "search_list",
+ "font_class": "searchlist",
+ "unicode": "e6fe",
+ "unicode_decimal": 59134
+ },
+ {
+ "icon_id": "69056",
+ "name": "service",
+ "font_class": "service",
+ "unicode": "e6ff",
+ "unicode_decimal": 59135
+ },
+ {
+ "icon_id": "69057",
+ "name": "sort",
+ "font_class": "sort",
+ "unicode": "e700",
+ "unicode_decimal": 59136
+ },
+ {
+ "icon_id": "76370",
+ "name": "down",
+ "font_class": "down",
+ "unicode": "e703",
+ "unicode_decimal": 59139
+ },
+ {
+ "icon_id": "76371",
+ "name": "mobile",
+ "font_class": "mobile",
+ "unicode": "e704",
+ "unicode_decimal": 59140
+ },
+ {
+ "icon_id": "76380",
+ "name": "mobile_fill",
+ "font_class": "mobilefill",
+ "unicode": "e705",
+ "unicode_decimal": 59141
+ },
+ {
+ "icon_id": "88609",
+ "name": "copy",
+ "font_class": "copy",
+ "unicode": "e706",
+ "unicode_decimal": 59142
+ },
+ {
+ "icon_id": "88610",
+ "name": "countdown_fill",
+ "font_class": "countdownfill",
+ "unicode": "e707",
+ "unicode_decimal": 59143
+ },
+ {
+ "icon_id": "88611",
+ "name": "countdown",
+ "font_class": "countdown",
+ "unicode": "e708",
+ "unicode_decimal": 59144
+ },
+ {
+ "icon_id": "88612",
+ "name": "notice_fill",
+ "font_class": "noticefill",
+ "unicode": "e709",
+ "unicode_decimal": 59145
+ },
+ {
+ "icon_id": "88613",
+ "name": "notice",
+ "font_class": "notice",
+ "unicode": "e70a",
+ "unicode_decimal": 59146
+ },
+ {
+ "icon_id": "88614",
+ "name": "qiang",
+ "font_class": "qiang",
+ "unicode": "e70b",
+ "unicode_decimal": 59147
+ },
+ {
+ "icon_id": "88621",
+ "name": "upstage_fill",
+ "font_class": "upstagefill",
+ "unicode": "e70e",
+ "unicode_decimal": 59150
+ },
+ {
+ "icon_id": "88622",
+ "name": "upstage",
+ "font_class": "upstage",
+ "unicode": "e70f",
+ "unicode_decimal": 59151
+ },
+ {
+ "icon_id": "90836",
+ "name": "baby_fill",
+ "font_class": "babyfill",
+ "unicode": "e710",
+ "unicode_decimal": 59152
+ },
+ {
+ "icon_id": "90837",
+ "name": "baby",
+ "font_class": "baby",
+ "unicode": "e711",
+ "unicode_decimal": 59153
+ },
+ {
+ "icon_id": "90838",
+ "name": "brand_fill",
+ "font_class": "brandfill",
+ "unicode": "e712",
+ "unicode_decimal": 59154
+ },
+ {
+ "icon_id": "90839",
+ "name": "brand",
+ "font_class": "brand",
+ "unicode": "e713",
+ "unicode_decimal": 59155
+ },
+ {
+ "icon_id": "90840",
+ "name": "choiceness_fill",
+ "font_class": "choicenessfill",
+ "unicode": "e714",
+ "unicode_decimal": 59156
+ },
+ {
+ "icon_id": "90841",
+ "name": "choiceness",
+ "font_class": "choiceness",
+ "unicode": "e715",
+ "unicode_decimal": 59157
+ },
+ {
+ "icon_id": "90842",
+ "name": "clothes_fill",
+ "font_class": "clothesfill",
+ "unicode": "e716",
+ "unicode_decimal": 59158
+ },
+ {
+ "icon_id": "90843",
+ "name": "clothes",
+ "font_class": "clothes",
+ "unicode": "e717",
+ "unicode_decimal": 59159
+ },
+ {
+ "icon_id": "90844",
+ "name": "creative_fill",
+ "font_class": "creativefill",
+ "unicode": "e718",
+ "unicode_decimal": 59160
+ },
+ {
+ "icon_id": "90845",
+ "name": "creative",
+ "font_class": "creative",
+ "unicode": "e719",
+ "unicode_decimal": 59161
+ },
+ {
+ "icon_id": "90846",
+ "name": "female",
+ "font_class": "female",
+ "unicode": "e71a",
+ "unicode_decimal": 59162
+ },
+ {
+ "icon_id": "90847",
+ "name": "keyboard",
+ "font_class": "keyboard",
+ "unicode": "e71b",
+ "unicode_decimal": 59163
+ },
+ {
+ "icon_id": "90848",
+ "name": "male",
+ "font_class": "male",
+ "unicode": "e71c",
+ "unicode_decimal": 59164
+ },
+ {
+ "icon_id": "90849",
+ "name": "new_fill",
+ "font_class": "newfill",
+ "unicode": "e71d",
+ "unicode_decimal": 59165
+ },
+ {
+ "icon_id": "90850",
+ "name": "new",
+ "font_class": "new",
+ "unicode": "e71e",
+ "unicode_decimal": 59166
+ },
+ {
+ "icon_id": "90851",
+ "name": "pull_left",
+ "font_class": "pullleft",
+ "unicode": "e71f",
+ "unicode_decimal": 59167
+ },
+ {
+ "icon_id": "90852",
+ "name": "pull_right",
+ "font_class": "pullright",
+ "unicode": "e720",
+ "unicode_decimal": 59168
+ },
+ {
+ "icon_id": "90853",
+ "name": "rank_fill",
+ "font_class": "rankfill",
+ "unicode": "e721",
+ "unicode_decimal": 59169
+ },
+ {
+ "icon_id": "90854",
+ "name": "rank",
+ "font_class": "rank",
+ "unicode": "e722",
+ "unicode_decimal": 59170
+ },
+ {
+ "icon_id": "97033",
+ "name": "bad",
+ "font_class": "bad",
+ "unicode": "e723",
+ "unicode_decimal": 59171
+ },
+ {
+ "icon_id": "97034",
+ "name": "camera_add",
+ "font_class": "cameraadd",
+ "unicode": "e724",
+ "unicode_decimal": 59172
+ },
+ {
+ "icon_id": "97035",
+ "name": "focus",
+ "font_class": "focus",
+ "unicode": "e725",
+ "unicode_decimal": 59173
+ },
+ {
+ "icon_id": "97037",
+ "name": "friend_fill",
+ "font_class": "friendfill",
+ "unicode": "e726",
+ "unicode_decimal": 59174
+ },
+ {
+ "icon_id": "97882",
+ "name": "camera_add_fill",
+ "font_class": "cameraaddfill",
+ "unicode": "e727",
+ "unicode_decimal": 59175
+ },
+ {
+ "icon_id": "127302",
+ "name": "apps",
+ "font_class": "apps",
+ "unicode": "e729",
+ "unicode_decimal": 59177
+ },
+ {
+ "icon_id": "127303",
+ "name": "paint_fill",
+ "font_class": "paintfill",
+ "unicode": "e72a",
+ "unicode_decimal": 59178
+ },
+ {
+ "icon_id": "127304",
+ "name": "paint",
+ "font_class": "paint",
+ "unicode": "e72b",
+ "unicode_decimal": 59179
+ },
+ {
+ "icon_id": "127305",
+ "name": "pic_fill",
+ "font_class": "picfill",
+ "unicode": "e72c",
+ "unicode_decimal": 59180
+ },
+ {
+ "icon_id": "136707",
+ "name": "refresh_arrow",
+ "font_class": "refresharrow",
+ "unicode": "e72d",
+ "unicode_decimal": 59181
+ },
+ {
+ "icon_id": "143738",
+ "name": "mark_fill",
+ "font_class": "markfill",
+ "unicode": "e730",
+ "unicode_decimal": 59184
+ },
+ {
+ "icon_id": "143739",
+ "name": "mark",
+ "font_class": "mark",
+ "unicode": "e731",
+ "unicode_decimal": 59185
+ },
+ {
+ "icon_id": "143740",
+ "name": "present_fill",
+ "font_class": "presentfill",
+ "unicode": "e732",
+ "unicode_decimal": 59186
+ },
+ {
+ "icon_id": "143741",
+ "name": "repeal",
+ "font_class": "repeal",
+ "unicode": "e733",
+ "unicode_decimal": 59187
+ },
+ {
+ "icon_id": "151470",
+ "name": "album",
+ "font_class": "album",
+ "unicode": "e734",
+ "unicode_decimal": 59188
+ },
+ {
+ "icon_id": "158873",
+ "name": "people_fill",
+ "font_class": "peoplefill",
+ "unicode": "e735",
+ "unicode_decimal": 59189
+ },
+ {
+ "icon_id": "158874",
+ "name": "people",
+ "font_class": "people",
+ "unicode": "e736",
+ "unicode_decimal": 59190
+ },
+ {
+ "icon_id": "158877",
+ "name": "service_fill",
+ "font_class": "servicefill",
+ "unicode": "e737",
+ "unicode_decimal": 59191
+ },
+ {
+ "icon_id": "158968",
+ "name": "repair",
+ "font_class": "repair",
+ "unicode": "e738",
+ "unicode_decimal": 59192
+ },
+ {
+ "icon_id": "158975",
+ "name": "file",
+ "font_class": "file",
+ "unicode": "e739",
+ "unicode_decimal": 59193
+ },
+ {
+ "icon_id": "158976",
+ "name": "repair_fill",
+ "font_class": "repairfill",
+ "unicode": "e73a",
+ "unicode_decimal": 59194
+ },
+ {
+ "icon_id": "166895",
+ "name": "taoxiaopu",
+ "font_class": "taoxiaopu",
+ "unicode": "e73b",
+ "unicode_decimal": 59195
+ },
+ {
+ "icon_id": "176307",
+ "name": "attention_fill",
+ "font_class": "attentionfill",
+ "unicode": "e73c",
+ "unicode_decimal": 59196
+ },
+ {
+ "icon_id": "176308",
+ "name": "attention",
+ "font_class": "attention",
+ "unicode": "e73d",
+ "unicode_decimal": 59197
+ },
+ {
+ "icon_id": "176309",
+ "name": "command_fill",
+ "font_class": "commandfill",
+ "unicode": "e73e",
+ "unicode_decimal": 59198
+ },
+ {
+ "icon_id": "176310",
+ "name": "command",
+ "font_class": "command",
+ "unicode": "e73f",
+ "unicode_decimal": 59199
+ },
+ {
+ "icon_id": "176311",
+ "name": "community_fill",
+ "font_class": "communityfill",
+ "unicode": "e740",
+ "unicode_decimal": 59200
+ },
+ {
+ "icon_id": "176312",
+ "name": "community",
+ "font_class": "community",
+ "unicode": "e741",
+ "unicode_decimal": 59201
+ },
+ {
+ "icon_id": "176313",
+ "name": "read",
+ "font_class": "read",
+ "unicode": "e742",
+ "unicode_decimal": 59202
+ },
+ {
+ "icon_id": "194830",
+ "name": "suan",
+ "font_class": "suan",
+ "unicode": "e743",
+ "unicode_decimal": 59203
+ },
+ {
+ "icon_id": "194846",
+ "name": "hua",
+ "font_class": "hua",
+ "unicode": "e744",
+ "unicode_decimal": 59204
+ },
+ {
+ "icon_id": "194847",
+ "name": "ju",
+ "font_class": "ju",
+ "unicode": "e745",
+ "unicode_decimal": 59205
+ },
+ {
+ "icon_id": "194858",
+ "name": "tian",
+ "font_class": "tian",
+ "unicode": "e748",
+ "unicode_decimal": 59208
+ },
+ {
+ "icon_id": "194872",
+ "name": "calendar",
+ "font_class": "calendar",
+ "unicode": "e74a",
+ "unicode_decimal": 59210
+ },
+ {
+ "icon_id": "194873",
+ "name": "cut",
+ "font_class": "cut",
+ "unicode": "e74b",
+ "unicode_decimal": 59211
+ },
+ {
+ "icon_id": "194874",
+ "name": "magic",
+ "font_class": "magic",
+ "unicode": "e74c",
+ "unicode_decimal": 59212
+ },
+ {
+ "icon_id": "212324",
+ "name": "backward_fill",
+ "font_class": "backwardfill",
+ "unicode": "e74d",
+ "unicode_decimal": 59213
+ },
+ {
+ "icon_id": "212328",
+ "name": "play_fill",
+ "font_class": "playfill",
+ "unicode": "e74f",
+ "unicode_decimal": 59215
+ },
+ {
+ "icon_id": "212329",
+ "name": "stop",
+ "font_class": "stop",
+ "unicode": "e750",
+ "unicode_decimal": 59216
+ },
+ {
+ "icon_id": "212330",
+ "name": "tag_fill",
+ "font_class": "tagfill",
+ "unicode": "e751",
+ "unicode_decimal": 59217
+ },
+ {
+ "icon_id": "212331",
+ "name": "tag",
+ "font_class": "tag",
+ "unicode": "e752",
+ "unicode_decimal": 59218
+ },
+ {
+ "icon_id": "212332",
+ "name": "group",
+ "font_class": "group",
+ "unicode": "e753",
+ "unicode_decimal": 59219
+ },
+ {
+ "icon_id": "240126",
+ "name": "all",
+ "font_class": "all",
+ "unicode": "e755",
+ "unicode_decimal": 59221
+ },
+ {
+ "icon_id": "240127",
+ "name": "back_delete",
+ "font_class": "backdelete",
+ "unicode": "e756",
+ "unicode_decimal": 59222
+ },
+ {
+ "icon_id": "240128",
+ "name": "hot_fill",
+ "font_class": "hotfill",
+ "unicode": "e757",
+ "unicode_decimal": 59223
+ },
+ {
+ "icon_id": "240129",
+ "name": "hot",
+ "font_class": "hot",
+ "unicode": "e758",
+ "unicode_decimal": 59224
+ },
+ {
+ "icon_id": "240130",
+ "name": "post",
+ "font_class": "post",
+ "unicode": "e759",
+ "unicode_decimal": 59225
+ },
+ {
+ "icon_id": "240132",
+ "name": "radio_box",
+ "font_class": "radiobox",
+ "unicode": "e75b",
+ "unicode_decimal": 59227
+ },
+ {
+ "icon_id": "240133",
+ "name": "round_down",
+ "font_class": "rounddown",
+ "unicode": "e75c",
+ "unicode_decimal": 59228
+ },
+ {
+ "icon_id": "240135",
+ "name": "upload",
+ "font_class": "upload",
+ "unicode": "e75d",
+ "unicode_decimal": 59229
+ },
+ {
+ "icon_id": "240138",
+ "name": "write_fill",
+ "font_class": "writefill",
+ "unicode": "e760",
+ "unicode_decimal": 59232
+ },
+ {
+ "icon_id": "240139",
+ "name": "write",
+ "font_class": "write",
+ "unicode": "e761",
+ "unicode_decimal": 59233
+ },
+ {
+ "icon_id": "240141",
+ "name": "radio_box_fill",
+ "font_class": "radioboxfill",
+ "unicode": "e763",
+ "unicode_decimal": 59235
+ },
+ {
+ "icon_id": "240628",
+ "name": "punch",
+ "font_class": "punch",
+ "unicode": "e764",
+ "unicode_decimal": 59236
+ },
+ {
+ "icon_id": "240629",
+ "name": "shake",
+ "font_class": "shake",
+ "unicode": "e765",
+ "unicode_decimal": 59237
+ },
+ {
+ "icon_id": "244443",
+ "name": "第三方 微博",
+ "font_class": "disanfangweibo",
+ "unicode": "e701",
+ "unicode_decimal": 59137
+ },
+ {
+ "icon_id": "244444",
+ "name": "第三方 微信",
+ "font_class": "disanfangweixin",
+ "unicode": "e70c",
+ "unicode_decimal": 59148
+ },
+ {
+ "icon_id": "252290",
+ "name": "add",
+ "font_class": "add1",
+ "unicode": "e767",
+ "unicode_decimal": 59239
+ },
+ {
+ "icon_id": "252291",
+ "name": "move",
+ "font_class": "move",
+ "unicode": "e768",
+ "unicode_decimal": 59240
+ },
+ {
+ "icon_id": "252292",
+ "name": "safe",
+ "font_class": "safe",
+ "unicode": "e769",
+ "unicode_decimal": 59241
+ },
+ {
+ "icon_id": "252298",
+ "name": "haodian",
+ "font_class": "haodian",
+ "unicode": "e76d",
+ "unicode_decimal": 59245
+ },
+ {
+ "icon_id": "252299",
+ "name": "mao",
+ "font_class": "mao",
+ "unicode": "e76e",
+ "unicode_decimal": 59246
+ },
+ {
+ "icon_id": "252300",
+ "name": "qi",
+ "font_class": "qi",
+ "unicode": "e76f",
+ "unicode_decimal": 59247
+ },
+ {
+ "icon_id": "252301",
+ "name": "ye",
+ "font_class": "ye",
+ "unicode": "e770",
+ "unicode_decimal": 59248
+ },
+ {
+ "icon_id": "252303",
+ "name": "juhuasuan",
+ "font_class": "juhuasuan",
+ "unicode": "e771",
+ "unicode_decimal": 59249
+ },
+ {
+ "icon_id": "252304",
+ "name": "taoqianggou",
+ "font_class": "taoqianggou",
+ "unicode": "e772",
+ "unicode_decimal": 59250
+ },
+ {
+ "icon_id": "252305",
+ "name": "tianmao",
+ "font_class": "tianmao",
+ "unicode": "e773",
+ "unicode_decimal": 59251
+ },
+ {
+ "icon_id": "289082",
+ "name": "activity_fill",
+ "font_class": "activityfill",
+ "unicode": "e775",
+ "unicode_decimal": 59253
+ },
+ {
+ "icon_id": "289083",
+ "name": "crown_fill",
+ "font_class": "crownfill",
+ "unicode": "e776",
+ "unicode_decimal": 59254
+ },
+ {
+ "icon_id": "289084",
+ "name": "crown",
+ "font_class": "crown",
+ "unicode": "e777",
+ "unicode_decimal": 59255
+ },
+ {
+ "icon_id": "289085",
+ "name": "goods_fill",
+ "font_class": "goodsfill",
+ "unicode": "e778",
+ "unicode_decimal": 59256
+ },
+ {
+ "icon_id": "289086",
+ "name": "message_fill",
+ "font_class": "messagefill",
+ "unicode": "e779",
+ "unicode_decimal": 59257
+ },
+ {
+ "icon_id": "289087",
+ "name": "profile_fill",
+ "font_class": "profilefill",
+ "unicode": "e77a",
+ "unicode_decimal": 59258
+ },
+ {
+ "icon_id": "289088",
+ "name": "sound",
+ "font_class": "sound",
+ "unicode": "e77b",
+ "unicode_decimal": 59259
+ },
+ {
+ "icon_id": "289089",
+ "name": "sponsor_fill",
+ "font_class": "sponsorfill",
+ "unicode": "e77c",
+ "unicode_decimal": 59260
+ },
+ {
+ "icon_id": "289090",
+ "name": "sponsor",
+ "font_class": "sponsor",
+ "unicode": "e77d",
+ "unicode_decimal": 59261
+ },
+ {
+ "icon_id": "289091",
+ "name": "up_block",
+ "font_class": "upblock",
+ "unicode": "e77e",
+ "unicode_decimal": 59262
+ },
+ {
+ "icon_id": "289092",
+ "name": "we_block",
+ "font_class": "weblock",
+ "unicode": "e77f",
+ "unicode_decimal": 59263
+ },
+ {
+ "icon_id": "289093",
+ "name": "we_unblock",
+ "font_class": "weunblock",
+ "unicode": "e780",
+ "unicode_decimal": 59264
+ },
+ {
+ "icon_id": "302325",
+ "name": "1111",
+ "font_class": "1111",
+ "unicode": "e782",
+ "unicode_decimal": 59266
+ },
+ {
+ "icon_id": "330201",
+ "name": "my",
+ "font_class": "my",
+ "unicode": "e78b",
+ "unicode_decimal": 59275
+ },
+ {
+ "icon_id": "330204",
+ "name": "my_fill",
+ "font_class": "myfill",
+ "unicode": "e78c",
+ "unicode_decimal": 59276
+ },
+ {
+ "icon_id": "450956",
+ "name": "emoji_fill",
+ "font_class": "emojifill",
+ "unicode": "e78d",
+ "unicode_decimal": 59277
+ },
+ {
+ "icon_id": "450957",
+ "name": "emoji_flash_fill",
+ "font_class": "emojiflashfill",
+ "unicode": "e78e",
+ "unicode_decimal": 59278
+ },
+ {
+ "icon_id": "460104",
+ "name": "flashbuy_fill",
+ "font_class": "flashbuyfill-copy",
+ "unicode": "e78f",
+ "unicode_decimal": 59279
+ },
+ {
+ "icon_id": "483656",
+ "name": "text",
+ "font_class": "text",
+ "unicode": "e791",
+ "unicode_decimal": 59281
+ },
+ {
+ "icon_id": "510943",
+ "name": "goods_favor",
+ "font_class": "goodsfavor",
+ "unicode": "e794",
+ "unicode_decimal": 59284
+ },
+ {
+ "icon_id": "510944",
+ "name": "music_fill",
+ "font_class": "musicfill",
+ "unicode": "e795",
+ "unicode_decimal": 59285
+ },
+ {
+ "icon_id": "510945",
+ "name": "music_forbid_fill",
+ "font_class": "musicforbidfill",
+ "unicode": "e796",
+ "unicode_decimal": 59286
+ },
+ {
+ "icon_id": "510946",
+ "name": "xiami_forbid",
+ "font_class": "xiamiforbid",
+ "unicode": "e797",
+ "unicode_decimal": 59287
+ },
+ {
+ "icon_id": "510947",
+ "name": "xiami",
+ "font_class": "xiami",
+ "unicode": "e798",
+ "unicode_decimal": 59288
+ },
+ {
+ "icon_id": "563741",
+ "name": "选择",
+ "font_class": "xuanze",
+ "unicode": "e628",
+ "unicode_decimal": 58920
+ },
+ {
+ "icon_id": "569436",
+ "name": "round_left_fill",
+ "font_class": "roundleftfill",
+ "unicode": "e799",
+ "unicode_decimal": 59289
+ },
+ {
+ "icon_id": "573576",
+ "name": "triangle_down_fill",
+ "font_class": "triangledownfill",
+ "unicode": "e79b",
+ "unicode_decimal": 59291
+ },
+ {
+ "icon_id": "573577",
+ "name": "triangle_up_fill",
+ "font_class": "triangleupfill",
+ "unicode": "e79c",
+ "unicode_decimal": 59292
+ },
+ {
+ "icon_id": "573594",
+ "name": "round_left_fill",
+ "font_class": "roundleftfill-copy",
+ "unicode": "e79e",
+ "unicode_decimal": 59294
+ },
+ {
+ "icon_id": "630083",
+ "name": "下拉",
+ "font_class": "right1",
+ "unicode": "e670",
+ "unicode_decimal": 58992
+ },
+ {
+ "icon_id": "639730",
+ "name": "pull_down",
+ "font_class": "pulldown1",
+ "unicode": "e79f",
+ "unicode_decimal": 59295
+ },
+ {
+ "icon_id": "695192",
+ "name": "搜索",
+ "font_class": "sousuo",
+ "unicode": "e63f",
+ "unicode_decimal": 58943
+ },
+ {
+ "icon_id": "747744",
+ "name": "emoji_light",
+ "font_class": "emojilight",
+ "unicode": "e7a1",
+ "unicode_decimal": 59297
+ },
+ {
+ "icon_id": "747746",
+ "name": "keyboard_light",
+ "font_class": "keyboardlight",
+ "unicode": "e7a3",
+ "unicode_decimal": 59299
+ },
+ {
+ "icon_id": "747747",
+ "name": "record_fill",
+ "font_class": "recordfill",
+ "unicode": "e7a4",
+ "unicode_decimal": 59300
+ },
+ {
+ "icon_id": "747748",
+ "name": "record_light",
+ "font_class": "recordlight",
+ "unicode": "e7a5",
+ "unicode_decimal": 59301
+ },
+ {
+ "icon_id": "747749",
+ "name": "record",
+ "font_class": "record",
+ "unicode": "e7a6",
+ "unicode_decimal": 59302
+ },
+ {
+ "icon_id": "747750",
+ "name": "round_add_light",
+ "font_class": "roundaddlight",
+ "unicode": "e7a7",
+ "unicode_decimal": 59303
+ },
+ {
+ "icon_id": "747751",
+ "name": "sound_light",
+ "font_class": "soundlight",
+ "unicode": "e7a8",
+ "unicode_decimal": 59304
+ },
+ {
+ "icon_id": "748115",
+ "name": "cardboard_fill",
+ "font_class": "cardboardfill",
+ "unicode": "e7a9",
+ "unicode_decimal": 59305
+ },
+ {
+ "icon_id": "748116",
+ "name": "cardboard",
+ "font_class": "cardboard",
+ "unicode": "e7aa",
+ "unicode_decimal": 59306
+ },
+ {
+ "icon_id": "748267",
+ "name": "form_fill",
+ "font_class": "formfill",
+ "unicode": "e7ab",
+ "unicode_decimal": 59307
+ },
+ {
+ "icon_id": "767224",
+ "name": "coin",
+ "font_class": "coin",
+ "unicode": "e7ac",
+ "unicode_decimal": 59308
+ },
+ {
+ "icon_id": "767233",
+ "name": "sort_light",
+ "font_class": "sortlight",
+ "unicode": "e7ad",
+ "unicode_decimal": 59309
+ },
+ {
+ "icon_id": "778804",
+ "name": "ok",
+ "font_class": "yooxi",
+ "unicode": "e612",
+ "unicode_decimal": 58898
+ },
+ {
+ "icon_id": "815875",
+ "name": "选择",
+ "font_class": "choose",
+ "unicode": "e614",
+ "unicode_decimal": 58900
+ },
+ {
+ "icon_id": "833467",
+ "name": "cardboard_forbid",
+ "font_class": "cardboardforbid",
+ "unicode": "e7af",
+ "unicode_decimal": 59311
+ },
+ {
+ "icon_id": "833468",
+ "name": "circle_fill",
+ "font_class": "circlefill",
+ "unicode": "e7b0",
+ "unicode_decimal": 59312
+ },
+ {
+ "icon_id": "833469",
+ "name": "circle",
+ "font_class": "circle",
+ "unicode": "e7b1",
+ "unicode_decimal": 59313
+ },
+ {
+ "icon_id": "833470",
+ "name": "attention_forbid",
+ "font_class": "attentionforbid",
+ "unicode": "e7b2",
+ "unicode_decimal": 59314
+ },
+ {
+ "icon_id": "833471",
+ "name": "attention_forbid_fill",
+ "font_class": "attentionforbidfill",
+ "unicode": "e7b3",
+ "unicode_decimal": 59315
+ },
+ {
+ "icon_id": "833472",
+ "name": "attention_favor_fill",
+ "font_class": "attentionfavorfill",
+ "unicode": "e7b4",
+ "unicode_decimal": 59316
+ },
+ {
+ "icon_id": "833473",
+ "name": "attention_favor",
+ "font_class": "attentionfavor",
+ "unicode": "e7b5",
+ "unicode_decimal": 59317
+ },
+ {
+ "icon_id": "833475",
+ "name": "pic_light",
+ "font_class": "piclight",
+ "unicode": "e7b7",
+ "unicode_decimal": 59319
+ },
+ {
+ "icon_id": "833476",
+ "name": "shop_light",
+ "font_class": "shoplight",
+ "unicode": "e7b8",
+ "unicode_decimal": 59320
+ },
+ {
+ "icon_id": "833477",
+ "name": "voice_light",
+ "font_class": "voicelight",
+ "unicode": "e7b9",
+ "unicode_decimal": 59321
+ },
+ {
+ "icon_id": "833479",
+ "name": "attention_favor_fill",
+ "font_class": "attentionfavorfill-copy",
+ "unicode": "e7ba",
+ "unicode_decimal": 59322
+ },
+ {
+ "icon_id": "925818",
+ "name": "支付宝",
+ "font_class": "umidd17",
+ "unicode": "e61a",
+ "unicode_decimal": 58906
+ },
+ {
+ "icon_id": "1005712",
+ "name": "full",
+ "font_class": "full",
+ "unicode": "e7bc",
+ "unicode_decimal": 59324
+ },
+ {
+ "icon_id": "1005713",
+ "name": "mail",
+ "font_class": "mail",
+ "unicode": "e7bd",
+ "unicode_decimal": 59325
+ },
+ {
+ "icon_id": "1005714",
+ "name": "people_list",
+ "font_class": "peoplelist",
+ "unicode": "e7be",
+ "unicode_decimal": 59326
+ },
+ {
+ "icon_id": "1096510",
+ "name": "goods_new_fill",
+ "font_class": "goodsnewfill",
+ "unicode": "e7bf",
+ "unicode_decimal": 59327
+ },
+ {
+ "icon_id": "1096511",
+ "name": "goods_new",
+ "font_class": "goodsnew",
+ "unicode": "e7c0",
+ "unicode_decimal": 59328
+ },
+ {
+ "icon_id": "1096512",
+ "name": "medal_fill",
+ "font_class": "medalfill",
+ "unicode": "e7c1",
+ "unicode_decimal": 59329
+ },
+ {
+ "icon_id": "1096513",
+ "name": "medal",
+ "font_class": "medal",
+ "unicode": "e7c2",
+ "unicode_decimal": 59330
+ },
+ {
+ "icon_id": "1096514",
+ "name": "news_fill",
+ "font_class": "newsfill",
+ "unicode": "e7c3",
+ "unicode_decimal": 59331
+ },
+ {
+ "icon_id": "1096515",
+ "name": "news_hot_fill",
+ "font_class": "newshotfill",
+ "unicode": "e7c4",
+ "unicode_decimal": 59332
+ },
+ {
+ "icon_id": "1096516",
+ "name": "news_hot",
+ "font_class": "newshot",
+ "unicode": "e7c5",
+ "unicode_decimal": 59333
+ },
+ {
+ "icon_id": "1096517",
+ "name": "news",
+ "font_class": "news",
+ "unicode": "e7c6",
+ "unicode_decimal": 59334
+ },
+ {
+ "icon_id": "1096518",
+ "name": "video_fill",
+ "font_class": "videofill",
+ "unicode": "e7c7",
+ "unicode_decimal": 59335
+ },
+ {
+ "icon_id": "1096519",
+ "name": "video",
+ "font_class": "video",
+ "unicode": "e7c8",
+ "unicode_decimal": 59336
+ },
+ {
+ "icon_id": "1111734",
+ "name": "ask_fill",
+ "font_class": "askfill",
+ "unicode": "e7c9",
+ "unicode_decimal": 59337
+ },
+ {
+ "icon_id": "1111735",
+ "name": "ask",
+ "font_class": "ask",
+ "unicode": "e7ca",
+ "unicode_decimal": 59338
+ },
+ {
+ "icon_id": "1111736",
+ "name": "exit",
+ "font_class": "exit",
+ "unicode": "e7cb",
+ "unicode_decimal": 59339
+ },
+ {
+ "icon_id": "1133854",
+ "name": "skin_fill",
+ "font_class": "skinfill",
+ "unicode": "e7cc",
+ "unicode_decimal": 59340
+ },
+ {
+ "icon_id": "1133855",
+ "name": "skin",
+ "font_class": "skin",
+ "unicode": "e7cd",
+ "unicode_decimal": 59341
+ },
+ {
+ "icon_id": "1134189",
+ "name": "money_bag_fill",
+ "font_class": "moneybagfill",
+ "unicode": "e7ce",
+ "unicode_decimal": 59342
+ },
+ {
+ "icon_id": "1134190",
+ "name": "usefull_fill",
+ "font_class": "usefullfill",
+ "unicode": "e7cf",
+ "unicode_decimal": 59343
+ },
+ {
+ "icon_id": "1134192",
+ "name": "usefull",
+ "font_class": "usefull",
+ "unicode": "e7d0",
+ "unicode_decimal": 59344
+ },
+ {
+ "icon_id": "1134258",
+ "name": "money_bag",
+ "font_class": "moneybag",
+ "unicode": "e7d1",
+ "unicode_decimal": 59345
+ },
+ {
+ "icon_id": "1241243",
+ "name": "下载",
+ "font_class": "download",
+ "unicode": "e610",
+ "unicode_decimal": 58896
+ },
+ {
+ "icon_id": "1258903",
+ "name": "redpacket_fill",
+ "font_class": "redpacket_fill",
+ "unicode": "e7d3",
+ "unicode_decimal": 59347
+ },
+ {
+ "icon_id": "1258904",
+ "name": "subscription",
+ "font_class": "subscription",
+ "unicode": "e7d4",
+ "unicode_decimal": 59348
+ },
+ {
+ "icon_id": "1280170",
+ "name": "选择按钮",
+ "font_class": "xuanzeanniu",
+ "unicode": "e604",
+ "unicode_decimal": 58884
+ },
+ {
+ "icon_id": "1412960",
+ "name": "第三方",
+ "font_class": "weibiaoti-",
+ "unicode": "e627",
+ "unicode_decimal": 58919
+ },
+ {
+ "icon_id": "1485072",
+ "name": "详情",
+ "font_class": "xiangqing",
+ "unicode": "e728",
+ "unicode_decimal": 59176
+ },
+ {
+ "icon_id": "1488521",
+ "name": "数据",
+ "font_class": "shuju",
+ "unicode": "e660",
+ "unicode_decimal": 58976
+ },
+ {
+ "icon_id": "1492012",
+ "name": "home_light",
+ "font_class": "home_light",
+ "unicode": "e7d5",
+ "unicode_decimal": 59349
+ },
+ {
+ "icon_id": "1493286",
+ "name": "my_light",
+ "font_class": "my_light",
+ "unicode": "e7d6",
+ "unicode_decimal": 59350
+ },
+ {
+ "icon_id": "1656190",
+ "name": "第三方 QQ",
+ "font_class": "disanfangQQ",
+ "unicode": "e6dc",
+ "unicode_decimal": 59100
+ },
+ {
+ "icon_id": "2059686",
+ "name": "中国地图",
+ "font_class": "chinamap-chart",
+ "unicode": "e882",
+ "unicode_decimal": 59522
+ },
+ {
+ "icon_id": "3277861",
+ "name": "地图",
+ "font_class": "tubiaozhizuomoban",
+ "unicode": "e601",
+ "unicode_decimal": 58881
+ },
+ {
+ "icon_id": "3625928",
+ "name": "set",
+ "font_class": "set",
+ "unicode": "e889",
+ "unicode_decimal": 59529
+ },
+ {
+ "icon_id": "4294056",
+ "name": "云",
+ "font_class": "yun",
+ "unicode": "e781",
+ "unicode_decimal": 59265
+ },
+ {
+ "icon_id": "4419024",
+ "name": "控制台",
+ "font_class": "kongzhitai_",
+ "unicode": "e654",
+ "unicode_decimal": 58964
+ },
+ {
+ "icon_id": "4480714",
+ "name": "数据",
+ "font_class": "shuju1",
+ "unicode": "e61b",
+ "unicode_decimal": 58907
+ },
+ {
+ "icon_id": "6749825",
+ "name": "数据",
+ "font_class": "shuju2",
+ "unicode": "e640",
+ "unicode_decimal": 58944
+ },
+ {
+ "icon_id": "7871707",
+ "name": "第三方",
+ "font_class": "disanfang",
+ "unicode": "e6be",
+ "unicode_decimal": 59070
+ },
+ {
+ "icon_id": "9429966",
+ "name": "数据",
+ "font_class": "shuju3",
+ "unicode": "e606",
+ "unicode_decimal": 58886
+ },
+ {
+ "icon_id": "10051804",
+ "name": "控制台",
+ "font_class": "kongzhitai",
+ "unicode": "e66f",
+ "unicode_decimal": 58991
+ },
+ {
+ "icon_id": "10172220",
+ "name": "耳机",
+ "font_class": "headset",
+ "unicode": "e600",
+ "unicode_decimal": 58880
+ },
+ {
+ "icon_id": "10591531",
+ "name": "设 置",
+ "font_class": "shezhi",
+ "unicode": "e611",
+ "unicode_decimal": 58897
+ },
+ {
+ "icon_id": "10659179",
+ "name": "下拉",
+ "font_class": "up-copy",
+ "unicode": "e674",
+ "unicode_decimal": 58996
+ },
+ {
+ "icon_id": "11223649",
+ "name": "下拉",
+ "font_class": "down-copy",
+ "unicode": "e67a",
+ "unicode_decimal": 59002
+ },
+ {
+ "icon_id": "11223663",
+ "name": "下拉",
+ "font_class": "left-copy",
+ "unicode": "e67b",
+ "unicode_decimal": 59003
+ }
+ ]
+}
diff --git a/public/static/admin_static/lib/fonts/iconfont.svg b/public/static/admin_static/lib/fonts/iconfont.svg
new file mode 100644
index 0000000..c22d6af
--- /dev/null
+++ b/public/static/admin_static/lib/fonts/iconfont.svg
@@ -0,0 +1,1034 @@
+
+
+
+
+
+Created by iconfont
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/static/admin_static/lib/fonts/iconfont.ttf b/public/static/admin_static/lib/fonts/iconfont.ttf
new file mode 100644
index 0000000..ff5cd6a
Binary files /dev/null and b/public/static/admin_static/lib/fonts/iconfont.ttf differ
diff --git a/public/static/admin_static/lib/fonts/iconfont.woff b/public/static/admin_static/lib/fonts/iconfont.woff
new file mode 100644
index 0000000..a97f28f
Binary files /dev/null and b/public/static/admin_static/lib/fonts/iconfont.woff differ
diff --git a/public/static/admin_static/lib/fonts/iconfont.woff2 b/public/static/admin_static/lib/fonts/iconfont.woff2
new file mode 100644
index 0000000..c516e1e
Binary files /dev/null and b/public/static/admin_static/lib/fonts/iconfont.woff2 differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/CHANGE-LOG b/public/static/admin_static/lib/jquery.bsgrid/CHANGE-LOG
new file mode 100644
index 0000000..a8e821f
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/CHANGE-LOG
@@ -0,0 +1,129 @@
+v1.38 2016-03-27 新功能、性能优化
+
+1,增加带参数查询示例:search.html;
+2,dataType增加支持jsonp,示例:jsonp.html;
+3,settings增加dataTrim,是否trim单元格值,默认true,与之前版本处理相同,dataTrim为false则不trim,使用示例:nested-json.html;
+4,修复编辑模式下addNewEditRow前表格必须有一行的bug,改为表格初始化后必须有一行即可;
+5,gridObj增加clearRowData(rowIndex)及loadRowData(record, rowIndex)方法;
+6,additionalRenderPerColumn改为在additionalRenderPerRow之前执行,renderPerColumnMethods改为在renderPerRowMethods之前执行;
+
+
+
+v1.37 2015-11-24 使用优化、性能优化、BUG修复
+
+1,修复pageSize为0或pageAll为tue且数据条数为0时隐藏不了表头列的bug;
+2,增加参数showPageToolbar控制是否显示分页工具条,默认值true显示;
+3,增加9个方法,获取分页及排序相关值;
+4,修复当页记录条数为0时不执行afterRenderGridMethods系列方法的bug;
+5,增加grid属性ajaxType,默认post,可修改为get;
+6,增强分页工具条的按钮显示、最小宽度自定义;
+
+
+
+v1.36 2015-06-25 功能扩展、完善示例
+
+1,禁止拖动表头改变列宽时选中表头文本;
+2,修改表格渲染数据支持返回非最后一页数据行数不等于pageSize的异常情况,考虑的是集群大数据情况下数据可能不正常;
+3,定义了一个全局的alert方法$.bsgrid.alert(msg),方便被用于重写;
+4,grid.extend.js代码优化;
+5,修复Firefox下表头拖动bug,并优化拖动体验;
+6,表底聚合增加自定义聚合,示例:w_agg="custom,countXhMultId",custom表示自定义,逗号后面的表示自定义聚合函数;
+7,新增获取表格行Dom对象、行单元格Dom对象、列单元格Dom对象、单元格Dom对象、单元格Record值、select选择行索引的方法;
+8,表格在线编辑新增新增行、删除行方法;
+9,控制表体最小宽度不小于分页工具条宽度;
+10,新增获取checked行的index值的方法;
+11,新增获取所有记录值的方法;
+12,优化样式,逐步增加对响应式的支持;
+13,完善工具条宽度与grid宽度相同,支持改动grid宽度;
+14,grid增加search方法,即gridObj.search(params),params支持三种方式,
+ 一:'param1=val1¶m2=val2';二:{'param1': 'val1', 'param2': 'val2'};三、$('#searchForm').serializeArray();
+15,增加行选择及反选事件支持selectRowEvent、unselectRowEvent;
+16,增加对行、单元格、单元格编辑表单jQuery标准事件的支持,去掉getColumnAttr方法,增加getColumnModel方法;
+ columnModel属性:sortName, sortOrder, index, render, tip, maxLen, align, hidden
+ 扩展属性:lineNumber, check, edit, 扩展表底属性:aggName, aggIndex
+17,增加表格编辑的自定义编辑表单功能(extend.settings.gridEditConfigs);
+18,增加layui系列的laypage、laydate、layer演示;
+19,增加划过行变色rowHoverColor属性,默认false;
+20,完善示例、文档;
+21,修改属性名changeColorIfRowSelected为rowSelectedColor,默认值true有行背景色;
+
+
+
+v1.35 2015-04-28 性能优化、功能增强
+
+1,优化grid及grid.extend的性能(减少非配置必须的js执行,一千条数据加载速度快一倍多);
+2,options.otherParames支持String型参数串(示例:param1=val1¶m2=val2);
+3,local json、xml data数据增加分页功能,简化数据构造;
+
+
+
+v1.34 2015-02-05 功能增强
+
+1,grid增加userdata,对于json数据其值可以是一个简单的值或json Object或者json Array;
+ 对于json数据其值可以是一个简单的值或xml串;
+ 配置processUserdata以处理userdata,使用grid.getUserdata()获取userdata;
+2,增加动态表头示例,使用userdata进行简易的动态表头处理;
+3,修复表格渲染数据由使用$(cellValue).text().length == 0判断cellValue是否html字符串,cellValue是特别特殊情况造成js异常的bug;
+
+
+
+v1.33 2015-02-04 文档优化、示例优化、bug修复
+
+1,修复grid使用hover样式后分页时遮罩颜色异常问题;
+2,去掉grid.paging.little.css及grid.paging.little.js,简化为使用参数pagingLittleToolbar控制显示分页的little或正常样式;
+3,去掉html表格table的class="bsgrid"样式,改为使用jquery的addClass方法添加此样式,代码更简洁;
+4,优化皮肤样式;
+5,给grid的bootstrap皮肤增加little paging工具条图标按钮样式;
+6,修改grid表格初始化init时不能使用参数otherParames的bug;
+7,修复grid表格checkbox选中不联动的bug;
+8,添加底部分页工具条额外增加按钮示例paging.button.html及paging.little.button.html;
+9,grid增加配置参数lineWrap,默认false表示不换行且超长时显示省略号,设置为true超长则折行显示;
+10,扩展增加表格列属性w_num以用于显示行号,值为line、total_line,分别表示当前页的数据行号、所有记录的数据行号;
+11,修改表格渲染数据支持返回非最后一页数据行数不等于pageSize的异常情况;
+12,中文化主要的文档示例;
+13,修复配置参数pageSizeForGrid只能增加分页大小不能减少的bug;
+14,增加参数pageIncorrectTurnAlert以控制翻页翻尽时再点击按钮是否弹出提示框,默认true;
+15,简化示例,网站文档优化;
+
+
+
+v1.32 2015-01-22
+
+1,扩展(grid.extend)可拖动改变表头宽度;
+2,优化项目目录结构;
+3,完善grid的单元格tip展示,对于index有正确值且其value值不包括html标签元素,才计算其value长度并判断是否截断与tip展示;
+4,示例集成jquery.validationEngine.js例子演示;
+5,扩展(grid.extend)类似jqGrid的多字段选择查询效果;
+6,初步实现表格在线编辑功能;
+7,修正checked属性在jQuery1.6以后使用attr()方法的bug,改为1.6后使用prop()方法,提供工具方法$.bsgrid.adaptAttrOrProp(obj, prop, val);
+8,给grid提供属性changeColorIfRowSelected,以便于自定义选中行后是否变色,默认为true有行背景色;
+9,增加Pure Gray、jqGrid、EasyUI、Bootstrap风格表格皮肤;
+10,重大更新,完善表格生成为thead、tbody、tfoot结构;
+11,表格支持多行表头,渲染数据以表头的最后一行为准,另多行表头暂不支持列宽手动调整;
+12,表格支持表底,表底支持count、countNotNone、sum、avg、max、min、concat聚合;
+13,给分页工具条增加刷新按钮;
+14,支持多字段排序;
+15,扩展表格可设置参数固定表头,滚动表体数据(注意此特性对于IE仅支持IE8及以上,Chrome、Firefox等不限),支持多行表头,注意支持列合并不支持行合并;
+16,支持本地json、xml数据;
+
+
+
+v1.30 2014-12-05 定型版本
+
+定型说明:
+1,完全兼容1.21版本(第一次对外发布的版本);
+2,之前版本的Change Log未详细记录,本次统一归到当前版本V1.30中;
+
+版本概述:
+1,插件包括grid、paging、form、button四大模块,每个模块都可以单独使用,并有有两个工具js,util.js及export.js;
+2,插件放开了属性及方法的全局修改权限,所有方法都可在外部进行全局重写,而无需修改插件本身的代码;
+3,grid支持json、xml两种数据格式;
+ 支持分页或者不分页的数据展示,且非常容易集成第三方paging工具条一起使用;
+ 内置了多套皮肤,并且非常容易扩展,一个皮肤样式的未压缩CSS样式代码量不足40行;
+ 提供grid.extend扩展,推荐grid扩展接口使用方式,更方便扩展;
+ 支持友好的导出参数构建;
+ 自带load加载数据遮罩,并很容易进行扩展或重写;
+4,paging可单独使用,并可扩展或简化使用,且非常容易修改样式;
+ 提供分页循环往复属性,可做图片轮播效果,此配置属性loopback默认false;
+5,form提供简洁但非常实用的表单处理能力,并提供了较大的灵活空间;
+6,button仅提供按钮样式,可单独使用;
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/LICENSE b/public/static/admin_static/lib/jquery.bsgrid/LICENSE
new file mode 100644
index 0000000..ad410e1
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/LICENSE
@@ -0,0 +1,201 @@
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ 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.
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/README.md b/public/static/admin_static/lib/jquery.bsgrid/README.md
new file mode 100644
index 0000000..6444bfd
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/README.md
@@ -0,0 +1,38 @@
+jQuery.bsgrid - 简单实用、功能丰富、易扩展的jQuery Grid插件
+=======================================================
+
+jQuery.bsgrid ,支持json、xml数据格式,皮肤丰富并且容易定制,支持表格编辑、本地数据、导出参数构建等实用便捷的功能,容易扩展,更拥有丰富的示例以及问题反馈的及时响应。
+
+源码:[Github](https://github.com/baishui2004/jquery.bsgrid/) 演示:皮肤 示例 文档
+版本:1.38-preview 协议:Apache Licence 2 更新:2016-01-21
+依赖:jQuery 1.4.4 ~~ jQuery 1.12.2 支持:IE6+、Chrome、Firefox等
+
+QQ群交流:254754154 捐助:支持长远发展,感谢您的认可!
+
+### 皮肤效果 ###
+内置多套皮肤(点击图片查看示例页面),并可非常容易的定制皮肤[示例:Custom Blue Style ]
+
+
+### bsgrid的由来 ###
+ 首先,解释插件名称为何叫bsgrid,是因为作者常用bs开头的字符做英文账号的缘故。bsgrid的诞生因为主流插件、框架的grid使用或扩展比较复杂,而本插件作者力图开发一款使用简单、功能实用、容易扩展的grid控件,目前已初步实现此目标。
+
+### bsgrid的特点 ###
+ 1,简单、轻量,基于jQuery及HTML Table,简单的表格 只需数十行代码,支持大数据量表格 ;
+ 2,内置多套经典皮肤 ,且非常容易定制 ,字体定制只需要修改两处CSS代码即可;
+ 3,实用便捷的功能:表格编辑 、表底聚合 、不分页 、多行表头 、多字段排序 、本地数据 、处理Userdata 、拖动列宽 、滚动表格数据 等;
+ 4,易与其他插件集成使用,示例展示了集成Layui 、ArtDialog 、jquery.validationEngine 、第三方分页工具条等的使用;
+ 5,扩展性好,插件有特别好的扩展性,易于对插件本身进行局部甚至较大的修改,易于改变展现样式;插件放开了属性及方法的全局修改权限,所有方法都可在外部进行全局重写,而无需修改插件本身的代码;
+ 6,模块化JS、CSS代码,可按需加载,代码精致简洁,对于阅读、修改、扩展非常容易。
+
+### 关于主流Grid ###
+整体评论主流grid:
+ 1,比较适用于内部系统,对于外部系统适用而言,想要改变皮肤样式,字体大小等都非常困难;
+ 2,过度封装,造成了其扩展性能不是很好,并且其methods、properties很多,上手不容易;
+ 3,大多数不提供多行表头、表格聚合、不分页表格、本地数据等实用却强大的功能。
+
+分别评论几个主流grid,个人见解:
+ 1,ExtJS ,功能丰富,封装好,但属重量级产品,需要加载大体积文件,且响应速度较慢,需商业授权,一般用于内部系统;
+ 2,DHtmlx ,同样功能丰富,封装好,不过其可以根据所需要的模块进行加载,速度方面快于ExtJS,需商业授权,由于其样式不易修改,同样一般用于内部系统;
+ 3,EasyUI ,基于jQuery,语法使用jQuery,却部分地方像ExtJS的写法,在不需其源码的情况下无需商业授权,因无源码而不方便按需模块化加载,也很难改变皮肤样式;
+ 4,jQGrid ,基于jQuery,开源免费且功能特别强大,但同样其样式不易修改;
+ 5,Flexigrid ,基于jQuery,功能逊色,但轻量级,methods、properties较少,不失为想用ExtJS Grid或EasyUI Grid却难以上手这两者的另外一个选择。
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/form.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/form.min.css
new file mode 100644
index 0000000..7302104
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/form.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid_form{width:100%;font-size:13px;background-color:white}.bsgrid_form .formLabel{width:20%;color:#000;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bsgrid_form .formInput{width:80%;color:#333;text-align:left;overflow:auto}.bsgrid_form .formInput input,.bsgrid_form .formInput select,.bsgrid_form .formInput textarea,.bsgrid_form .formInput div.assist{width:64%;background-color:white}.bsgrid_form .formInput input{height:1.8em;line-height:1.8em;vertical-align:middle;padding-left:1px}.bsgrid_form .formInput textarea,.bsgrid_form .formInput div.assist{height:8em}.bsgrid_form .formInput div.assist{overflow:auto;word-wrap:break-word;word-break:break-all}.bsgrid_form .formInput .radio{width:20px}.bsgrid_form .formInput .checkbox{width:20px;text-align:left}.bsgrid_form .formInput .inputTip{margin-left:3px;color:#f18300;font-size:12px}.bsgrid_form .require{color:#f00;font-weight:bold;line-height:1.5em}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/grid.extend.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/grid.extend.min.css
new file mode 100644
index 0000000..2e94117
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/grid.extend.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid th .bsgrid_editgrid_check,.bsgrid td .bsgrid_editgrid_check{text-align:inherit}.bsgrid th .bsgrid_editgrid_checkbox,.bsgrid td .bsgrid_editgrid_checkbox{text-align:inherit}.bsgrid td .bsgrid_editgrid_edit{width:95%;text-align:inherit}.bsgrid td .bsgrid_editgrid_change{border-color:hotpink}.bsgrid td .bsgrid_editgrid_hidden{display:none}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/grid.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/grid.min.css
new file mode 100644
index 0000000..126a6b8
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/grid.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid{font-size:13px;font-family:'微软雅黑',Verdana,sans-serif,'宋体',serif}table.bsgrid{width:98%;margin-right:5px;border-collapse:collapse}.bsgrid th,.bsgrid td{padding:3px;border:solid 1px #ccc;background-color:white;text-align:center;color:#333;line-height:1.8em}.bsgrid td.lineWrap{word-break:break-all}.bsgrid td.lineNoWrap{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bsgrid th{font-weight:400;background:url(../images/skins/default/bg.gif) repeat-x #f4f4f4}.bsgrid tr.even_index_row td{background-color:#eef}.bsgrid tr.row_hover td{background-color:#fff1cc!important}.bsgrid tr.selected.selected_color td{background-color:#fff1cc!important}.bsgrid a{color:#f60;text-decoration:none}.bsgrid th .sort.sort-view{background:url(../images/sort-view.gif) no-repeat center;margin-left:3px}.bsgrid th .sort.sort-asc{background:url(../images/sort-asc.gif) no-repeat top;margin-left:3px}.bsgrid th .sort.sort-desc{background:url(../images/sort-desc.gif) no-repeat bottom;margin-left:3px}.bsgrid.lockscreen{position:fixed;z-index:2014;display:none;left:0;top:0;width:100%;height:100%;background:#000;filter:alpha(opacity=10);opacity:.1;-moz-opacity:.1}.bsgrid.loading_div{position:fixed;z-index:2015;display:none;left:0;top:0;width:100%;height:100%}.bsgrid.loading_div table{width:100%;height:100%}.bsgrid.loading_div td{width:100%;height:100%;background-color:transparent!important;text-align:center;vertical-align:middle}.bsgrid.loading_div td div{width:200px;padding-top:8px;padding-bottom:8px;color:#000;border:solid 1px #999;background-color:#fff}.bsgrid.loading{padding-left:5px;line-height:1.5em}.bsgrid.loading span{background:url("../images/loading.gif") no-repeat center}.bsgridPagingOutTab{width:98%;margin-right:5px;border-collapse:collapse;border:solid 1px #ccc;background-color:white;border-top-width:0}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/grid.paging.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/grid.paging.min.css
new file mode 100644
index 0000000..4f18850
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/grid.paging.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgridPaging{font-size:13px;font-family:'微软雅黑',Verdana,sans-serif,'宋体',serif;width:770px;border-collapse:collapse}.bsgridPaging.pagingLittleToolbar{width:550px}.bsgridPaging.noPageSizeSelect{width:650px}.bsgridPaging.pagingLittleToolbar.noPageSizeSelect{width:430px}.bsgridPaging td{text-align:center}.bsgridPaging select{font-size:inherit;width:auto;height:auto;padding:1px;margin:1px}.bsgridPaging .pagingBtn{cursor:pointer;border:solid 1px #ccc;background:url(../images/skins/default/bg.gif) repeat-x #f4f4f4;font-size:inherit;font-family:inherit;color:inherit;padding:1px 3px;margin:1px}.bsgridPaging.pagingLittleToolbar .pagingBtn{width:16px;border-width:0;background:transparent no-repeat;padding:0;margin:3px}.bsgridPaging .pagingBtn.disabledCls{color:#999;filter:alpha(opacity=50);opacity:.5;-moz-opacity:.5}.bsgridPaging.pagingLittleToolbar .pagingBtn.firstPage{background-image:url(../images/icons/paging/go-first-view.png)}.bsgridPaging.pagingLittleToolbar .pagingBtn.prevPage{background-image:url(../images/icons/paging/go-previous-view.png)}.bsgridPaging.pagingLittleToolbar .pagingBtn.nextPage{background-image:url(../images/icons/paging/go-next-view.png)}.bsgridPaging.pagingLittleToolbar .pagingBtn.lastPage{background-image:url(../images/icons/paging/go-last-view.png)}.bsgridPaging .gotoPageInputTd{width:44px}.bsgridPaging .gotoPageInput{width:40px;height:auto;font-size:inherit;line-height:1em;color:inherit;border:solid 1px #ccc;padding:1px;margin:1px}.bsgridPaging .gotoPageButtonTd{text-align:left}.bsgridPaging .refreshPageTd{text-align:right;padding-right:4px}.bsgridPaging.pagingLittleToolbar .pagingBtn.gotoPage{background-image:url(../images/icons/paging/go-jump-2.png)}.bsgridPaging.pagingLittleToolbar .pagingBtn.refreshPage{background-image:url(../images/icons/paging/view-refresh-3.png)}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/icon.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/icon.min.css
new file mode 100644
index 0000000..1421017
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/icon.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid_icon{cursor:pointer;font-family:'微软雅黑',Verdana,sans-serif,'宋体',serif;font-size:12px;line-height:1.5em;color:#b22222;background:no-repeat 3px center}a.bsgrid_icon{padding-left:20px;text-decoration:underline}input.bsgrid_icon,button.bsgrid_icon{padding-left:20px;padding-right:4px;background-color:#d5e2f2;border:solid 1px #99bbe8;width:auto;overflow:visible}.icon_view{background-image:url(../images/icons/view-list-details-5.png)}.icon_add{background-image:url(../images/icons/list-add-6.png)}.icon_edit{background-image:url(../images/icons/page-edit.png)}.icon_save{background-image:url(../images/icons/document-save-6.png)}.icon_delete{background-image:url(../images/icons/edit-delete-6.png)}.icon_delete2{background-image:url(../images/icons/edit-delete-7.png)}.icon_close{background-image:url(../images/icons/window-close-4.png)}.icon_close2{background-image:url(../images/icons/window-close.png)}.icon_find{background-image:url(../images/icons/edit-find-8.png)}.icon_search{background-image:url(../images/icons/system-search-6.png)}.icon_refresh{background-image:url(../images/icons/arrow-refresh.png)}.icon_sort-view{background-image:url(../images/icons/sort-view.gif)}.icon_sort-asc{background-image:url(../images/icons/view-sort-descending-2.png)}.icon_sort-desc{background-image:url(../images/icons/view-sort-ascending-2.png)}.icon_copy{background-image:url(../images/icons/edit-copy-7.png)}.icon_cut{background-image:url(../images/icons/edit-cut-7.png)}.icon_paste{background-image:url(../images/icons/edit-paste-7.png)}.icon_download{background-image:url(../images/icons/download.png)}.icon_print{background-image:url(../images/icons/document-print-2.png)}.icon_mail{background-image:url(../images/icons/mail-generic.png)}.icon_accept{background-image:url(../images/icons/dialog-accept-2.png)}.icon_flag{background-image:url(../images/icons/flag.png)}.icon_about{background-image:url(../images/icons/help-about-3.png)}.icon_help{background-image:url(../images/icons/help.png)}.icon_documentation{background-image:url(../images/icons/documentation.png)}.icon_config{background-image:url(../images/icons/configure-2.png)}.icon_config2{background-image:url(../images/icons/system-config-boot.png)}.icon_text{background-image:url(../images/icons/mimetypes/silk_style/page-white_text.png)}.icon_pdf{background-image:url(../images/icons/mimetypes/silk_style/page-white_acrobat.png)}.icon_excel{background-image:url(../images/icons/mimetypes/silk_style/page-white_excel.png)}.icon_word{background-image:url(../images/icons/mimetypes/silk_style/page-white_word.png)}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_access.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_access.min.css
new file mode 100644
index 0000000..373acd5
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_access.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid th,.bsgrid td{border-color:#18181a;background-color:#232d38;color:white}.bsgrid th{background-image:url(../../images/skins/access/bg.gif)}.bsgrid tr.even_index_row td{background-color:#1a232b}.bsgrid tr.row_hover td{background-color:#e48627!important}.bsgrid tr.selected.selected_color td{background-color:#e48627!important}.bsgridPagingOutTab{border-color:#18181a;background-color:#232d38}.bsgridPaging{color:white}.bsgridPaging .pagingBtn{background-image:url(../../images/skins/access/bg.gif);border-color:#18181a}.bsgridPaging .gotoPageInput{border-color:#18181a;color:black}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_blue.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_blue.min.css
new file mode 100644
index 0000000..bd467a4
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_blue.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid th,.bsgrid td{border-color:#99bce8;background-color:white;color:black}.bsgrid th{background-image:url(../../images/skins/blue/bg.gif)}.bsgrid tr.even_index_row td{background-color:#fafafa}.bsgrid tr.row_hover td{background-color:#dfe8f6!important}.bsgrid tr.selected.selected_color td{background-color:#dfe8f6!important}.bsgridPagingOutTab{border-color:#99bce8;background-color:white}.bsgridPaging{color:black}.bsgridPaging .pagingBtn{background-image:url(../../images/skins/blue/bg.gif);border-color:#99bce8}.bsgridPaging .gotoPageInput{border-color:#99bce8}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_bootstrap.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_bootstrap.min.css
new file mode 100644
index 0000000..a1908e0
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_bootstrap.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid{font-size:12px;border:1px solid #ccc}.bsgrid th,.bsgrid td{padding:2px;border:1px dotted #ccc;background-color:white;color:black}.bsgrid th{background-image:none;background-color:#f2f2f2;background:-webkit-linear-gradient(top,#fff 0,#f2f2f2 100%);background:-moz-linear-gradient(top,#fff 0,#f2f2f2 100%);background:-o-linear-gradient(top,#fff 0,#f2f2f2 100%);background:linear-gradient(to bottom,#fff 0,#f2f2f2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0)}.bsgrid tr.even_index_row td{background-color:#f5f5f5}.bsgrid tr.row_hover td{background-color:#0092dc!important}.bsgrid tr.selected.selected_color td{background-color:#0092dc!important}.bsgridPagingOutTab{border-color:#ccc;background-color:white}.bsgridPaging{font-size:12px;color:black}.bsgridPaging .pagingBtn{border-color:#ccc;background-image:none;background-color:#f2f2f2;background:-webkit-linear-gradient(top,#fff 0,#f2f2f2 100%);background:-moz-linear-gradient(top,#fff 0,#f2f2f2 100%);background:-o-linear-gradient(top,#fff 0,#f2f2f2 100%);background:linear-gradient(to bottom,#fff 0,#f2f2f2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0)}.bsgridPaging.pagingLittleToolbar .pagingBtn{background:url(../../images/skins/bootstrap/glyphicons-halflings.png) transparent no-repeat!important}.bsgridPaging.pagingLittleToolbar .pagingBtn.firstPage{background-position:-191px -70px!important}.bsgridPaging.pagingLittleToolbar .pagingBtn.prevPage{background-position:-431px -70px!important}.bsgridPaging.pagingLittleToolbar .pagingBtn.nextPage{background-position:-455px -70px!important}.bsgridPaging.pagingLittleToolbar .pagingBtn.lastPage{background-position:-384px -70px!important}.bsgridPaging .gotoPageInput{border-color:#ccc}.bsgridPaging.pagingLittleToolbar .pagingBtn.gotoPage{background-position:-263px -93px!important}.bsgridPaging.pagingLittleToolbar .pagingBtn.refreshPage{background-position:-239px -21px!important}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_easyui.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_easyui.min.css
new file mode 100644
index 0000000..18688e4
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_easyui.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid{font-size:12px}.bsgrid th,.bsgrid td{padding:2px;border:1px dotted #ccc;background-color:white;color:black}.bsgrid th{border-style:solid;background-image:url(../../images/skins/easyui/bg.gif)}.bsgrid tr.even_index_row td{background-color:#fafafa}.bsgrid tr.row_hover td{background-color:#0092dc!important}.bsgrid tr.selected.selected_color td{background-color:#0092dc!important}.bsgridPagingOutTab{border-color:#ccc;background-color:white}.bsgridPaging{font-size:12px;color:black}.bsgridPaging .pagingBtn{background:none white;border-color:#ccc}.bsgridPaging.pagingLittleToolbar .pagingBtn{background:none transparent no-repeat}.bsgridPaging.pagingLittleToolbar .pagingBtn.firstPage{background-image:url(../../images/skins/easyui/pagination_first.gif)}.bsgridPaging.pagingLittleToolbar .pagingBtn.prevPage{background-image:url(../../images/skins/easyui/pagination_prev.gif)}.bsgridPaging.pagingLittleToolbar .pagingBtn.nextPage{background-image:url(../../images/skins/easyui/pagination_next.gif)}.bsgridPaging.pagingLittleToolbar .pagingBtn.lastPage{background-image:url(../../images/skins/easyui/pagination_last.gif)}.bsgridPaging .gotoPageInput{border-color:#ccc}.bsgridPaging.pagingLittleToolbar .pagingBtn.gotoPage{background-image:url(../../images/skins/easyui/layout_button_right.gif)}.bsgridPaging.pagingLittleToolbar .pagingBtn.refreshPage{background-image:url(../../images/skins/easyui/pagination_load.png)}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_flexigrid.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_flexigrid.min.css
new file mode 100644
index 0000000..bccdd08
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_flexigrid.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid th,.bsgrid td{border-color:#ccc;background-color:white;color:black}.bsgrid th{background-image:url(../../images/skins/flexigrid/bg.gif)}.bsgrid tr.even_index_row td{background-color:#f7f7f7}.bsgrid tr.row_hover td{background-color:#d5effc!important}.bsgrid tr.selected.selected_color td{background-color:#d5effc!important}.bsgridPagingOutTab{border-color:#ccc;background-color:white}.bsgridPaging{color:black}.bsgridPaging .pagingBtn{background-image:url(../../images/skins/flexigrid/bg.gif);border-color:#ccc}.bsgridPaging .gotoPageInput{border-color:#ccc}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_gray.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_gray.min.css
new file mode 100644
index 0000000..50415ef
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_gray.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid th,.bsgrid td{border-color:#d0d0d0;background-color:white;color:black}.bsgrid th{background-image:url(../../images/skins/gray/bg.gif)}.bsgrid tr.even_index_row td{background-color:#fafafa}.bsgrid tr.row_hover td{background-color:#e0e0e0!important}.bsgrid tr.selected.selected_color td{background-color:#e0e0e0!important}.bsgridPagingOutTab{border-color:#d0d0d0;background-color:white}.bsgridPaging{color:black}.bsgridPaging .pagingBtn{background-image:url(../../images/skins/gray/bg.gif);border-color:#d0d0d0}.bsgridPaging .gotoPageInput{border-color:#d0d0d0}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_jqgrid.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_jqgrid.min.css
new file mode 100644
index 0000000..c419106
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_jqgrid.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid{font-size:11px}.bsgrid th,.bsgrid td{padding:2px;border-color:#a6c9e2;background-color:#fcfdfd;color:black}.bsgrid th{background:#dfeffc url(../../images/skins/jqgrid/ui-bg_glass_1x400.png);color:#2e6e9e}.bsgrid tr.even_index_row td{background-color:#fcfdfd}.bsgrid tr.row_hover td{background-color:#fbec88!important}.bsgrid tr.selected.selected_color td{background-color:#fbec88!important}.bsgridPagingOutTab{border-color:#a6c9e2;background-color:white}.bsgridPaging{font-size:11px;color:black}.bsgridPaging .pagingBtn{background:none #fcfdfd;border-color:#a6c9e2}.bsgridPaging.pagingLittleToolbar .pagingBtn{background:url(../../images/skins/jqgrid/ui-icons_256x240.png) transparent no-repeat!important}.bsgridPaging.pagingLittleToolbar .pagingBtn.firstPage{background-position:-80px -161px!important}.bsgridPaging.pagingLittleToolbar .pagingBtn.prevPage{background-position:-48px -161px!important}.bsgridPaging.pagingLittleToolbar .pagingBtn.nextPage{background-position:-32px -161px!important}.bsgridPaging.pagingLittleToolbar .pagingBtn.lastPage{background-position:-64px -161px!important}.bsgridPaging .gotoPageInput{border-color:#a6c9e2}.bsgridPaging.pagingLittleToolbar .pagingBtn.gotoPage{background-position:-48px -193px!important}.bsgridPaging.pagingLittleToolbar .pagingBtn.refreshPage{background-position:-64px -82px!important}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_pure_gray.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_pure_gray.min.css
new file mode 100644
index 0000000..f25083b
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_pure_gray.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid th,.bsgrid td{border-color:black;background-color:white;color:black}.bsgrid th{background:#bbb none}.bsgrid tr.even_index_row td{background-color:#f8f8f8}.bsgrid tr.row_hover td{background-color:#ddd!important}.bsgrid tr.selected.selected_color td{background-color:#ddd!important}.bsgridPagingOutTab{border-color:black;background-color:white}.bsgridPaging{color:black}.bsgridPaging .pagingBtn{background:#bbb none;border-color:black}.bsgridPaging .gotoPageInput{border-color:black}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_sky_blue.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_sky_blue.min.css
new file mode 100644
index 0000000..47653d6
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/css/skins/grid_sky_blue.min.css
@@ -0,0 +1 @@
+@CHARSET "UTF-8";.bsgrid th,.bsgrid td{border-color:#a4bed4;background-color:white;color:black}.bsgrid th{background-image:url(../../images/skins/sky_blue/bg.gif)}.bsgrid tr.even_index_row td{background-color:#e3efff}.bsgrid tr.row_hover td{background-color:#fff1cc!important}.bsgrid tr.selected.selected_color td{background-color:#fff1cc!important}.bsgridPagingOutTab{border-color:#a4bed4;background-color:white}.bsgridPaging{color:black}.bsgridPaging .pagingBtn{background-image:url(../../images/skins/sky_blue/bg.gif);border-color:#a4bed4}.bsgridPaging .gotoPageInput{border-color:#a4bed4}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/arrow-refresh.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/arrow-refresh.png
new file mode 100644
index 0000000..98698a7
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/arrow-refresh.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/configure-2.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/configure-2.png
new file mode 100644
index 0000000..bf3fa13
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/configure-2.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/dialog-accept-2.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/dialog-accept-2.png
new file mode 100644
index 0000000..ab7c378
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/dialog-accept-2.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/document-print-2.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/document-print-2.png
new file mode 100644
index 0000000..e5966fa
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/document-print-2.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/document-save-6.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/document-save-6.png
new file mode 100644
index 0000000..7229bb4
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/document-save-6.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/documentation.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/documentation.png
new file mode 100644
index 0000000..085dcb5
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/documentation.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/download.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/download.png
new file mode 100644
index 0000000..14c7839
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/download.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-copy-7.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-copy-7.png
new file mode 100644
index 0000000..d2f21bd
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-copy-7.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-cut-7.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-cut-7.png
new file mode 100644
index 0000000..7bc9da1
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-cut-7.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-delete-6.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-delete-6.png
new file mode 100644
index 0000000..c7a62b0
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-delete-6.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-delete-7.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-delete-7.png
new file mode 100644
index 0000000..edf577c
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-delete-7.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-find-8.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-find-8.png
new file mode 100644
index 0000000..4540a46
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-find-8.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-paste-7.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-paste-7.png
new file mode 100644
index 0000000..46b1b97
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/edit-paste-7.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/flag.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/flag.png
new file mode 100644
index 0000000..ad7c398
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/flag.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/help-about-3.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/help-about-3.png
new file mode 100644
index 0000000..b5146df
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/help-about-3.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/help.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/help.png
new file mode 100644
index 0000000..e6edf6b
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/help.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/list-add-6.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/list-add-6.png
new file mode 100644
index 0000000..c781e7d
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/list-add-6.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mail-generic.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mail-generic.png
new file mode 100644
index 0000000..757f9e0
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mail-generic.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/page-white_acrobat.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/page-white_acrobat.png
new file mode 100644
index 0000000..d32ee90
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/page-white_acrobat.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/page-white_excel.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/page-white_excel.png
new file mode 100644
index 0000000..b9dd756
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/page-white_excel.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/page-white_text.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/page-white_text.png
new file mode 100644
index 0000000..dba942a
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/page-white_text.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/page-white_word.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/page-white_word.png
new file mode 100644
index 0000000..5c29ec3
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/page-white_word.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/readme b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/readme
new file mode 100644
index 0000000..0315ac7
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/mimetypes/silk_style/readme
@@ -0,0 +1,8 @@
+From: open_icon_library png 16x16
+ path: open_icon_library-full/icons/png/16*16/mimetypes/silk_style/
+
+page-white_acrobat.png
+page-white_excel.png
+page-white_text.png
+page-white_word.png
+
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/page-edit.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/page-edit.png
new file mode 100644
index 0000000..8ac0709
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/page-edit.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-first-view.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-first-view.png
new file mode 100644
index 0000000..11afd0c
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-first-view.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-jump-2.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-jump-2.png
new file mode 100644
index 0000000..934d4c8
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-jump-2.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-last-view.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-last-view.png
new file mode 100644
index 0000000..26119f9
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-last-view.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-next-view.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-next-view.png
new file mode 100644
index 0000000..61909de
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-next-view.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-previous-view.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-previous-view.png
new file mode 100644
index 0000000..d167fe2
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/go-previous-view.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/readme b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/readme
new file mode 100644
index 0000000..b8d1301
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/readme
@@ -0,0 +1,12 @@
+From: open_icon_library png 16x16
+ path: open_icon_library-full/icons/png/16*16/actions
+
+go-first-view.png
+go-jump-2.png
+go-last-view.png
+go-next-view.png
+go-previous-view.png
+view-refresh-3.png
+
+
+There is many others go-*.png in open_icon_library-full/icons/png/16*16/actions.
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/view-refresh-3.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/view-refresh-3.png
new file mode 100644
index 0000000..218335c
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/paging/view-refresh-3.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/readme b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/readme
new file mode 100644
index 0000000..eab506e
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/readme
@@ -0,0 +1,40 @@
+From: open_icon_library png 16x16
+ path: open_icon_library-full/icons/png/16*16/actions
+
+help-about-3.png
+dialog-accept-2.png
+list-add-6.png
+edit-copy-7.png
+edit-cut-7.png
+edit-delete-6.png
+edit-delete-7.png
+documentation.png
+download.png
+page-edit.png
+edit-find-8.png
+flag.png
+help.png
+mail-generic.png
+edit-paste-7.png
+document-print-2.png
+arrow-refresh.png
+document-save-6.png
+system-search-6.png
+view-sort-descending-2.png
+view-sort-ascending-2.png
+view-list-details-5.png
+window-close.png
+window-close-4.png
+configure-2.png
+
+
+sort-view.gif merge view-sort-descending-2.png and view-sort-ascending-2.png by GIMP
+
+
+
+
+
+From: open_icon_library png 16x16
+ path: open_icon_library-full/icons/png/16*16/apps
+
+system-config-boot.png
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/sort-view.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/sort-view.gif
new file mode 100644
index 0000000..24f3351
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/sort-view.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/system-config-boot.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/system-config-boot.png
new file mode 100644
index 0000000..a19ff14
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/system-config-boot.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/system-search-6.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/system-search-6.png
new file mode 100644
index 0000000..0c81b2b
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/system-search-6.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/view-list-details-5.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/view-list-details-5.png
new file mode 100644
index 0000000..41993c2
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/view-list-details-5.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/view-sort-ascending-2.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/view-sort-ascending-2.png
new file mode 100644
index 0000000..fd3902c
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/view-sort-ascending-2.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/view-sort-descending-2.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/view-sort-descending-2.png
new file mode 100644
index 0000000..5719160
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/view-sort-descending-2.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/window-close-4.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/window-close-4.png
new file mode 100644
index 0000000..3ed0ec4
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/window-close-4.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/window-close.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/window-close.png
new file mode 100644
index 0000000..2a6bb9f
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/icons/window-close.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/loading.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/loading.gif
new file mode 100644
index 0000000..e8c2892
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/loading.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/access/bg.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/access/bg.gif
new file mode 100644
index 0000000..cfa964d
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/access/bg.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/access/readme b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/access/readme
new file mode 100644
index 0000000..398cb24
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/access/readme
@@ -0,0 +1,2 @@
+Image From
+bg.gif ExtJS: ext-3.4.0\resources\images\access\toolbar\bg.gif modify by GIMP
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/blue/bg.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/blue/bg.gif
new file mode 100644
index 0000000..4fe9fa0
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/blue/bg.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/blue/readme b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/blue/readme
new file mode 100644
index 0000000..334c9f0
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/blue/readme
@@ -0,0 +1,2 @@
+Image From
+bg.gif ExtJS: ext-3.4.0\resources\images\default\toolbar\bg.gif modify by GIMP
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/bootstrap/glyphicons-halflings.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/bootstrap/glyphicons-halflings.png
new file mode 100644
index 0000000..a996999
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/bootstrap/glyphicons-halflings.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/bootstrap/readme b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/bootstrap/readme
new file mode 100644
index 0000000..b6f8141
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/bootstrap/readme
@@ -0,0 +1 @@
+From: bootstrap-2.3.2-dist.zip/bootstrap/img/glyphicons-halflings.png
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/default/bg.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/default/bg.gif
new file mode 100644
index 0000000..6d17560
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/default/bg.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/bg.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/bg.gif
new file mode 100644
index 0000000..275b0b0
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/bg.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/layout_button_right.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/layout_button_right.gif
new file mode 100644
index 0000000..99ff1da
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/layout_button_right.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_first.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_first.gif
new file mode 100644
index 0000000..d84f41a
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_first.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_last.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_last.gif
new file mode 100644
index 0000000..3df5c2b
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_last.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_load.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_load.png
new file mode 100644
index 0000000..d65defb
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_load.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_next.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_next.gif
new file mode 100644
index 0000000..9601635
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_next.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_prev.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_prev.gif
new file mode 100644
index 0000000..eb70cf8
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/pagination_prev.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/readme b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/readme
new file mode 100644
index 0000000..62e232c
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/easyui/readme
@@ -0,0 +1,10 @@
+From: EasyUI 1.2.6
+ path: jquery-easyui-1.2.6.zip/themes/gray/images/
+
+bg.gif datagrid_header_bg.gif modify by GIMP
+layout_button_right.gif
+pagination_first.gif
+pagination_last.gif
+pagination_next.gif
+pagination_prev.gif
+pagination_load.png
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/flexigrid/bg.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/flexigrid/bg.gif
new file mode 100644
index 0000000..8d74bac
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/flexigrid/bg.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/flexigrid/readme b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/flexigrid/readme
new file mode 100644
index 0000000..f2a0b66
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/flexigrid/readme
@@ -0,0 +1,2 @@
+Image From
+bg.gif Flexigrid: flexigrid-1.1\css\images\bg.gif modify by GIMP
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/gray/bg.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/gray/bg.gif
new file mode 100644
index 0000000..7e19bed
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/gray/bg.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/gray/readme b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/gray/readme
new file mode 100644
index 0000000..7b9db19
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/gray/readme
@@ -0,0 +1,2 @@
+Image From
+bg.gif ExtJS: ext-3.4.0\resources\images\gray\toolbar\bg.gif modify by GIMP
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/jqgrid/readme b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/jqgrid/readme
new file mode 100644
index 0000000..c90ccee
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/jqgrid/readme
@@ -0,0 +1,5 @@
+From: jQuery UI 1.8.2
+ path: jquery-ui-1.8.20.custom.zip\css\custom-theme\jquery-ui-1.8.2.custom.css
+
+ui-icons_256x240.png ui-icons_******_256x240.png
+ui-bg_glass_1x400.png ui-bg_glass_**_******_1x400.png
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/jqgrid/ui-bg_glass_1x400.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/jqgrid/ui-bg_glass_1x400.png
new file mode 100644
index 0000000..0149515
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/jqgrid/ui-bg_glass_1x400.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/jqgrid/ui-icons_256x240.png b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/jqgrid/ui-icons_256x240.png
new file mode 100644
index 0000000..9f3eafa
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/jqgrid/ui-icons_256x240.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/sky_blue/bg.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/sky_blue/bg.gif
new file mode 100644
index 0000000..eacaa2b
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/sky_blue/bg.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/sky_blue/readme b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/sky_blue/readme
new file mode 100644
index 0000000..73fa8a9
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/images/skins/sky_blue/readme
@@ -0,0 +1,2 @@
+Image From
+bg.gif Dhtmlx: Dhtmlx Edition 3.0\dhtmlxGrid\codebase\imgs\sky_blue_grid.gif modify by GIMP
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/sort-asc.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/sort-asc.gif
new file mode 100644
index 0000000..6dac09e
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/sort-asc.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/sort-desc.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/sort-desc.gif
new file mode 100644
index 0000000..6400a46
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/sort-desc.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/sort-view.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/sort-view.gif
new file mode 100644
index 0000000..e3902c3
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/sort-view.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/images/white.gif b/public/static/admin_static/lib/jquery.bsgrid/builds/images/white.gif
new file mode 100644
index 0000000..567b917
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/builds/images/white.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/js/common.min.js b/public/static/admin_static/lib/jquery.bsgrid/builds/js/common.min.js
new file mode 100644
index 0000000..c81fff3
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/js/common.min.js
@@ -0,0 +1,6 @@
+/**
+* jQuery.bsgrid v1.38 by @Baishui2004
+* Copyright 2014 Apache v2 License
+* https://github.com/baishui2004/jquery.bsgrid
+*/
+String.prototype.startWith=function(a){if(a==null||a==""||this.length==0||a.length>this.length){return false}else{return this.substr(0,a.length)==a}};String.prototype.endWith=function(a){if(a==null||a==""||this.length==0||a.length>this.length){return false}else{return this.substring(this.length-a.length)==a}};String.prototype.replaceAll=function(a,b){return this.replace(new RegExp(a,"gm"),b)};function StringBuilder(){if(arguments.length){this.append.apply(this,arguments)}}StringBuilder.prototype=function(){var c=Array.prototype.join,d=Array.prototype.slice,a=/\{(\d+)\}/g,b=function(){return c.call(this,"")};return{constructor:StringBuilder,length:0,append:Array.prototype.push,appendFormat:function(e){var g=0,f=d.call(arguments,1);this.append(a.test(e)?e.replace(a,function(h,j){return f[j]}):e.replace(/\?/g,function(){return f[g++]}));return this},size:function(){return this.toString().length},toString:b,valueOf:b}}();
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/js/export.min.js b/public/static/admin_static/lib/jquery.bsgrid/builds/js/export.min.js
new file mode 100644
index 0000000..0552936
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/js/export.min.js
@@ -0,0 +1,6 @@
+/**
+* jQuery.bsgrid v1.38 by @Baishui2004
+* Copyright 2014 Apache v2 License
+* https://github.com/baishui2004/jquery.bsgrid
+*/
+(function(a){a.bsgrid_export={defaults:{url:"",exportFileName:"export",colsProperties:{width:100,align:"center",exportAttr:"w_export",indexAttr:"w_index",widthAttr:"width",alignAttr:"w_align"},colWidthPercentmultiplier:14,requestParamsName:{exportFileName:"exportFileName",colNames:"dataNames",colIndexs:"dataIndexs",colWidths:"dataLengths",colAligns:"dataAligns"}},doExport:function(h,o,d){if(o==undefined){o={}}var c={};if(d==undefined){d={}}a.extend(true,c,a.bsgrid_export.defaults,d);var n="",g="",m="",j="";for(var f=0;f ');var d=a(this).get(0).attributes;for(var e=0;e')})},showForm:function(b,c){b.formType=c;this.showOrHideRequireSpan(b,c);this.showOrHideAssistForms(b,c);this.showOrHideTag(b,c);if(c.startWith("view")){a(".formInput :input:not(:button,:submit,:reset)",b.jqueryObj).css({"border-width":"0"}).attr("readOnly","readOnly")}else{if(c.startWith("add")){a(".formInput :input:not(:button,:submit,:reset)",b.jqueryObj).css({border:"solid 1px #abadb3"}).removeAttr("readOnly")}else{if(c.startWith("edit")){a(".formInput :input:not(:button,:submit,:reset)",b.jqueryObj).css({border:"solid 1px #abadb3"}).removeAttr("readOnly");a(".formInput :input["+c+"Able=false]",b.jqueryObj).css({"border-width":"0"}).attr("readOnly","readOnly")}}}},showOrHideRequireSpan:function(b,c){if(c.startWith("view")){a(".formLabel span.require",b.jqueryObj).hide()}else{if(c.startWith("edit")){a(".formLabel:has(span.require) ~ .formInput:has(:input["+c+"Able=false])",b.jqueryObj).prev().find("span.require").hide()}else{a(".formLabel span.require",b.jqueryObj).show()}}},showOrHideAssistForms:function(b,c){a(".formInput select",b.jqueryObj).each(function(){var e=(c.startWith("view")||(c.startWith("edit")&&a(this).attr(c+"Able")=="false"))?"block":"none";a(this).prev("input").css("display",e).val(a(this).find("option:selected").text());var d=e=="block"?"none":"block";a(this).css("display",d)});a(".formInput textarea",b.jqueryObj).each(function(){var e=(c.startWith("view")||(c.startWith("edit")&&a(this).attr(c+"Able")=="false"))?"block":"none";a(this).prev("div").css("display",e).html(a(this).val());var d=e=="block"?"none":"block";a(this).css("display",d)})},showOrHideTag:function(b,c){a("*",b.jqueryObj).each(function(){var d=a.trim(a(this).attr("showType"));if(d!=""){if((c.startWith("view")||c.startWith("add")||c.startWith("edit"))&&(","+d+",").indexOf(","+c+",")>-1){a(this).show()}else{a(this).hide()}}})}}})(jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/js/grid.extend.min.js b/public/static/admin_static/lib/jquery.bsgrid/builds/js/grid.extend.min.js
new file mode 100644
index 0000000..b134525
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/js/grid.extend.min.js
@@ -0,0 +1,6 @@
+/**
+* jQuery.bsgrid v1.38 by @Baishui2004
+* Copyright 2014 Apache v2 License
+* https://github.com/baishui2004/jquery.bsgrid
+*/
+(function($){$.fn.bsgrid.defaults.extend.settings={supportGridEdit:false,supportGridEditTriggerEvent:"rowClick",supportColumnMove:false,searchConditionsContainerId:"",fixedGridHeader:false,fixedGridHeight:"320px",gridEditConfigs:{text:{build:function(edit,value,record,rowIndex,colIndex,tdObj,trObj,options){return value+' '},val:function(formObj){return formObj.val()}},checkbox:{build:function(edit,value,record,rowIndex,colIndex,tdObj,trObj,options){return value+' '},val:function(formObj){return formObj.val()}},textarea:{build:function(edit,value,record,rowIndex,colIndex,tdObj,trObj,options){return value+'"},val:function(formObj){return formObj.val()}}}};$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.hidden=$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.text;$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.password=$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.text;$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.radio=$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.text;$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.button=$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.text;$.extend(true,$.fn.bsgrid.defaults.colsProperties,{lineNumberAttr:"w_num",checkAttr:"w_check",editAttr:"w_edit",aggAttr:"w_agg"});$.fn.bsgrid.defaults.event.customCellEditEvents={};$.fn.bsgrid.extendInitGrid={};$.fn.bsgrid.extendBeforeRenderGrid={};$.fn.bsgrid.extendRenderPerRow={};$.fn.bsgrid.extendRenderPerColumn={};$.fn.bsgrid.extendAfterRenderGrid={};$.fn.bsgrid.extendOtherMethods={};$.fn.bsgrid.extendInitGrid.initGridExtendOptions=function(gridId,options){var columnsModel=options.columnsModel;var colsProperties=options.settings.colsProperties;$.fn.bsgrid.getGridHeaderObject(options).each(function(i){columnsModel[i].lineNumber=$.trim($(this).attr(colsProperties.lineNumberAttr));columnsModel[i].check=$.trim($(this).attr(colsProperties.checkAttr));columnsModel[i].edit=$.trim($(this).attr(colsProperties.editAttr))});if($("#"+options.gridId+" tfoot tr td["+colsProperties.aggAttr+"!='']").length!=0){$("#"+options.gridId+" tfoot tr td").each(function(i){columnsModel[i].aggName="";columnsModel[i].aggIndex="";var aggInfo=$.trim($(this).attr(colsProperties.aggAttr));if(aggInfo.length!=0){var aggInfoArray=aggInfo.split(",");columnsModel[i].aggName=aggInfoArray[0].toLocaleLowerCase();columnsModel[i].aggIndex=aggInfoArray.length>1?aggInfoArray[1]:""}})}if($.fn.bsgrid.getGridHeaderObject(options).filter("["+colsProperties.lineNumberAttr+"$='line']").length!=0){options.settings.extend.afterRenderGridMethods.renderLineNumber=$.fn.bsgrid.extendAfterRenderGrid.renderLineNumber}if($.fn.bsgrid.getGridHeaderObject(options).filter("["+colsProperties.checkAttr+"='true']").length!=0){options.settings.extend.initGridMethods.initGridCheck=$.fn.bsgrid.extendInitGrid.initGridCheck;options.settings.extend.renderPerColumnMethods.renderCheck=$.fn.bsgrid.extendRenderPerColumn.renderCheck;options.settings.extend.afterRenderGridMethods.addCheckChangedEvent=$.fn.bsgrid.extendAfterRenderGrid.addCheckChangedEvent}if(options.settings.extend.settings.supportGridEdit){options.settings.extend.renderPerColumnMethods.renderForm=$.fn.bsgrid.extendRenderPerColumn.renderForm;options.settings.extend.afterRenderGridMethods.addGridEditEvent=$.fn.bsgrid.extendAfterRenderGrid.addGridEditEvent;options.settings.extend.afterRenderGridMethods.setOptionsFirstRowClone=$.fn.bsgrid.extendAfterRenderGrid.setOptionsFirstRowClone;var gridObj=$.fn.bsgrid.getGridObj(gridId);gridObj.activeGridEditMode=function(){return $.fn.bsgrid.defaults.extend.activeGridEditMode(options)};gridObj.getChangedRowsIndexs=function(){return $.fn.bsgrid.defaults.extend.getChangedRowsIndexs(options)};gridObj.getChangedRowsOldRecords=function(){return $.fn.bsgrid.defaults.extend.getChangedRowsOldRecords(options)};gridObj.getRowsChangedColumnsValue=function(){return $.fn.bsgrid.defaults.extend.getRowsChangedColumnsValue(options)};gridObj.deleteRow=function(row){$.fn.bsgrid.defaults.extend.deleteRow(row,options)};gridObj.addNewEditRow=function(){$.fn.bsgrid.defaults.extend.addNewEditRow(options)}}if(options.settings.extend.settings.supportColumnMove){options.settings.extend.initGridMethods.initColumnMove=$.fn.bsgrid.extendInitGrid.initColumnMove}if(options.settings.extend.settings.fixedGridHeader){options.settings.extend.initGridMethods.initFixedHeader=$.fn.bsgrid.extendOtherMethods.initFixedHeader;options.settings.extend.afterRenderGridMethods.fixedHeader=function(parseSuccess,gridData,options){$.fn.bsgrid.extendOtherMethods.fixedHeader(false,options)}}if($.trim(options.settings.extend.settings.searchConditionsContainerId)!=""){options.settings.extend.initGridMethods.initSearchConditions=$.fn.bsgrid.extendInitGrid.initSearchConditions}if($("#"+options.gridId+" tfoot td["+colsProperties.aggAttr+"!='']").length!=0){options.settings.extend.afterRenderGridMethods.aggregation=$.fn.bsgrid.extendAfterRenderGrid.aggregation}};$.fn.bsgrid.extendInitGrid.initGridCheck=function(gridId,options){$.fn.bsgrid.getGridHeaderObject(options).each(function(hi){if(options.columnsModel[hi].check=="true"){if($.trim($(this).html())==""){$(this).html(' ')}$(this).find("input[type=checkbox]").change(function(){var checked=$.bsgrid.adaptAttrOrProp($(this),"checked")?true:false;$.bsgrid.adaptAttrOrProp($.fn.bsgrid.getRows(options).find("td:nth-child("+(hi+1)+")>input[type=checkbox]"),"checked",checked)})}});var gridObj=$.fn.bsgrid.getGridObj(gridId);gridObj.getCheckedRowsIndexs=function(){return $.fn.bsgrid.defaults.extend.getCheckedRowsIndexs(options)};gridObj.getCheckedRowsRecords=function(){return $.fn.bsgrid.defaults.extend.getCheckedRowsRecords(options)};gridObj.getCheckedValues=function(index){return $.fn.bsgrid.defaults.extend.getCheckedValues(index,options)}};$.fn.bsgrid.extendInitGrid.initSearchConditions=function(gridId,options){var conditionsHtml=new StringBuilder();conditionsHtml.append('');var params={};$.fn.bsgrid.getGridHeaderObject(options).each(function(i){var index=options.columnsModel[i].index;var text=$.trim($(this).text());if(index!=""&&text!=""&&$.trim(params[index])==""){params[index]=text}});for(var key in params){conditionsHtml.append(''+params[key]+" ")}conditionsHtml.append(" ");conditionsHtml.append(" ");conditionsHtml.append(' ');$("#"+options.settings.extend.settings.searchConditionsContainerId).html(conditionsHtml.toString());$("#"+options.settings.extend.settings.searchConditionsContainerId+" select.bsgrid_conditions_select").change(function(){$(this).next("input.bsgrid_conditions_input").attr("name",$(this).val())}).trigger("change")};$.fn.bsgrid.extendInitGrid.initColumnMove=function(gridId,options){if($("#"+options.gridId+" thead tr").length!=1){return}$("#"+options.gridId).css({"table-layout":"fixed"});var headObj=$.fn.bsgrid.getGridHeaderObject(options);var headLen=headObj.length;headObj.each(function(i){var obj=this;$(obj).bind("selectstart",function(){return false});$(obj).css("-moz-user-select","none");$(obj).mousedown(function(){bindDownData(obj,i,headLen)});$(obj).mousemove(function(e){e=e||event;var left=$(obj).offset().left;var nObj=0,nLeft=0;if(i!=headLen-1){nObj=$(obj).next();nLeft=nObj.offset().left}var mObj=obj;if(i!=headLen-1&&e.clientX-nLeft>-10){mObj=nObj}if((i!=0&&e.clientX-left<10)||(i!=headLen-1&&e.clientX-nLeft>-10)){$(obj).css({cursor:"e-resize"});if($.trim($(obj).data("ex_mousedown"))!="mousedown"){return}var mWidth=$(mObj).width();var newMWidth=mWidth-e.clientX+$(mObj).offset().left;var preMWidth=$(mObj).prev().width();var preNewMWidth=preMWidth+e.clientX-$(mObj).offset().left;if(parseInt(newMWidth)>19&&parseInt(preNewMWidth)>19){$(mObj).width(newMWidth).prev().width(preNewMWidth)}}else{$(mObj).css({cursor:"default"});releaseDownData(obj,i,headLen)}});$(obj).mouseup(function(){releaseDownData(obj,i,headLen)});$(obj).mouseout(function(e){e=e||event;var objOffect=$(obj).offset();if(objOffect.top>e.clientY||objOffect.top+$(obj).height() '}return false};$.fn.bsgrid.extendRenderPerColumn.renderForm=function(record,rowIndex,colIndex,tdObj,trObj,options){var columnModel=options.columnsModel[colIndex];var edit=columnModel.edit;var value=$.fn.bsgrid.getRecordIndexValue(record,columnModel.index,options);var tdHtml=" ";if(edit in options.settings.extend.settings.gridEditConfigs){tdHtml=options.settings.extend.settings.gridEditConfigs[edit].build(edit,value,record,rowIndex,colIndex,tdObj,trObj,options)}else{return false}tdObj.html(tdHtml);tdObj.find(":input").addClass("bsgrid_editgrid_hidden");for(var key in options.settings.event.customCellEditEvents){tdObj.find(":input").each(function(){var formObj=$(this);formObj.bind(key,{formObj:formObj,record:record,rowIndex:rowIndex,colIndex:colIndex,tdObj:tdObj,trObj:trObj,options:options},function(event){options.settings.event.customCellEditEvents[key](event.data.formObj,event.data.record,event.data.rowIndex,event.data.colIndex,event.data.tdObj,event.data.trObj,event.data.options)})})}return false};$.fn.bsgrid.extendAfterRenderGrid.renderLineNumber=function(parseSuccess,gridData,options){$.fn.bsgrid.getGridHeaderObject(options).each(function(i){var num=options.columnsModel[i].lineNumber;if(num=="line"||num=="total_line"){$.fn.bsgrid.getRows(options).find("td:nth-child("+(i+1)+")").each(function(li){$(this).html((num=="line")?(li+1):(li+options.startRow))})}})};$.fn.bsgrid.extendAfterRenderGrid.addCheckChangedEvent=function(parseSuccess,gridData,options){$.fn.bsgrid.getGridHeaderObject(options).each(function(hi){if(options.columnsModel[hi].check=="true"){var checkboxObj=$(this).find("input[type=checkbox]");var checkboxObjs=$.fn.bsgrid.getRows(options).find("td:nth-child("+(hi+1)+")>input[type=checkbox]");checkboxObjs.change(function(){var allCheckboxObjs=$.fn.bsgrid.getRows(options).find("td:nth-child("+(hi+1)+")>input[type=checkbox]");var checked=$.bsgrid.adaptAttrOrProp(checkboxObj,"checked")?true:false;if(!checked&&allCheckboxObjs.filter(":checked").length==allCheckboxObjs.length){$.bsgrid.adaptAttrOrProp(checkboxObj,"checked",true)}else{if(checked&&allCheckboxObjs.filter(":checked").length!=allCheckboxObjs.length){$.bsgrid.adaptAttrOrProp(checkboxObj,"checked",false)}}})}})};$.fn.bsgrid.extendAfterRenderGrid.addGridEditEvent=function(parseSuccess,gridData,options){var gridObj=$.fn.bsgrid.getGridObj(options.gridId);$.fn.bsgrid.getRows(options).each(function(){var columnsModel=options.columnsModel;$(this).find("td").each(function(ci){if(columnsModel[ci].edit!=""){$(this).find(":input").change(function(){var rowObj=$(this).parent("td").parent("tr");var isNew=$.trim(rowObj.data("ex_new"));var value=gridObj.getRecordIndexValue(gridObj.getRowRecord(rowObj),columnsModel[ci].index);value=(isNew=="true"?"":value);if($.trim($(this).val())!=value){$(this).addClass("bsgrid_editgrid_change")}else{$(this).removeClass("bsgrid_editgrid_change")}rowObj.data("ex_change",rowObj.find(".bsgrid_editgrid_change").length)})}});if(options.settings.extend.settings.supportGridEditTriggerEvent==""){$(this).find(".bsgrid_editgrid_hidden").each(function(){showCellEdit(this)})}else{if(options.settings.extend.settings.supportGridEditTriggerEvent=="rowClick"){$(this).click(function(){$(this).find(".bsgrid_editgrid_hidden").each(function(){showCellEdit(this)})})}else{if(options.settings.extend.settings.supportGridEditTriggerEvent=="rowDoubleClick"){$(this).dblclick(function(){$(this).find(".bsgrid_editgrid_hidden").each(function(){showCellEdit(this)})})}else{if(options.settings.extend.settings.supportGridEditTriggerEvent=="cellClick"){$(this).find(".bsgrid_editgrid_hidden").each(function(){var formObj=this;$(formObj).parent("td").click(function(){showCellEdit(formObj)})})}else{if(options.settings.extend.settings.supportGridEditTriggerEvent=="cellDoubleClick"){$(this).find(".bsgrid_editgrid_hidden").each(function(){var formObj=this;$(formObj).parent("td").dblclick(function(){showCellEdit(formObj)})})}}}}}});function showCellEdit(formObj){var cloneObj=$(formObj).removeClass("bsgrid_editgrid_hidden").clone(true);$(formObj).parent("td").html(cloneObj)}};$.fn.bsgrid.extendAfterRenderGrid.aggregation=function(parseSuccess,gridData,options){var gridObj=$.fn.bsgrid.getGridObj(options.gridId);var columnsModel=options.columnsModel;$("#"+options.gridId+" tfoot tr td["+options.settings.colsProperties.aggAttr+"!='']").each(function(i){if(columnsModel[i].aggName!=""){var aggName=columnsModel[i].aggName;var val=null;if(aggName=="count"){val=options.curPageRowsNum}else{if(aggName=="countnotnone"||aggName=="sum"||aggName=="avg"||aggName=="max"||aggName=="min"||aggName=="concat"){if(aggName=="countnotnone"){val=0}var valHtml=new StringBuilder();$.fn.bsgrid.getRows(options).filter(":lt("+options.curPageRowsNum+")").each(function(ri){var rval=gridObj.getColumnValue(ri,columnsModel[i].aggIndex);if(rval==""){}else{if(aggName=="countnotnone"){val=(val==null?0:val)+1}else{if(aggName=="sum"||aggName=="avg"){if(!isNaN(rval)){val=(val==null?0:val)+parseFloat(rval)}}else{if(aggName=="max"||aggName=="min"){if(!isNaN(rval)&&(val==null||(aggName=="max"&&parseFloat(rval)>val)||(aggName=="min"&&parseFloat(rval)input:checked").length==1){rowIndexs[rowIndexs.length]=i}});return rowIndexs};$.fn.bsgrid.defaults.extend.getCheckedRowsRecords=function(options){var records=[];$.each($.fn.bsgrid.defaults.extend.getCheckedRowsIndexs(options),function(i,rowIndex){records[records.length]=$.fn.bsgrid.getRecord(rowIndex,options)});return records};$.fn.bsgrid.defaults.extend.getCheckedValues=function(index,options){var values=[];$.each($.fn.bsgrid.defaults.extend.getCheckedRowsRecords(options),function(i,record){values[values.length]=$.fn.bsgrid.getRecordIndexValue(record,index,options)});return values};$.fn.bsgrid.defaults.extend.activeGridEditMode=function(options){if(!options.settings.extend.settings.supportGridEdit){return}$.fn.bsgrid.getRows(options).find("td .bsgrid_editgrid_hidden").each(function(){var cloneObj=$(this).removeClass("bsgrid_editgrid_hidden").clone(true);$(this).parent("td").html(cloneObj)})};$.fn.bsgrid.defaults.extend.getChangedRowsIndexs=function(options){var rowIndexs=[];$.fn.bsgrid.getRows(options).each(function(i){var cellChangedNumStr=$.trim($(this).data("ex_change"));if(!isNaN(cellChangedNumStr)&&parseInt(cellChangedNumStr)>0){rowIndexs[rowIndexs.length]=i}});return rowIndexs};$.fn.bsgrid.defaults.extend.getChangedRowsOldRecords=function(options){var records=[];$.each($.fn.bsgrid.defaults.extend.getChangedRowsIndexs(options),function(i,rowIndex){records[records.length]=$.fn.bsgrid.getRecord(rowIndex,options)});return records};$.fn.bsgrid.defaults.extend.getRowsChangedColumnsValue=function(options){var values={};$.each($.fn.bsgrid.defaults.extend.getChangedRowsIndexs(options),function(i,rowIndex){values["row_"+rowIndex]={};$.fn.bsgrid.getRows(options).filter(":eq("+rowIndex+")").find("td").each(function(ci){if($(this).find(".bsgrid_editgrid_change").length>0){values["row_"+rowIndex][options.columnsModel[ci].index]=options.settings.extend.settings.gridEditConfigs[options.columnsModel[ci].edit].val($(this).find(".bsgrid_editgrid_change"))}})});return values};$.fn.bsgrid.defaults.extend.deleteRow=function(row,options){$.fn.bsgrid.getRow(row,options).remove()};$.fn.bsgrid.defaults.extend.addNewEditRow=function(options){var gridObj=$.fn.bsgrid.getGridObj(options.gridId);$("#"+options.gridId+" tbody").prepend(options.firstRowClone.clone(true));gridObj.getRowCells(0).each(function(colIndex){var columnModel=options.columnsModel[colIndex];if(columnModel.render!=""){var render_method=eval(columnModel.render);var render_html=render_method(null,0,colIndex,options);$(this).html(render_html)}else{if(columnModel.edit!="textarea"){$(this).children().val("")}else{$(this).children().text("")}$(this).html($(this).children().removeClass("bsgrid_editgrid_change").clone(true)).removeAttr("title")}});gridObj.getRow(0).data("record",null).data("ex_new","true")};$.fn.bsgrid.extendOtherMethods.fixedHeader=function(iFirst,options){var gridObj=$("#"+options.gridId);var gridFixedDivObj=$("#"+options.gridId+"_fixedDiv");if($.trim(gridFixedDivObj.data("ex_fixedGridLock"))=="lock"){return}gridFixedDivObj.data("ex_fixedGridLock","lock");var headTrNum=$("#"+options.gridId+" thead tr").length;if(!iFirst){headTrNum=headTrNum/2;$("#"+options.gridId+" thead tr:lt("+headTrNum+")").remove()}var fixedGridHeight=getSize(options.settings.extend.settings.fixedGridHeight);if(fixedGridHeight');$("#"+gridId+"_fixedDiv").data("ex_fixedGridLock","").css({padding:0,"border-width":0,width:"98%","overflow-y":"auto","margin-bottom":"-1px"});$("#"+gridId).css({width:"auto"});$("#"+gridId+"_pt_outTab").css({"border-top-width":"1px"});$.fn.bsgrid.extendOtherMethods.fixedHeader(true,options);$(window).resize(function(){$.fn.bsgrid.extendOtherMethods.fixedHeader(false,options)})}})(jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/js/grid.min.js b/public/static/admin_static/lib/jquery.bsgrid/builds/js/grid.min.js
new file mode 100644
index 0000000..8d02bce
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/js/grid.min.js
@@ -0,0 +1,6 @@
+/**
+* jQuery.bsgrid v1.38 by @Baishui2004
+* Copyright 2014 Apache v2 License
+* https://github.com/baishui2004/jquery.bsgrid
+*/
+(function($){$.fn.bsgrid={version:"1.38-preview",defaults:{dataType:"json",dataTrim:true,ajaxType:"post",localData:false,url:"",otherParames:false,autoLoad:true,pageAll:false,showPageToolbar:true,pageSize:20,pageSizeSelect:false,pageSizeForGrid:[5,10,20,25,50,100,200,500],pageIncorrectTurnAlert:true,multiSort:false,displayBlankRows:true,lineWrap:false,stripeRows:false,rowHoverColor:false,rowSelectedColor:true,pagingLittleToolbar:false,pagingToolbarAlign:"right",pagingBtnClass:"pagingBtn",displayPagingToolbarOnlyMultiPages:false,isProcessLockScreen:true,longLengthAotoSubAndTip:true,colsProperties:{align:"center",maxLength:40,indexAttr:"w_index",sortAttr:"w_sort",alignAttr:"w_align",lengthAttr:"w_length",renderAttr:"w_render",hiddenAttr:"w_hidden",tipAttr:"w_tip"},requestParamsName:{pageSize:"pageSize",curPage:"curPage",sortName:"sortName",sortOrder:"sortOrder"},beforeSend:function(options,XMLHttpRequest){},complete:function(options,XMLHttpRequest,textStatus){},processUserdata:function(userdata,options){},event:{selectRowEvent:false,unselectRowEvent:false,customRowEvents:{},customCellEvents:{}},extend:{initGridMethods:{},beforeRenderGridMethods:{},renderPerColumnMethods:{},renderPerRowMethods:{},afterRenderGridMethods:{}},additionalBeforeRenderGrid:function(parseSuccess,gridData,options){},additionalRenderPerColumn:function(record,rowIndex,colIndex,tdObj,trObj,options){},additionalRenderPerRow:function(record,rowIndex,trObj,options){},additionalAfterRenderGrid:function(parseSuccess,gridData,options){}},gridObjs:{},init:function(gridId,settings){if(!$("#"+gridId).hasClass("bsgrid")){$("#"+gridId).addClass("bsgrid")}var options={settings:$.extend(true,{},$.fn.bsgrid.defaults,settings),gridId:gridId,noPagingationId:gridId+"_no_pagination",pagingOutTabId:gridId+"_pt_outTab",pagingId:gridId+"_pt",sortName:"",sortOrder:"",otherParames:settings.otherParames,totalRows:0,totalPages:0,curPage:1,curPageRowsNum:0,startRow:0,endRow:0};if($("#"+gridId).find("thead").length==0){$("#"+gridId).prepend(" ");$("#"+gridId).find("tr:lt("+($("#"+gridId+" tr").length-$("#"+gridId+" tfoot tr").length)+")").appendTo($("#"+gridId+" thead"))}if($("#"+gridId).find("tbody").length==0){$("#"+gridId+" thead").after(" ")}if($("#"+gridId).find("tfoot").length==0){$("#"+gridId).append(' ')}options.columnsModel=$.fn.bsgrid.initColumnsModel(options);if(settings.pageSizeForGrid!=undefined){options.settings.pageSizeForGrid=settings.pageSizeForGrid}options.settings.dataType=options.settings.dataType.toLowerCase();if(options.settings.pageSizeSelect){if($.inArray(options.settings.pageSize,options.settings.pageSizeForGrid)==-1){options.settings.pageSizeForGrid.push(options.settings.pageSize)}options.settings.pageSizeForGrid.sort(function(a,b){return a-b})}var gridObj={options:options,getCondition:function(){return $.fn.bsgrid.getPageCondition(options.curPage,options)},getPageCondition:function(curPage){return $.fn.bsgrid.getPageCondition(curPage,options)},page:function(curPage){$.fn.bsgrid.page(curPage,options)},search:function(params){$.fn.bsgrid.search(options,params)},loadGridData:function(dataType,gridData){$.fn.bsgrid.loadGridData(dataType,gridData,options)},loadRowData:function(record,rowIndex,trObj){$.fn.bsgrid.loadRowData(options,record,rowIndex,trObj)},reloadLocalData:function(localData){$.fn.bsgrid.reloadLocalData(localData,options)},getPageSize:function(){return options.settings.pageSize},getTotalRows:function(){return options.totalRows},getTotalPages:function(){return options.totalPages},getCurPage:function(){return options.curPage},getCurPageRowsNum:function(){return options.curPageRowsNum},getStartRow:function(){return options.startRow},getEndRow:function(){return options.endRow},getSortName:function(){return options.sortName},getSortOrder:function(){return options.sortOrder},getRows:function(){return $.fn.bsgrid.getRows(options)},getRow:function(row){return $.fn.bsgrid.getRow(row,options)},getRowCells:function(row){return $.fn.bsgrid.getRowCells(row,options)},getColCells:function(col){return $.fn.bsgrid.getColCells(col,options)},getCell:function(row,col){return $.fn.bsgrid.getCell(row,col,options)},getSelectedRow:function(){return $.fn.bsgrid.getSelectedRow(options)},getSelectedRowIndex:function(){return $.fn.bsgrid.getSelectedRowIndex(options)},selectRow:function(row){return $.fn.bsgrid.selectRow(row,options)},unSelectRow:function(){return $.fn.bsgrid.unSelectRow(options)},getUserdata:function(){return $.fn.bsgrid.getUserdata(options)},getRowRecord:function(rowObj){return $.fn.bsgrid.getRowRecord(rowObj)},getAllRecords:function(){return $.fn.bsgrid.getAllRecords(options)},getRecord:function(row){return $.fn.bsgrid.getRecord(row,options)},getRecordIndexValue:function(record,index){return $.fn.bsgrid.getRecordIndexValue(record,index,options)},getColumnValue:function(row,index){return $.fn.bsgrid.getColumnValue(row,index,options)},getCellRecordValue:function(row,col){return $.fn.bsgrid.getCellRecordValue(row,col,options)},sort:function(obj){$.fn.bsgrid.sort(obj,options)},getGridHeaderObject:function(){return $.fn.bsgrid.getGridHeaderObject(options)},getColumnModel:function(colIndex){return $.fn.bsgrid.getColumnModel(colIndex,options)},appendHeaderSort:function(){$.fn.bsgrid.appendHeaderSort(options)},setGridBlankBody:function(){return $.fn.bsgrid.setGridBlankBody(options)},createPagingOutTab:function(){$.fn.bsgrid.createPagingOutTab(options)},clearRowData:function(rowIndex){$.fn.bsgrid.clearRowData(rowIndex,options)},clearGridBodyData:function(){$.fn.bsgrid.clearGridBodyData(options)},getPagingObj:function(){return $.fn.bsgrid.getPagingObj(options)},refreshPage:function(){$.fn.bsgrid.refreshPage(options)},firstPage:function(){$.fn.bsgrid.firstPage(options)},prevPage:function(){$.fn.bsgrid.prevPage(options)},nextPage:function(){$.fn.bsgrid.nextPage(options)},lastPage:function(){$.fn.bsgrid.lastPage(options)},gotoPage:function(goPage){$.fn.bsgrid.gotoPage(options,goPage)},initPaging:function(){return $.fn.bsgrid.initPaging(options)},setPagingValues:function(){$.fn.bsgrid.setPagingValues(options)}};$.fn.bsgrid.gridObjs[gridId]=gridObj;if(options.settings.pageAll||options.settings.pageSize<1){options.settings.pageAll=true;options.settings.pageSize=0}gridObj.appendHeaderSort();gridObj.createPagingOutTab();if(!options.settings.showPageToolbar){$("#"+options.pagingId).hide();$("#"+options.pagingOutTabId).hide()}if(!options.settings.pageAll){gridObj.pagingObj=gridObj.initPaging();try{var minWidth=$.trim($("#"+options.pagingId).children().width());minWidth=minWidth==""?0:parseInt(minWidth);if(minWidth!=0){$("#"+gridId).css("min-width",minWidth+16);$("#"+options.pagingOutTabId).css("min-width",minWidth+16)}$("#"+options.pagingOutTabId).width($("#"+gridId).width());$(window).resize(function(){$("#"+options.pagingOutTabId).width($("#"+gridId).width())})}catch(e){}}if(options.settings.isProcessLockScreen){$.fn.bsgrid.addLockScreen(options)}try{$.fn.bsgrid.extendInitGrid.initGridExtendOptions(gridId,options)}catch(e){}for(var key in options.settings.extend.initGridMethods){options.settings.extend.initGridMethods[key](gridId,options)}if(options.settings.autoLoad){setTimeout(function(){gridObj.page(1)},10)}else{gridObj.setGridBlankBody()}return gridObj},initColumnsModel:function(options){var columnsModel=[];$.fn.bsgrid.getGridHeaderObject(options).each(function(){var headObj=$(this);var colsProperties=options.settings.colsProperties;var columnModel={};columnModel.sortName="";columnModel.sortOrder="";var sortInfo=$.trim(headObj.attr(colsProperties.sortAttr));if(sortInfo.length!=0){var sortInfoArray=sortInfo.split(",");columnModel.sortName=$.trim(sortInfoArray[0]);columnModel.sortOrder=$.trim(sortInfoArray.length>1?sortInfoArray[1]:"")}columnModel.index=$.trim(headObj.attr(colsProperties.indexAttr));columnModel.render=$.trim(headObj.attr(colsProperties.renderAttr));columnModel.tip=$.trim(headObj.attr(colsProperties.tipAttr));var maxLen=$.trim(headObj.attr(colsProperties.lengthAttr));columnModel.maxLen=maxLen.length!=0?parseInt(maxLen):colsProperties.maxLength;var align=$.trim(headObj.attr(colsProperties.alignAttr));columnModel.align=align==""?colsProperties.align:align;columnModel.hidden=$.trim(headObj.attr(colsProperties.hiddenAttr));columnsModel.push(columnModel)});return columnsModel},getGridObj:function(gridId){var obj=$.fn.bsgrid.gridObjs[gridId];return obj?obj:null},buildData:{gridData:function(type,curPage,data){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.buildJsonData.gridData(curPage,data)}else{if(type=="xml"){return $.fn.bsgrid.buildXmlData.gridData(curPage,data)}}return false}},parseData:{success:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.success(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.success(gridData)}}return false},totalRows:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.totalRows(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.totalRows(gridData)}}return false},curPage:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.curPage(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.curPage(gridData)}}return false},data:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.data(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.data(gridData)}}return false},userdata:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.userdata(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.userdata(gridData)}}return false},getDataLen:function(type,gridData){if(type=="json"||type=="jsonp"||type=="xml"){return $.fn.bsgrid.parseData.data(type,gridData).length}return 0},getRecord:function(type,data,row){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.getRecord(data,row)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.getRecord(data,row)}}return false},getColumnValue:function(type,record,index){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.getColumnValue(record,index)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.getColumnValue(record,index)}}return false}},buildJsonData:{gridData:function(curPage,data){return{success:true,totalRows:data.length,curPage:curPage,data:data}}},parseJsonData:{success:function(json){return json.success},totalRows:function(json){return json.totalRows},curPage:function(json){return json.curPage},data:function(json){return json.data},userdata:function(json){return json.userdata},getRecord:function(data,row){return data[row]},getColumnValue:function(record,index){return record[index]}},buildXmlData:{gridData:function(curPage,data){return'true '+$(""+data+" ").find("row").length+" "+curPage+" "+data+" "}},parseXmlData:{success:function(xml){return $.trim($(xml).find("gridData success").text())=="true"},totalRows:function(xml){return parseInt($(xml).find("gridData totalRows").text())},curPage:function(xml){return parseInt($(xml).find("gridData curPage").text())},data:function(xml){return $(xml).find("gridData data row")},userdata:function(xml){return $(xml).find("gridData userdata")},getRecord:function(data,row){return data.eq(row)},getColumnValue:function(record,index){return record.find(index).text()}},getPageCondition:function(curPage,options){var params=new StringBuilder();if(options.otherParames==false){}else{if((typeof options.otherParames).toLowerCase()=="string"||options.otherParames instanceof String){params.append("&"+options.otherParames)}else{if(options.otherParames instanceof Array){$.each(options.otherParames,function(i,objVal){params.append("&"+objVal.name+"="+objVal.value)})}else{for(var key in options.otherParames){params.append("&"+key+"="+options.otherParames[key])}}}}var condition=params.length==0?"":params.toString().substring(1);condition+=(condition.length==0?"":"&")+options.settings.requestParamsName.pageSize+"="+options.settings.pageSize+"&"+options.settings.requestParamsName.curPage+"="+curPage+"&"+options.settings.requestParamsName.sortName+"="+options.sortName+"&"+options.settings.requestParamsName.sortOrder+"="+options.sortOrder;return condition},search:function(options,params){if(params!=undefined){options.otherParames=params}else{options.otherParames=false}$.fn.bsgrid.page(1,options)},page:function(curPage,options){if($.trim(curPage)==""||isNaN(curPage)){$.fn.bsgrid.alert($.bsgridLanguage.needInteger);return}var dataType=options.settings.dataType;if(options.settings.localData!=false){if(dataType=="json"||dataType=="jsonp"){$.fn.bsgrid.loadGridData(dataType,$.fn.bsgrid.buildData.gridData(dataType,curPage,options.settings.localData),options)}else{if(dataType=="xml"){$.fn.bsgrid.loadGridData(dataType,""+$.fn.bsgrid.buildData.gridData(dataType,curPage,options.settings.localData)+" ",options)}}return}$.ajax({type:options.settings.ajaxType,url:options.settings.url,data:$.fn.bsgrid.getPageCondition(curPage,options),dataType:dataType,beforeSend:function(XMLHttpRequest){if(options.settings.isProcessLockScreen){$.fn.bsgrid.lockScreen(options)}options.settings.beforeSend(options,XMLHttpRequest)},complete:function(XMLHttpRequest,textStatus){options.settings.complete(options,XMLHttpRequest,textStatus);if(options.settings.isProcessLockScreen){$.fn.bsgrid.unlockScreen(options)}},success:function(gridData,textStatus){$.fn.bsgrid.loadGridData(dataType,gridData,options)},error:function(XMLHttpRequest,textStatus,errorThrown){$.fn.bsgrid.alert($.bsgridLanguage.errorForSendOrRequestData)}})},loadGridData:function(dataType,gridData,options){var parseSuccess=$.fn.bsgrid.parseData.success(dataType,gridData);for(var key in options.settings.extend.beforeRenderGridMethods){options.settings.extend.beforeRenderGridMethods[key](parseSuccess,gridData,options)}options.settings.additionalBeforeRenderGrid(parseSuccess,gridData,options);if(parseSuccess){var userdata=$.fn.bsgrid.parseData.userdata(dataType,gridData);$.fn.bsgrid.storeUserdata(userdata,options);options.settings.processUserdata(userdata,options);var totalRows=parseInt($.fn.bsgrid.parseData.totalRows(dataType,gridData));var curPage=parseInt($.fn.bsgrid.parseData.curPage(dataType,gridData));curPage=Math.max(curPage,1);if(options.settings.pageAll){curPage=1;options.settings.pageSize=totalRows;$("#"+options.noPagingationId).html(totalRows)}var pageSize=options.settings.pageSize;var totalPages=parseInt(totalRows/pageSize);totalPages=parseInt((totalRows%pageSize==0)?totalPages:totalPages+1);var curPageRowsNum=$.fn.bsgrid.parseData.getDataLen(dataType,gridData);curPageRowsNum=curPageRowsNum>pageSize?pageSize:curPageRowsNum;curPageRowsNum=(curPage*pageSize ';$(this).append(sortHtml).find(".sort").click(function(){$.fn.bsgrid.sort($(this).parent("th"),options)})}})},setGridBlankBody:function(options){var gridBody=$("#"+options.gridId+" tbody");gridBody.html("");var header=$.fn.bsgrid.getGridHeaderObject(options);var columnsModel=options.columnsModel;for(var hi=0;hi0){var trSb=new StringBuilder();trSb.append("");for(var hi=0;hi ")}trSb.append(" ");rowSb=trSb.toString()}var curPageRowsNum=options.settings.pageSize;if(!options.settings.displayBlankRows){curPageRowsNum=options.endRow-options.startRow+1;curPageRowsNum=options.endRow>0?curPageRowsNum:0}var rowsSb=new StringBuilder();if(curPageRowsNum==0){rowsSb.append(''+$.bsgridLanguage.noDataToDisplay+" ")}else{for(var pi=0;pi');if(options.settings.pageAll){pagingOutTabSb.append($.bsgridLanguage.noPagingation(options.noPagingationId)+" ")}pagingOutTabSb.append(" ");$("#"+options.gridId).after(pagingOutTabSb.toString())},clearRowData:function(rowIndex,options){$.fn.bsgrid.getRowCells(rowIndex,options).html(" ");$.fn.bsgrid.storeRowData(rowIndex,null,options)},clearGridBodyData:function(options){$.fn.bsgrid.getRows(options).each(function(i){$(this).find("td").html(" ");$.fn.bsgrid.storeRowData(i,null,options)})},addLockScreen:function(options){if($(".bsgrid.lockscreen").length==0){var lockScreenHtml=new StringBuilder();lockScreenHtml.append('');lockScreenHtml.append("
");lockScreenHtml.append('');lockScreenHtml.append('
'+$.bsgridLanguage.loadingDataMessage+"
");lockScreenHtml.append("
");$("body").append(lockScreenHtml.toString())}},lockScreen:function(options){$(".bsgrid.lockscreen").attr("times",parseInt($(".bsgrid.lockscreen").attr("times"))+1);if($(".bsgrid.lockscreen").css("display")=="none"){$(".bsgrid.lockscreen").show();$(".bsgrid.loading_div").show()}},unlockScreen:function(options){$(".bsgrid.lockscreen").attr("times",parseInt($(".bsgrid.lockscreen").attr("times"))-1);if($(".bsgrid.lockscreen").attr("times")=="0"){setTimeout(function(){$(".bsgrid.lockscreen").hide();$(".bsgrid.loading_div").hide()},50)}},columnTip:function(tdObj,value,record){tdObj.attr("title",value)},alert:function(msg){try{$.bsgrid.alert(msg)}catch(e){alert(msg)}},longLengthSubAndTip:function(tdObj,value,maxLen,record){var tip=false;if(value.length>maxLen){try{if(value.indexOf("<")<0||value.indexOf(">")<2||$(value).text().length==0){tip=true}}catch(e){tip=true}}if(tip){tdObj.html(value.substring(0,maxLen-3)+"...");$.fn.bsgrid.columnTip(tdObj,value,record)}else{tdObj.html(value)}},getPagingObj:function(options){return $.fn.bsgrid.getGridObj(options.gridId).pagingObj},refreshPage:function(options){if(!options.settings.pageAll){$.fn.bsgrid.getPagingObj(options).refreshPage()}else{$.fn.bsgrid.page(1,options)}},firstPage:function(options){$.fn.bsgrid.getPagingObj(options).firstPage()},prevPage:function(options){$.fn.bsgrid.getPagingObj(options).prevPage()},nextPage:function(options){$.fn.bsgrid.getPagingObj(options).nextPage()},lastPage:function(options){$.fn.bsgrid.getPagingObj(options).lastPage()},gotoPage:function(options,goPage){$.fn.bsgrid.getPagingObj(options).gotoPage(goPage)},initPaging:function(options){$("#"+options.pagingOutTabId+" td").attr("id",options.pagingId);return $.fn.bsgrid_paging.init(options.pagingId,{gridId:options.gridId,pageSize:options.settings.pageSize,pageSizeSelect:options.settings.pageSizeSelect,pageSizeForGrid:options.settings.pageSizeForGrid,pageIncorrectTurnAlert:options.settings.pageIncorrectTurnAlert,pagingLittleToolbar:options.settings.pagingLittleToolbar,pagingBtnClass:options.settings.pagingBtnClass})},setPagingValues:function(options){$.fn.bsgrid.getPagingObj(options).setPagingValues(options.curPage,options.totalRows)}}})(jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/js/grid.paging.min.js b/public/static/admin_static/lib/jquery.bsgrid/builds/js/grid.paging.min.js
new file mode 100644
index 0000000..e9e5db6
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/js/grid.paging.min.js
@@ -0,0 +1,6 @@
+/**
+* jQuery.bsgrid v1.38 by @Baishui2004
+* Copyright 2014 Apache v2 License
+* https://github.com/baishui2004/jquery.bsgrid
+*/
+(function(a){a.fn.bsgrid_paging={defaults:{loopback:false,pageSize:20,pageSizeSelect:false,pageSizeForGrid:[5,10,20,25,50,100,200,500],pageIncorrectTurnAlert:true,pagingLittleToolbar:false,pagingBtnClass:"pagingBtn",pagingMinWidth:"auto",pagingBtnShowState:{select:true,first:true,prev:true,next:true,last:true,gotoBtn:true,refresh:true}},pagingObjs:{},init:function(h,g){var d={settings:a.extend(true,{},a.fn.bsgrid_paging.defaults,g),pagingId:h,totalRowsId:h+"_totalRows",totalPagesId:h+"_totalPages",curPageId:h+"_curPage",gotoPageInputId:h+"_gotoPageInput",gotoPageId:h+"_gotoPage",refreshPageId:h+"_refreshPage",pageSizeId:h+"_pageSize",firstPageId:h+"_firstPage",prevPageId:h+"_prevPage",nextPageId:h+"_nextPage",lastPageId:h+"_lastPage",startRowId:h+"_startRow",endRowId:h+"_endRow",totalRows:0,totalPages:0,curPage:1,curPageRowsNum:0,startRow:0,endRow:0};if(g.pageSizeForGrid!=undefined){d.settings.pageSizeForGrid=g.pageSizeForGrid}var b={options:d,page:function(i){a.fn.bsgrid_paging.page(i,d)},getCurPage:function(){return a.fn.bsgrid_paging.getCurPage(d)},refreshPage:function(){a.fn.bsgrid_paging.refreshPage(d)},firstPage:function(){a.fn.bsgrid_paging.firstPage(d)},prevPage:function(){a.fn.bsgrid_paging.prevPage(d)},nextPage:function(){a.fn.bsgrid_paging.nextPage(d)},lastPage:function(){a.fn.bsgrid_paging.lastPage(d)},gotoPage:function(i){a.fn.bsgrid_paging.gotoPage(d,i)},createPagingToolbar:function(){return a.fn.bsgrid_paging.createPagingToolbar(d)},setPagingToolbarEvents:function(){a.fn.bsgrid_paging.setPagingToolbarEvents(d)},dynamicChangePagingButtonStyle:function(){a.fn.bsgrid_paging.dynamicChangePagingButtonStyle(d)},setPagingValues:function(j,i){a.fn.bsgrid_paging.setPagingValues(j,i,d)}};a.fn.bsgrid_paging.pagingObjs[h]=b;a("#"+h).append(b.createPagingToolbar());if(d.settings.pageSizeSelect){if(a.inArray(d.settings.pageSize,d.settings.pageSizeForGrid)==-1){d.settings.pageSizeForGrid.push(d.settings.pageSize)}d.settings.pageSizeForGrid.sort(function(j,i){return j-i});var f=new StringBuilder();for(var e=0;e'+c+"")}a("#"+d.pageSizeId).html(f.toString()).val(d.settings.pageSize)}b.setPagingToolbarEvents();return b},getPagingObj:function(c){var b=a.fn.bsgrid_paging.pagingObjs[c];return b?b:null},page:function(c,b){var d=a.fn.bsgrid.getGridObj(b.settings.gridId);d.options.settings.pageSize=b.settings.pageSize;a.fn.bsgrid.page(c,d.options)},getCurPage:function(b){var c=a("#"+b.curPageId).html();return c==""?1:c},refreshPage:function(b){a.fn.bsgrid_paging.page(a.fn.bsgrid_paging.getCurPage(b),b)},firstPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c<=1){a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isFirstPage);return}a.fn.bsgrid_paging.page(1,b)},prevPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c<=1){if(b.settings.loopback&&b.totalPages>0){a.fn.bsgrid_paging.page(b.totalPages,b);return}else{a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isFirstPage);return}}a.fn.bsgrid_paging.page(parseInt(c)-1,b)},nextPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c>=b.totalPages){if(b.settings.loopback&&c>0){a.fn.bsgrid_paging.page(1,b);return}else{a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isLastPage);return}}a.fn.bsgrid_paging.page(parseInt(c)+1,b)},lastPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c>=b.totalPages){a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isLastPage);return}a.fn.bsgrid_paging.page(b.totalPages,b)},gotoPage:function(b,c){if(c==undefined){c=a("#"+b.gotoPageInputId).val()}if(a.trim(c)==""||isNaN(c)){a.fn.bsgrid_paging.alert(a.bsgridLanguage.needInteger)}else{if(parseInt(c)<1||parseInt(c)>b.totalPages){a.fn.bsgrid_paging.alert(a.bsgridLanguage.needRange(1,b.totalPages))}else{a("#"+b.gotoPageInputId).val(c);a.fn.bsgrid_paging.page(parseInt(c),b)}}},incorrectTurnAlert:function(b,c){if(b.settings.pageIncorrectTurnAlert){a.fn.bsgrid_paging.alert(c)}},alert:function(c){try{a.bsgrid.alert(c)}catch(b){alert(c)}},createPagingToolbar:function(b){var e=new StringBuilder();var c=b.settings.pagingLittleToolbar;e.append('");return e.toString()},setPagingToolbarEvents:function(b){if(b.settings.pageSizeSelect){a("#"+b.pageSizeId).change(function(){b.settings.pageSize=parseInt(a(this).val());a(this).trigger("blur");a.fn.bsgrid_paging.page(1,b)})}a("#"+b.firstPageId).click(function(){a.fn.bsgrid_paging.firstPage(b)});a("#"+b.prevPageId).click(function(){a.fn.bsgrid_paging.prevPage(b)});a("#"+b.nextPageId).click(function(){a.fn.bsgrid_paging.nextPage(b)});a("#"+b.lastPageId).click(function(){a.fn.bsgrid_paging.lastPage(b)});a("#"+b.gotoPageInputId).keyup(function(c){if(c.which==13){a.fn.bsgrid_paging.gotoPage(b)}});a("#"+b.gotoPageId).click(function(){a.fn.bsgrid_paging.gotoPage(b)});a("#"+b.refreshPageId).click(function(){a.fn.bsgrid_paging.refreshPage(b)})},dynamicChangePagingButtonStyle:function(b){var c="disabledCls";if(b.curPage<=1){a("#"+b.firstPageId).addClass(c);a("#"+b.prevPageId).addClass(c)}else{a("#"+b.firstPageId).removeClass(c);a("#"+b.prevPageId).removeClass(c)}if(b.curPage>=b.totalPages){a("#"+b.nextPageId).addClass(c);a("#"+b.lastPageId).addClass(c)}else{a("#"+b.nextPageId).removeClass(c);a("#"+b.lastPageId).removeClass(c)}},setPagingValues:function(i,g,f){i=Math.max(i,1);var b=f.settings.pageSize;var h=parseInt(g/b);h=parseInt((g%b==0)?h:h+1);var e=(i*b'},pagingToolbar:{pageSizeDisplay:function(d,c){var b="";if(!c){b+="PageSize:"}return b+' '},currentDisplayRows:function(c,b,e){var d="";if(!e){d+="Display:"}return d+' - '},totalRows:function(b){return'Total: '},currentDisplayPageAndTotalPages:function(b,c){return' /
'},firstPage:"First",prevPage:"Prev",nextPage:"Next",lastPage:"Last",gotoPage:"Goto",refreshPage:"Refresh"},loadingDataMessage:"Loading data, Please wait......",noDataToDisplay:"No data to display."}})(jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/js/lang/grid.zh-CN.min.js b/public/static/admin_static/lib/jquery.bsgrid/builds/js/lang/grid.zh-CN.min.js
new file mode 100644
index 0000000..2149da5
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/js/lang/grid.zh-CN.min.js
@@ -0,0 +1,6 @@
+/**
+* jQuery.bsgrid v1.38 by @Baishui2004
+* Copyright 2014 Apache v2 License
+* https://github.com/baishui2004/jquery.bsgrid
+*/
+(function(a){a.bsgridLanguage={isFirstPage:"已经是第一页!",isLastPage:"已经是最后一页!",needInteger:"请输入数字!",needRange:function(c,b){return"请输入一个在"+c+"到"+b+"之间的数字!"},errorForRequestData:"请求数据失败!",errorForSendOrRequestData:"发送或请求数据失败!",noPagingation:function(b){return'共: '},pagingToolbar:{pageSizeDisplay:function(d,c){var b="";if(!c){b+="每页显示:"}return b+' '},currentDisplayRows:function(c,b,e){var d="";if(!e){d+="当前显示:"}return d+' - '},totalRows:function(b){return'共: '},currentDisplayPageAndTotalPages:function(b,c){return' /
'},firstPage:"首 页",prevPage:"上一页",nextPage:"下一页",lastPage:"末 页",gotoPage:"跳 转",refreshPage:"刷 新"},loadingDataMessage:"正在加载数据,请稍候......",noDataToDisplay:"没有数据可以用于显示。"}})(jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/js/lang/grid.zh-TW.min.js b/public/static/admin_static/lib/jquery.bsgrid/builds/js/lang/grid.zh-TW.min.js
new file mode 100644
index 0000000..7cb5ceb
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/js/lang/grid.zh-TW.min.js
@@ -0,0 +1,6 @@
+/**
+* jQuery.bsgrid v1.38 by @Baishui2004
+* Copyright 2014 Apache v2 License
+* https://github.com/baishui2004/jquery.bsgrid
+*/
+(function(a){a.bsgridLanguage={isFirstPage:"已經是第一頁!",isLastPage:"已經是最後一頁!",needInteger:"請輸入數字!",needRange:function(c,b){return"請輸入一個在"+c+"到"+b+"之間的數字!"},errorForRequestData:"請求數據失敗!",errorForSendOrRequestData:"發送或請求數據失敗!",noPagingation:function(b){return'共: '},pagingToolbar:{pageSizeDisplay:function(d,c){var b="";if(!c){b+="每頁顯示:"}return b+' '},currentDisplayRows:function(c,b,e){var d="";if(!e){d+="當前顯示:"}return d+' - '},totalRows:function(b){return'共: '},currentDisplayPageAndTotalPages:function(b,c){return' /
'},firstPage:"首 頁",prevPage:"上一頁",nextPage:"下一頁",lastPage:"末 頁",gotoPage:"跳 轉",refreshPage:"刷 新"},loadingDataMessage:"正在加載數據,請稍候......",noDataToDisplay:"沒有數據可以用於顯示。"}})(jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/js/util.min.js b/public/static/admin_static/lib/jquery.bsgrid/builds/js/util.min.js
new file mode 100644
index 0000000..9e9a1d1
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/js/util.min.js
@@ -0,0 +1,6 @@
+/**
+* jQuery.bsgrid v1.38 by @Baishui2004
+* Copyright 2014 Apache v2 License
+* https://github.com/baishui2004/jquery.bsgrid
+*/
+$.bsgrid={param:function(c,b){if(b==undefined){b=false}if(!b){return $.param(c)}var d=new StringBuilder();if(c instanceof Array){$.each(c,function(f,e){d.append("&"+e.name+"=");d.append(encodeURIComponent(encodeURIComponent(e.value)))})}else{for(var a in c){d.append("&"+a+"=");d.append(encodeURIComponent(encodeURIComponent(c[a])))}}return d.length>0?d.toString().substring(1):""},getKeysString:function(c,a){if(a==undefined){a=","}var d=new StringBuilder();if(c instanceof Array){$.each(c,function(f,e){if((d.toString()+a).indexOf(a+e.name+a)==-1){d.append(a+e.name)}})}else{for(var b in c){d.append(a+b)}}return d.length>0?d.toString().substring(1):""},forcePushPropertyInObject:function(b,a,c){if(b.hasOwnProperty(a)){b[a+"_f"]=c}else{b[a]=c}},adaptAttrOrProp:function(b,d,c){var a=parseInt($.fn.jquery.substring(0,$.fn.jquery.indexOf(".",2)).replace(".",""));if(c==undefined){if(a>=16){return b.prop(d)}else{return b.attr(d)}}else{if(a>=16){b.prop(d,c)}else{b.attr(d,c)}}},alert:function(a){alert(a)}};
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/merged/bsgrid.all.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/merged/bsgrid.all.min.css
new file mode 100644
index 0000000..0c1ab0e
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/merged/bsgrid.all.min.css
@@ -0,0 +1,5 @@
+@CHARSET "UTF-8";.bsgrid{font-size:13px;font-family:'微软雅黑',Verdana,sans-serif,'宋体',serif}table.bsgrid{width:98%;margin-right:5px;border-collapse:collapse}.bsgrid th,.bsgrid td{padding:3px;border:solid 1px #ccc;background-color:white;text-align:center;color:#333;line-height:1.8em}.bsgrid td.lineWrap{word-break:break-all}.bsgrid td.lineNoWrap{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bsgrid th{font-weight:400;background:url(../images/skins/default/bg.gif) repeat-x #f4f4f4}.bsgrid tr.even_index_row td{background-color:#eef}.bsgrid tr.row_hover td{background-color:#fff1cc!important}.bsgrid tr.selected.selected_color td{background-color:#fff1cc!important}.bsgrid a{color:#f60;text-decoration:none}.bsgrid th .sort.sort-view{background:url(../images/sort-view.gif) no-repeat center;margin-left:3px}.bsgrid th .sort.sort-asc{background:url(../images/sort-asc.gif) no-repeat top;margin-left:3px}.bsgrid th .sort.sort-desc{background:url(../images/sort-desc.gif) no-repeat bottom;margin-left:3px}.bsgrid.lockscreen{position:fixed;z-index:2014;display:none;left:0;top:0;width:100%;height:100%;background:#000;filter:alpha(opacity=10);opacity:.1;-moz-opacity:.1}.bsgrid.loading_div{position:fixed;z-index:2015;display:none;left:0;top:0;width:100%;height:100%}.bsgrid.loading_div table{width:100%;height:100%}.bsgrid.loading_div td{width:100%;height:100%;background-color:transparent!important;text-align:center;vertical-align:middle}.bsgrid.loading_div td div{width:200px;padding-top:8px;padding-bottom:8px;color:#000;border:solid 1px #999;background-color:#fff}.bsgrid.loading{padding-left:5px;line-height:1.5em}.bsgrid.loading span{background:url("../images/loading.gif") no-repeat center}.bsgridPagingOutTab{width:98%;margin-right:5px;border-collapse:collapse;border:solid 1px #ccc;background-color:white;border-top-width:0}
+@CHARSET "UTF-8";.bsgridPaging{font-size:13px;font-family:'微软雅黑',Verdana,sans-serif,'宋体',serif;width:770px;border-collapse:collapse}.bsgridPaging.pagingLittleToolbar{width:550px}.bsgridPaging.noPageSizeSelect{width:650px}.bsgridPaging.pagingLittleToolbar.noPageSizeSelect{width:430px}.bsgridPaging td{text-align:center}.bsgridPaging select{font-size:inherit;width:auto;height:auto;padding:1px;margin:1px}.bsgridPaging .pagingBtn{cursor:pointer;border:solid 1px #ccc;background:url(../images/skins/default/bg.gif) repeat-x #f4f4f4;font-size:inherit;font-family:inherit;color:inherit;padding:1px 3px;margin:1px}.bsgridPaging.pagingLittleToolbar .pagingBtn{width:16px;border-width:0;background:transparent no-repeat;padding:0;margin:3px}.bsgridPaging .pagingBtn.disabledCls{color:#999;filter:alpha(opacity=50);opacity:.5;-moz-opacity:.5}.bsgridPaging.pagingLittleToolbar .pagingBtn.firstPage{background-image:url(../images/icons/paging/go-first-view.png)}.bsgridPaging.pagingLittleToolbar .pagingBtn.prevPage{background-image:url(../images/icons/paging/go-previous-view.png)}.bsgridPaging.pagingLittleToolbar .pagingBtn.nextPage{background-image:url(../images/icons/paging/go-next-view.png)}.bsgridPaging.pagingLittleToolbar .pagingBtn.lastPage{background-image:url(../images/icons/paging/go-last-view.png)}.bsgridPaging .gotoPageInputTd{width:44px}.bsgridPaging .gotoPageInput{width:40px;height:auto;font-size:inherit;line-height:1em;color:inherit;border:solid 1px #ccc;padding:1px;margin:1px}.bsgridPaging .gotoPageButtonTd{text-align:left}.bsgridPaging .refreshPageTd{text-align:right;padding-right:4px}.bsgridPaging.pagingLittleToolbar .pagingBtn.gotoPage{background-image:url(../images/icons/paging/go-jump-2.png)}.bsgridPaging.pagingLittleToolbar .pagingBtn.refreshPage{background-image:url(../images/icons/paging/view-refresh-3.png)}
+@CHARSET "UTF-8";.bsgrid th .bsgrid_editgrid_check,.bsgrid td .bsgrid_editgrid_check{text-align:inherit}.bsgrid th .bsgrid_editgrid_checkbox,.bsgrid td .bsgrid_editgrid_checkbox{text-align:inherit}.bsgrid td .bsgrid_editgrid_edit{width:95%;text-align:inherit}.bsgrid td .bsgrid_editgrid_change{border-color:hotpink}.bsgrid td .bsgrid_editgrid_hidden{display:none}
+@CHARSET "UTF-8";.bsgrid_icon{cursor:pointer;font-family:'微软雅黑',Verdana,sans-serif,'宋体',serif;font-size:12px;line-height:1.5em;color:#b22222;background:no-repeat 3px center}a.bsgrid_icon{padding-left:20px;text-decoration:underline}input.bsgrid_icon,button.bsgrid_icon{padding-left:20px;padding-right:4px;background-color:#d5e2f2;border:solid 1px #99bbe8;width:auto;overflow:visible}.icon_view{background-image:url(../images/icons/view-list-details-5.png)}.icon_add{background-image:url(../images/icons/list-add-6.png)}.icon_edit{background-image:url(../images/icons/page-edit.png)}.icon_save{background-image:url(../images/icons/document-save-6.png)}.icon_delete{background-image:url(../images/icons/edit-delete-6.png)}.icon_delete2{background-image:url(../images/icons/edit-delete-7.png)}.icon_close{background-image:url(../images/icons/window-close-4.png)}.icon_close2{background-image:url(../images/icons/window-close.png)}.icon_find{background-image:url(../images/icons/edit-find-8.png)}.icon_search{background-image:url(../images/icons/system-search-6.png)}.icon_refresh{background-image:url(../images/icons/arrow-refresh.png)}.icon_sort-view{background-image:url(../images/icons/sort-view.gif)}.icon_sort-asc{background-image:url(../images/icons/view-sort-descending-2.png)}.icon_sort-desc{background-image:url(../images/icons/view-sort-ascending-2.png)}.icon_copy{background-image:url(../images/icons/edit-copy-7.png)}.icon_cut{background-image:url(../images/icons/edit-cut-7.png)}.icon_paste{background-image:url(../images/icons/edit-paste-7.png)}.icon_download{background-image:url(../images/icons/download.png)}.icon_print{background-image:url(../images/icons/document-print-2.png)}.icon_mail{background-image:url(../images/icons/mail-generic.png)}.icon_accept{background-image:url(../images/icons/dialog-accept-2.png)}.icon_flag{background-image:url(../images/icons/flag.png)}.icon_about{background-image:url(../images/icons/help-about-3.png)}.icon_help{background-image:url(../images/icons/help.png)}.icon_documentation{background-image:url(../images/icons/documentation.png)}.icon_config{background-image:url(../images/icons/configure-2.png)}.icon_config2{background-image:url(../images/icons/system-config-boot.png)}.icon_text{background-image:url(../images/icons/mimetypes/silk_style/page-white_text.png)}.icon_pdf{background-image:url(../images/icons/mimetypes/silk_style/page-white_acrobat.png)}.icon_excel{background-image:url(../images/icons/mimetypes/silk_style/page-white_excel.png)}.icon_word{background-image:url(../images/icons/mimetypes/silk_style/page-white_word.png)}
+@CHARSET "UTF-8";.bsgrid_form{width:100%;font-size:13px;background-color:white}.bsgrid_form .formLabel{width:20%;color:#000;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bsgrid_form .formInput{width:80%;color:#333;text-align:left;overflow:auto}.bsgrid_form .formInput input,.bsgrid_form .formInput select,.bsgrid_form .formInput textarea,.bsgrid_form .formInput div.assist{width:64%;background-color:white}.bsgrid_form .formInput input{height:1.8em;line-height:1.8em;vertical-align:middle;padding-left:1px}.bsgrid_form .formInput textarea,.bsgrid_form .formInput div.assist{height:8em}.bsgrid_form .formInput div.assist{overflow:auto;word-wrap:break-word;word-break:break-all}.bsgrid_form .formInput .radio{width:20px}.bsgrid_form .formInput .checkbox{width:20px;text-align:left}.bsgrid_form .formInput .inputTip{margin-left:3px;color:#f18300;font-size:12px}.bsgrid_form .require{color:#f00;font-weight:bold;line-height:1.5em}
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/merged/bsgrid.all.min.js b/public/static/admin_static/lib/jquery.bsgrid/builds/merged/bsgrid.all.min.js
new file mode 100644
index 0000000..2e3345f
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/merged/bsgrid.all.min.js
@@ -0,0 +1,13 @@
+/**
+* jQuery.bsgrid v1.38 by @Baishui2004
+* Copyright 2014 Apache v2 License
+* https://github.com/baishui2004/jquery.bsgrid
+*/
+
+String.prototype.startWith=function(a){if(a==null||a==""||this.length==0||a.length>this.length){return false}else{return this.substr(0,a.length)==a}};String.prototype.endWith=function(a){if(a==null||a==""||this.length==0||a.length>this.length){return false}else{return this.substring(this.length-a.length)==a}};String.prototype.replaceAll=function(a,b){return this.replace(new RegExp(a,"gm"),b)};function StringBuilder(){if(arguments.length){this.append.apply(this,arguments)}}StringBuilder.prototype=function(){var c=Array.prototype.join,d=Array.prototype.slice,a=/\{(\d+)\}/g,b=function(){return c.call(this,"")};return{constructor:StringBuilder,length:0,append:Array.prototype.push,appendFormat:function(e){var g=0,f=d.call(arguments,1);this.append(a.test(e)?e.replace(a,function(h,j){return f[j]}):e.replace(/\?/g,function(){return f[g++]}));return this},size:function(){return this.toString().length},toString:b,valueOf:b}}();
+$.bsgrid={param:function(c,b){if(b==undefined){b=false}if(!b){return $.param(c)}var d=new StringBuilder();if(c instanceof Array){$.each(c,function(f,e){d.append("&"+e.name+"=");d.append(encodeURIComponent(encodeURIComponent(e.value)))})}else{for(var a in c){d.append("&"+a+"=");d.append(encodeURIComponent(encodeURIComponent(c[a])))}}return d.length>0?d.toString().substring(1):""},getKeysString:function(c,a){if(a==undefined){a=","}var d=new StringBuilder();if(c instanceof Array){$.each(c,function(f,e){if((d.toString()+a).indexOf(a+e.name+a)==-1){d.append(a+e.name)}})}else{for(var b in c){d.append(a+b)}}return d.length>0?d.toString().substring(1):""},forcePushPropertyInObject:function(b,a,c){if(b.hasOwnProperty(a)){b[a+"_f"]=c}else{b[a]=c}},adaptAttrOrProp:function(b,d,c){var a=parseInt($.fn.jquery.substring(0,$.fn.jquery.indexOf(".",2)).replace(".",""));if(c==undefined){if(a>=16){return b.prop(d)}else{return b.attr(d)}}else{if(a>=16){b.prop(d,c)}else{b.attr(d,c)}}},alert:function(a){alert(a)}};
+(function(a){a.fn.bsgrid_paging={defaults:{loopback:false,pageSize:20,pageSizeSelect:false,pageSizeForGrid:[5,10,20,25,50,100,200,500],pageIncorrectTurnAlert:true,pagingLittleToolbar:false,pagingBtnClass:"pagingBtn",pagingMinWidth:"auto",pagingBtnShowState:{select:true,first:true,prev:true,next:true,last:true,gotoBtn:true,refresh:true}},pagingObjs:{},init:function(h,g){var d={settings:a.extend(true,{},a.fn.bsgrid_paging.defaults,g),pagingId:h,totalRowsId:h+"_totalRows",totalPagesId:h+"_totalPages",curPageId:h+"_curPage",gotoPageInputId:h+"_gotoPageInput",gotoPageId:h+"_gotoPage",refreshPageId:h+"_refreshPage",pageSizeId:h+"_pageSize",firstPageId:h+"_firstPage",prevPageId:h+"_prevPage",nextPageId:h+"_nextPage",lastPageId:h+"_lastPage",startRowId:h+"_startRow",endRowId:h+"_endRow",totalRows:0,totalPages:0,curPage:1,curPageRowsNum:0,startRow:0,endRow:0};if(g.pageSizeForGrid!=undefined){d.settings.pageSizeForGrid=g.pageSizeForGrid}var b={options:d,page:function(i){a.fn.bsgrid_paging.page(i,d)},getCurPage:function(){return a.fn.bsgrid_paging.getCurPage(d)},refreshPage:function(){a.fn.bsgrid_paging.refreshPage(d)},firstPage:function(){a.fn.bsgrid_paging.firstPage(d)},prevPage:function(){a.fn.bsgrid_paging.prevPage(d)},nextPage:function(){a.fn.bsgrid_paging.nextPage(d)},lastPage:function(){a.fn.bsgrid_paging.lastPage(d)},gotoPage:function(i){a.fn.bsgrid_paging.gotoPage(d,i)},createPagingToolbar:function(){return a.fn.bsgrid_paging.createPagingToolbar(d)},setPagingToolbarEvents:function(){a.fn.bsgrid_paging.setPagingToolbarEvents(d)},dynamicChangePagingButtonStyle:function(){a.fn.bsgrid_paging.dynamicChangePagingButtonStyle(d)},setPagingValues:function(j,i){a.fn.bsgrid_paging.setPagingValues(j,i,d)}};a.fn.bsgrid_paging.pagingObjs[h]=b;a("#"+h).append(b.createPagingToolbar());if(d.settings.pageSizeSelect){if(a.inArray(d.settings.pageSize,d.settings.pageSizeForGrid)==-1){d.settings.pageSizeForGrid.push(d.settings.pageSize)}d.settings.pageSizeForGrid.sort(function(j,i){return j-i});var f=new StringBuilder();for(var e=0;e'+c+"")}a("#"+d.pageSizeId).html(f.toString()).val(d.settings.pageSize)}b.setPagingToolbarEvents();return b},getPagingObj:function(c){var b=a.fn.bsgrid_paging.pagingObjs[c];return b?b:null},page:function(c,b){var d=a.fn.bsgrid.getGridObj(b.settings.gridId);d.options.settings.pageSize=b.settings.pageSize;a.fn.bsgrid.page(c,d.options)},getCurPage:function(b){var c=a("#"+b.curPageId).html();return c==""?1:c},refreshPage:function(b){a.fn.bsgrid_paging.page(a.fn.bsgrid_paging.getCurPage(b),b)},firstPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c<=1){a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isFirstPage);return}a.fn.bsgrid_paging.page(1,b)},prevPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c<=1){if(b.settings.loopback&&b.totalPages>0){a.fn.bsgrid_paging.page(b.totalPages,b);return}else{a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isFirstPage);return}}a.fn.bsgrid_paging.page(parseInt(c)-1,b)},nextPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c>=b.totalPages){if(b.settings.loopback&&c>0){a.fn.bsgrid_paging.page(1,b);return}else{a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isLastPage);return}}a.fn.bsgrid_paging.page(parseInt(c)+1,b)},lastPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c>=b.totalPages){a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isLastPage);return}a.fn.bsgrid_paging.page(b.totalPages,b)},gotoPage:function(b,c){if(c==undefined){c=a("#"+b.gotoPageInputId).val()}if(a.trim(c)==""||isNaN(c)){a.fn.bsgrid_paging.alert(a.bsgridLanguage.needInteger)}else{if(parseInt(c)<1||parseInt(c)>b.totalPages){a.fn.bsgrid_paging.alert(a.bsgridLanguage.needRange(1,b.totalPages))}else{a("#"+b.gotoPageInputId).val(c);a.fn.bsgrid_paging.page(parseInt(c),b)}}},incorrectTurnAlert:function(b,c){if(b.settings.pageIncorrectTurnAlert){a.fn.bsgrid_paging.alert(c)}},alert:function(c){try{a.bsgrid.alert(c)}catch(b){alert(c)}},createPagingToolbar:function(b){var e=new StringBuilder();var c=b.settings.pagingLittleToolbar;e.append('");return e.toString()},setPagingToolbarEvents:function(b){if(b.settings.pageSizeSelect){a("#"+b.pageSizeId).change(function(){b.settings.pageSize=parseInt(a(this).val());a(this).trigger("blur");a.fn.bsgrid_paging.page(1,b)})}a("#"+b.firstPageId).click(function(){a.fn.bsgrid_paging.firstPage(b)});a("#"+b.prevPageId).click(function(){a.fn.bsgrid_paging.prevPage(b)});a("#"+b.nextPageId).click(function(){a.fn.bsgrid_paging.nextPage(b)});a("#"+b.lastPageId).click(function(){a.fn.bsgrid_paging.lastPage(b)});a("#"+b.gotoPageInputId).keyup(function(c){if(c.which==13){a.fn.bsgrid_paging.gotoPage(b)}});a("#"+b.gotoPageId).click(function(){a.fn.bsgrid_paging.gotoPage(b)});a("#"+b.refreshPageId).click(function(){a.fn.bsgrid_paging.refreshPage(b)})},dynamicChangePagingButtonStyle:function(b){var c="disabledCls";if(b.curPage<=1){a("#"+b.firstPageId).addClass(c);a("#"+b.prevPageId).addClass(c)}else{a("#"+b.firstPageId).removeClass(c);a("#"+b.prevPageId).removeClass(c)}if(b.curPage>=b.totalPages){a("#"+b.nextPageId).addClass(c);a("#"+b.lastPageId).addClass(c)}else{a("#"+b.nextPageId).removeClass(c);a("#"+b.lastPageId).removeClass(c)}},setPagingValues:function(i,g,f){i=Math.max(i,1);var b=f.settings.pageSize;var h=parseInt(g/b);h=parseInt((g%b==0)?h:h+1);var e=(i*b");$("#"+gridId).find("tr:lt("+($("#"+gridId+" tr").length-$("#"+gridId+" tfoot tr").length)+")").appendTo($("#"+gridId+" thead"))}if($("#"+gridId).find("tbody").length==0){$("#"+gridId+" thead").after(" ")}if($("#"+gridId).find("tfoot").length==0){$("#"+gridId).append(' ')}options.columnsModel=$.fn.bsgrid.initColumnsModel(options);if(settings.pageSizeForGrid!=undefined){options.settings.pageSizeForGrid=settings.pageSizeForGrid}options.settings.dataType=options.settings.dataType.toLowerCase();if(options.settings.pageSizeSelect){if($.inArray(options.settings.pageSize,options.settings.pageSizeForGrid)==-1){options.settings.pageSizeForGrid.push(options.settings.pageSize)}options.settings.pageSizeForGrid.sort(function(a,b){return a-b})}var gridObj={options:options,getCondition:function(){return $.fn.bsgrid.getPageCondition(options.curPage,options)},getPageCondition:function(curPage){return $.fn.bsgrid.getPageCondition(curPage,options)},page:function(curPage){$.fn.bsgrid.page(curPage,options)},search:function(params){$.fn.bsgrid.search(options,params)},loadGridData:function(dataType,gridData){$.fn.bsgrid.loadGridData(dataType,gridData,options)},loadRowData:function(record,rowIndex,trObj){$.fn.bsgrid.loadRowData(options,record,rowIndex,trObj)},reloadLocalData:function(localData){$.fn.bsgrid.reloadLocalData(localData,options)},getPageSize:function(){return options.settings.pageSize},getTotalRows:function(){return options.totalRows},getTotalPages:function(){return options.totalPages},getCurPage:function(){return options.curPage},getCurPageRowsNum:function(){return options.curPageRowsNum},getStartRow:function(){return options.startRow},getEndRow:function(){return options.endRow},getSortName:function(){return options.sortName},getSortOrder:function(){return options.sortOrder},getRows:function(){return $.fn.bsgrid.getRows(options)},getRow:function(row){return $.fn.bsgrid.getRow(row,options)},getRowCells:function(row){return $.fn.bsgrid.getRowCells(row,options)},getColCells:function(col){return $.fn.bsgrid.getColCells(col,options)},getCell:function(row,col){return $.fn.bsgrid.getCell(row,col,options)},getSelectedRow:function(){return $.fn.bsgrid.getSelectedRow(options)},getSelectedRowIndex:function(){return $.fn.bsgrid.getSelectedRowIndex(options)},selectRow:function(row){return $.fn.bsgrid.selectRow(row,options)},unSelectRow:function(){return $.fn.bsgrid.unSelectRow(options)},getUserdata:function(){return $.fn.bsgrid.getUserdata(options)},getRowRecord:function(rowObj){return $.fn.bsgrid.getRowRecord(rowObj)},getAllRecords:function(){return $.fn.bsgrid.getAllRecords(options)},getRecord:function(row){return $.fn.bsgrid.getRecord(row,options)},getRecordIndexValue:function(record,index){return $.fn.bsgrid.getRecordIndexValue(record,index,options)},getColumnValue:function(row,index){return $.fn.bsgrid.getColumnValue(row,index,options)},getCellRecordValue:function(row,col){return $.fn.bsgrid.getCellRecordValue(row,col,options)},sort:function(obj){$.fn.bsgrid.sort(obj,options)},getGridHeaderObject:function(){return $.fn.bsgrid.getGridHeaderObject(options)},getColumnModel:function(colIndex){return $.fn.bsgrid.getColumnModel(colIndex,options)},appendHeaderSort:function(){$.fn.bsgrid.appendHeaderSort(options)},setGridBlankBody:function(){return $.fn.bsgrid.setGridBlankBody(options)},createPagingOutTab:function(){$.fn.bsgrid.createPagingOutTab(options)},clearRowData:function(rowIndex){$.fn.bsgrid.clearRowData(rowIndex,options)},clearGridBodyData:function(){$.fn.bsgrid.clearGridBodyData(options)},getPagingObj:function(){return $.fn.bsgrid.getPagingObj(options)},refreshPage:function(){$.fn.bsgrid.refreshPage(options)},firstPage:function(){$.fn.bsgrid.firstPage(options)},prevPage:function(){$.fn.bsgrid.prevPage(options)},nextPage:function(){$.fn.bsgrid.nextPage(options)},lastPage:function(){$.fn.bsgrid.lastPage(options)},gotoPage:function(goPage){$.fn.bsgrid.gotoPage(options,goPage)},initPaging:function(){return $.fn.bsgrid.initPaging(options)},setPagingValues:function(){$.fn.bsgrid.setPagingValues(options)}};$.fn.bsgrid.gridObjs[gridId]=gridObj;if(options.settings.pageAll||options.settings.pageSize<1){options.settings.pageAll=true;options.settings.pageSize=0}gridObj.appendHeaderSort();gridObj.createPagingOutTab();if(!options.settings.showPageToolbar){$("#"+options.pagingId).hide();$("#"+options.pagingOutTabId).hide()}if(!options.settings.pageAll){gridObj.pagingObj=gridObj.initPaging();try{var minWidth=$.trim($("#"+options.pagingId).children().width());minWidth=minWidth==""?0:parseInt(minWidth);if(minWidth!=0){$("#"+gridId).css("min-width",minWidth+16);$("#"+options.pagingOutTabId).css("min-width",minWidth+16)}$("#"+options.pagingOutTabId).width($("#"+gridId).width());$(window).resize(function(){$("#"+options.pagingOutTabId).width($("#"+gridId).width())})}catch(e){}}if(options.settings.isProcessLockScreen){$.fn.bsgrid.addLockScreen(options)}try{$.fn.bsgrid.extendInitGrid.initGridExtendOptions(gridId,options)}catch(e){}for(var key in options.settings.extend.initGridMethods){options.settings.extend.initGridMethods[key](gridId,options)}if(options.settings.autoLoad){setTimeout(function(){gridObj.page(1)},10)}else{gridObj.setGridBlankBody()}return gridObj},initColumnsModel:function(options){var columnsModel=[];$.fn.bsgrid.getGridHeaderObject(options).each(function(){var headObj=$(this);var colsProperties=options.settings.colsProperties;var columnModel={};columnModel.sortName="";columnModel.sortOrder="";var sortInfo=$.trim(headObj.attr(colsProperties.sortAttr));if(sortInfo.length!=0){var sortInfoArray=sortInfo.split(",");columnModel.sortName=$.trim(sortInfoArray[0]);columnModel.sortOrder=$.trim(sortInfoArray.length>1?sortInfoArray[1]:"")}columnModel.index=$.trim(headObj.attr(colsProperties.indexAttr));columnModel.render=$.trim(headObj.attr(colsProperties.renderAttr));columnModel.tip=$.trim(headObj.attr(colsProperties.tipAttr));var maxLen=$.trim(headObj.attr(colsProperties.lengthAttr));columnModel.maxLen=maxLen.length!=0?parseInt(maxLen):colsProperties.maxLength;var align=$.trim(headObj.attr(colsProperties.alignAttr));columnModel.align=align==""?colsProperties.align:align;columnModel.hidden=$.trim(headObj.attr(colsProperties.hiddenAttr));columnsModel.push(columnModel)});return columnsModel},getGridObj:function(gridId){var obj=$.fn.bsgrid.gridObjs[gridId];return obj?obj:null},buildData:{gridData:function(type,curPage,data){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.buildJsonData.gridData(curPage,data)}else{if(type=="xml"){return $.fn.bsgrid.buildXmlData.gridData(curPage,data)}}return false}},parseData:{success:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.success(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.success(gridData)}}return false},totalRows:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.totalRows(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.totalRows(gridData)}}return false},curPage:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.curPage(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.curPage(gridData)}}return false},data:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.data(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.data(gridData)}}return false},userdata:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.userdata(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.userdata(gridData)}}return false},getDataLen:function(type,gridData){if(type=="json"||type=="jsonp"||type=="xml"){return $.fn.bsgrid.parseData.data(type,gridData).length}return 0},getRecord:function(type,data,row){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.getRecord(data,row)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.getRecord(data,row)}}return false},getColumnValue:function(type,record,index){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.getColumnValue(record,index)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.getColumnValue(record,index)}}return false}},buildJsonData:{gridData:function(curPage,data){return{success:true,totalRows:data.length,curPage:curPage,data:data}}},parseJsonData:{success:function(json){return json.success},totalRows:function(json){return json.totalRows},curPage:function(json){return json.curPage},data:function(json){return json.data},userdata:function(json){return json.userdata},getRecord:function(data,row){return data[row]},getColumnValue:function(record,index){return record[index]}},buildXmlData:{gridData:function(curPage,data){return'true '+$(""+data+" ").find("row").length+" "+curPage+" "+data+" "}},parseXmlData:{success:function(xml){return $.trim($(xml).find("gridData success").text())=="true"},totalRows:function(xml){return parseInt($(xml).find("gridData totalRows").text())},curPage:function(xml){return parseInt($(xml).find("gridData curPage").text())},data:function(xml){return $(xml).find("gridData data row")},userdata:function(xml){return $(xml).find("gridData userdata")},getRecord:function(data,row){return data.eq(row)},getColumnValue:function(record,index){return record.find(index).text()}},getPageCondition:function(curPage,options){var params=new StringBuilder();if(options.otherParames==false){}else{if((typeof options.otherParames).toLowerCase()=="string"||options.otherParames instanceof String){params.append("&"+options.otherParames)}else{if(options.otherParames instanceof Array){$.each(options.otherParames,function(i,objVal){params.append("&"+objVal.name+"="+objVal.value)})}else{for(var key in options.otherParames){params.append("&"+key+"="+options.otherParames[key])}}}}var condition=params.length==0?"":params.toString().substring(1);condition+=(condition.length==0?"":"&")+options.settings.requestParamsName.pageSize+"="+options.settings.pageSize+"&"+options.settings.requestParamsName.curPage+"="+curPage+"&"+options.settings.requestParamsName.sortName+"="+options.sortName+"&"+options.settings.requestParamsName.sortOrder+"="+options.sortOrder;return condition},search:function(options,params){if(params!=undefined){options.otherParames=params}else{options.otherParames=false}$.fn.bsgrid.page(1,options)},page:function(curPage,options){if($.trim(curPage)==""||isNaN(curPage)){$.fn.bsgrid.alert($.bsgridLanguage.needInteger);return}var dataType=options.settings.dataType;if(options.settings.localData!=false){if(dataType=="json"||dataType=="jsonp"){$.fn.bsgrid.loadGridData(dataType,$.fn.bsgrid.buildData.gridData(dataType,curPage,options.settings.localData),options)}else{if(dataType=="xml"){$.fn.bsgrid.loadGridData(dataType,""+$.fn.bsgrid.buildData.gridData(dataType,curPage,options.settings.localData)+" ",options)}}return}$.ajax({type:options.settings.ajaxType,url:options.settings.url,data:$.fn.bsgrid.getPageCondition(curPage,options),dataType:dataType,beforeSend:function(XMLHttpRequest){if(options.settings.isProcessLockScreen){$.fn.bsgrid.lockScreen(options)}options.settings.beforeSend(options,XMLHttpRequest)},complete:function(XMLHttpRequest,textStatus){options.settings.complete(options,XMLHttpRequest,textStatus);if(options.settings.isProcessLockScreen){$.fn.bsgrid.unlockScreen(options)}},success:function(gridData,textStatus){$.fn.bsgrid.loadGridData(dataType,gridData,options)},error:function(XMLHttpRequest,textStatus,errorThrown){$.fn.bsgrid.alert($.bsgridLanguage.errorForSendOrRequestData)}})},loadGridData:function(dataType,gridData,options){var parseSuccess=$.fn.bsgrid.parseData.success(dataType,gridData);for(var key in options.settings.extend.beforeRenderGridMethods){options.settings.extend.beforeRenderGridMethods[key](parseSuccess,gridData,options)}options.settings.additionalBeforeRenderGrid(parseSuccess,gridData,options);if(parseSuccess){var userdata=$.fn.bsgrid.parseData.userdata(dataType,gridData);$.fn.bsgrid.storeUserdata(userdata,options);options.settings.processUserdata(userdata,options);var totalRows=parseInt($.fn.bsgrid.parseData.totalRows(dataType,gridData));var curPage=parseInt($.fn.bsgrid.parseData.curPage(dataType,gridData));curPage=Math.max(curPage,1);if(options.settings.pageAll){curPage=1;options.settings.pageSize=totalRows;$("#"+options.noPagingationId).html(totalRows)}var pageSize=options.settings.pageSize;var totalPages=parseInt(totalRows/pageSize);totalPages=parseInt((totalRows%pageSize==0)?totalPages:totalPages+1);var curPageRowsNum=$.fn.bsgrid.parseData.getDataLen(dataType,gridData);curPageRowsNum=curPageRowsNum>pageSize?pageSize:curPageRowsNum;curPageRowsNum=(curPage*pageSize ';$(this).append(sortHtml).find(".sort").click(function(){$.fn.bsgrid.sort($(this).parent("th"),options)})}})},setGridBlankBody:function(options){var gridBody=$("#"+options.gridId+" tbody");gridBody.html("");var header=$.fn.bsgrid.getGridHeaderObject(options);var columnsModel=options.columnsModel;for(var hi=0;hi0){var trSb=new StringBuilder();trSb.append("");for(var hi=0;hi ")}trSb.append(" ");rowSb=trSb.toString()}var curPageRowsNum=options.settings.pageSize;if(!options.settings.displayBlankRows){curPageRowsNum=options.endRow-options.startRow+1;curPageRowsNum=options.endRow>0?curPageRowsNum:0}var rowsSb=new StringBuilder();if(curPageRowsNum==0){rowsSb.append(''+$.bsgridLanguage.noDataToDisplay+" ")}else{for(var pi=0;pi');if(options.settings.pageAll){pagingOutTabSb.append($.bsgridLanguage.noPagingation(options.noPagingationId)+" ")}pagingOutTabSb.append(" ");$("#"+options.gridId).after(pagingOutTabSb.toString())},clearRowData:function(rowIndex,options){$.fn.bsgrid.getRowCells(rowIndex,options).html(" ");$.fn.bsgrid.storeRowData(rowIndex,null,options)},clearGridBodyData:function(options){$.fn.bsgrid.getRows(options).each(function(i){$(this).find("td").html(" ");$.fn.bsgrid.storeRowData(i,null,options)})},addLockScreen:function(options){if($(".bsgrid.lockscreen").length==0){var lockScreenHtml=new StringBuilder();lockScreenHtml.append('');lockScreenHtml.append("
");lockScreenHtml.append('');lockScreenHtml.append('
'+$.bsgridLanguage.loadingDataMessage+"
");lockScreenHtml.append("
");$("body").append(lockScreenHtml.toString())}},lockScreen:function(options){$(".bsgrid.lockscreen").attr("times",parseInt($(".bsgrid.lockscreen").attr("times"))+1);if($(".bsgrid.lockscreen").css("display")=="none"){$(".bsgrid.lockscreen").show();$(".bsgrid.loading_div").show()}},unlockScreen:function(options){$(".bsgrid.lockscreen").attr("times",parseInt($(".bsgrid.lockscreen").attr("times"))-1);if($(".bsgrid.lockscreen").attr("times")=="0"){setTimeout(function(){$(".bsgrid.lockscreen").hide();$(".bsgrid.loading_div").hide()},50)}},columnTip:function(tdObj,value,record){tdObj.attr("title",value)},alert:function(msg){try{$.bsgrid.alert(msg)}catch(e){alert(msg)}},longLengthSubAndTip:function(tdObj,value,maxLen,record){var tip=false;if(value.length>maxLen){try{if(value.indexOf("<")<0||value.indexOf(">")<2||$(value).text().length==0){tip=true}}catch(e){tip=true}}if(tip){tdObj.html(value.substring(0,maxLen-3)+"...");$.fn.bsgrid.columnTip(tdObj,value,record)}else{tdObj.html(value)}},getPagingObj:function(options){return $.fn.bsgrid.getGridObj(options.gridId).pagingObj},refreshPage:function(options){if(!options.settings.pageAll){$.fn.bsgrid.getPagingObj(options).refreshPage()}else{$.fn.bsgrid.page(1,options)}},firstPage:function(options){$.fn.bsgrid.getPagingObj(options).firstPage()},prevPage:function(options){$.fn.bsgrid.getPagingObj(options).prevPage()},nextPage:function(options){$.fn.bsgrid.getPagingObj(options).nextPage()},lastPage:function(options){$.fn.bsgrid.getPagingObj(options).lastPage()},gotoPage:function(options,goPage){$.fn.bsgrid.getPagingObj(options).gotoPage(goPage)},initPaging:function(options){$("#"+options.pagingOutTabId+" td").attr("id",options.pagingId);return $.fn.bsgrid_paging.init(options.pagingId,{gridId:options.gridId,pageSize:options.settings.pageSize,pageSizeSelect:options.settings.pageSizeSelect,pageSizeForGrid:options.settings.pageSizeForGrid,pageIncorrectTurnAlert:options.settings.pageIncorrectTurnAlert,pagingLittleToolbar:options.settings.pagingLittleToolbar,pagingBtnClass:options.settings.pagingBtnClass})},setPagingValues:function(options){$.fn.bsgrid.getPagingObj(options).setPagingValues(options.curPage,options.totalRows)}}})(jQuery);
+(function($){$.fn.bsgrid.defaults.extend.settings={supportGridEdit:false,supportGridEditTriggerEvent:"rowClick",supportColumnMove:false,searchConditionsContainerId:"",fixedGridHeader:false,fixedGridHeight:"320px",gridEditConfigs:{text:{build:function(edit,value,record,rowIndex,colIndex,tdObj,trObj,options){return value+' '},val:function(formObj){return formObj.val()}},checkbox:{build:function(edit,value,record,rowIndex,colIndex,tdObj,trObj,options){return value+' '},val:function(formObj){return formObj.val()}},textarea:{build:function(edit,value,record,rowIndex,colIndex,tdObj,trObj,options){return value+'"},val:function(formObj){return formObj.val()}}}};$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.hidden=$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.text;$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.password=$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.text;$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.radio=$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.text;$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.button=$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.text;$.extend(true,$.fn.bsgrid.defaults.colsProperties,{lineNumberAttr:"w_num",checkAttr:"w_check",editAttr:"w_edit",aggAttr:"w_agg"});$.fn.bsgrid.defaults.event.customCellEditEvents={};$.fn.bsgrid.extendInitGrid={};$.fn.bsgrid.extendBeforeRenderGrid={};$.fn.bsgrid.extendRenderPerRow={};$.fn.bsgrid.extendRenderPerColumn={};$.fn.bsgrid.extendAfterRenderGrid={};$.fn.bsgrid.extendOtherMethods={};$.fn.bsgrid.extendInitGrid.initGridExtendOptions=function(gridId,options){var columnsModel=options.columnsModel;var colsProperties=options.settings.colsProperties;$.fn.bsgrid.getGridHeaderObject(options).each(function(i){columnsModel[i].lineNumber=$.trim($(this).attr(colsProperties.lineNumberAttr));columnsModel[i].check=$.trim($(this).attr(colsProperties.checkAttr));columnsModel[i].edit=$.trim($(this).attr(colsProperties.editAttr))});if($("#"+options.gridId+" tfoot tr td["+colsProperties.aggAttr+"!='']").length!=0){$("#"+options.gridId+" tfoot tr td").each(function(i){columnsModel[i].aggName="";columnsModel[i].aggIndex="";var aggInfo=$.trim($(this).attr(colsProperties.aggAttr));if(aggInfo.length!=0){var aggInfoArray=aggInfo.split(",");columnsModel[i].aggName=aggInfoArray[0].toLocaleLowerCase();columnsModel[i].aggIndex=aggInfoArray.length>1?aggInfoArray[1]:""}})}if($.fn.bsgrid.getGridHeaderObject(options).filter("["+colsProperties.lineNumberAttr+"$='line']").length!=0){options.settings.extend.afterRenderGridMethods.renderLineNumber=$.fn.bsgrid.extendAfterRenderGrid.renderLineNumber}if($.fn.bsgrid.getGridHeaderObject(options).filter("["+colsProperties.checkAttr+"='true']").length!=0){options.settings.extend.initGridMethods.initGridCheck=$.fn.bsgrid.extendInitGrid.initGridCheck;options.settings.extend.renderPerColumnMethods.renderCheck=$.fn.bsgrid.extendRenderPerColumn.renderCheck;options.settings.extend.afterRenderGridMethods.addCheckChangedEvent=$.fn.bsgrid.extendAfterRenderGrid.addCheckChangedEvent}if(options.settings.extend.settings.supportGridEdit){options.settings.extend.renderPerColumnMethods.renderForm=$.fn.bsgrid.extendRenderPerColumn.renderForm;options.settings.extend.afterRenderGridMethods.addGridEditEvent=$.fn.bsgrid.extendAfterRenderGrid.addGridEditEvent;options.settings.extend.afterRenderGridMethods.setOptionsFirstRowClone=$.fn.bsgrid.extendAfterRenderGrid.setOptionsFirstRowClone;var gridObj=$.fn.bsgrid.getGridObj(gridId);gridObj.activeGridEditMode=function(){return $.fn.bsgrid.defaults.extend.activeGridEditMode(options)};gridObj.getChangedRowsIndexs=function(){return $.fn.bsgrid.defaults.extend.getChangedRowsIndexs(options)};gridObj.getChangedRowsOldRecords=function(){return $.fn.bsgrid.defaults.extend.getChangedRowsOldRecords(options)};gridObj.getRowsChangedColumnsValue=function(){return $.fn.bsgrid.defaults.extend.getRowsChangedColumnsValue(options)};gridObj.deleteRow=function(row){$.fn.bsgrid.defaults.extend.deleteRow(row,options)};gridObj.addNewEditRow=function(){$.fn.bsgrid.defaults.extend.addNewEditRow(options)}}if(options.settings.extend.settings.supportColumnMove){options.settings.extend.initGridMethods.initColumnMove=$.fn.bsgrid.extendInitGrid.initColumnMove}if(options.settings.extend.settings.fixedGridHeader){options.settings.extend.initGridMethods.initFixedHeader=$.fn.bsgrid.extendOtherMethods.initFixedHeader;options.settings.extend.afterRenderGridMethods.fixedHeader=function(parseSuccess,gridData,options){$.fn.bsgrid.extendOtherMethods.fixedHeader(false,options)}}if($.trim(options.settings.extend.settings.searchConditionsContainerId)!=""){options.settings.extend.initGridMethods.initSearchConditions=$.fn.bsgrid.extendInitGrid.initSearchConditions}if($("#"+options.gridId+" tfoot td["+colsProperties.aggAttr+"!='']").length!=0){options.settings.extend.afterRenderGridMethods.aggregation=$.fn.bsgrid.extendAfterRenderGrid.aggregation}};$.fn.bsgrid.extendInitGrid.initGridCheck=function(gridId,options){$.fn.bsgrid.getGridHeaderObject(options).each(function(hi){if(options.columnsModel[hi].check=="true"){if($.trim($(this).html())==""){$(this).html(' ')}$(this).find("input[type=checkbox]").change(function(){var checked=$.bsgrid.adaptAttrOrProp($(this),"checked")?true:false;$.bsgrid.adaptAttrOrProp($.fn.bsgrid.getRows(options).find("td:nth-child("+(hi+1)+")>input[type=checkbox]"),"checked",checked)})}});var gridObj=$.fn.bsgrid.getGridObj(gridId);gridObj.getCheckedRowsIndexs=function(){return $.fn.bsgrid.defaults.extend.getCheckedRowsIndexs(options)};gridObj.getCheckedRowsRecords=function(){return $.fn.bsgrid.defaults.extend.getCheckedRowsRecords(options)};gridObj.getCheckedValues=function(index){return $.fn.bsgrid.defaults.extend.getCheckedValues(index,options)}};$.fn.bsgrid.extendInitGrid.initSearchConditions=function(gridId,options){var conditionsHtml=new StringBuilder();conditionsHtml.append('');var params={};$.fn.bsgrid.getGridHeaderObject(options).each(function(i){var index=options.columnsModel[i].index;var text=$.trim($(this).text());if(index!=""&&text!=""&&$.trim(params[index])==""){params[index]=text}});for(var key in params){conditionsHtml.append(''+params[key]+" ")}conditionsHtml.append(" ");conditionsHtml.append(" ");conditionsHtml.append(' ');$("#"+options.settings.extend.settings.searchConditionsContainerId).html(conditionsHtml.toString());$("#"+options.settings.extend.settings.searchConditionsContainerId+" select.bsgrid_conditions_select").change(function(){$(this).next("input.bsgrid_conditions_input").attr("name",$(this).val())}).trigger("change")};$.fn.bsgrid.extendInitGrid.initColumnMove=function(gridId,options){if($("#"+options.gridId+" thead tr").length!=1){return}$("#"+options.gridId).css({"table-layout":"fixed"});var headObj=$.fn.bsgrid.getGridHeaderObject(options);var headLen=headObj.length;headObj.each(function(i){var obj=this;$(obj).bind("selectstart",function(){return false});$(obj).css("-moz-user-select","none");$(obj).mousedown(function(){bindDownData(obj,i,headLen)});$(obj).mousemove(function(e){e=e||event;var left=$(obj).offset().left;var nObj=0,nLeft=0;if(i!=headLen-1){nObj=$(obj).next();nLeft=nObj.offset().left}var mObj=obj;if(i!=headLen-1&&e.clientX-nLeft>-10){mObj=nObj}if((i!=0&&e.clientX-left<10)||(i!=headLen-1&&e.clientX-nLeft>-10)){$(obj).css({cursor:"e-resize"});if($.trim($(obj).data("ex_mousedown"))!="mousedown"){return}var mWidth=$(mObj).width();var newMWidth=mWidth-e.clientX+$(mObj).offset().left;var preMWidth=$(mObj).prev().width();var preNewMWidth=preMWidth+e.clientX-$(mObj).offset().left;if(parseInt(newMWidth)>19&&parseInt(preNewMWidth)>19){$(mObj).width(newMWidth).prev().width(preNewMWidth)}}else{$(mObj).css({cursor:"default"});releaseDownData(obj,i,headLen)}});$(obj).mouseup(function(){releaseDownData(obj,i,headLen)});$(obj).mouseout(function(e){e=e||event;var objOffect=$(obj).offset();if(objOffect.top>e.clientY||objOffect.top+$(obj).height() '}return false};$.fn.bsgrid.extendRenderPerColumn.renderForm=function(record,rowIndex,colIndex,tdObj,trObj,options){var columnModel=options.columnsModel[colIndex];var edit=columnModel.edit;var value=$.fn.bsgrid.getRecordIndexValue(record,columnModel.index,options);var tdHtml=" ";if(edit in options.settings.extend.settings.gridEditConfigs){tdHtml=options.settings.extend.settings.gridEditConfigs[edit].build(edit,value,record,rowIndex,colIndex,tdObj,trObj,options)}else{return false}tdObj.html(tdHtml);tdObj.find(":input").addClass("bsgrid_editgrid_hidden");for(var key in options.settings.event.customCellEditEvents){tdObj.find(":input").each(function(){var formObj=$(this);formObj.bind(key,{formObj:formObj,record:record,rowIndex:rowIndex,colIndex:colIndex,tdObj:tdObj,trObj:trObj,options:options},function(event){options.settings.event.customCellEditEvents[key](event.data.formObj,event.data.record,event.data.rowIndex,event.data.colIndex,event.data.tdObj,event.data.trObj,event.data.options)})})}return false};$.fn.bsgrid.extendAfterRenderGrid.renderLineNumber=function(parseSuccess,gridData,options){$.fn.bsgrid.getGridHeaderObject(options).each(function(i){var num=options.columnsModel[i].lineNumber;if(num=="line"||num=="total_line"){$.fn.bsgrid.getRows(options).find("td:nth-child("+(i+1)+")").each(function(li){$(this).html((num=="line")?(li+1):(li+options.startRow))})}})};$.fn.bsgrid.extendAfterRenderGrid.addCheckChangedEvent=function(parseSuccess,gridData,options){$.fn.bsgrid.getGridHeaderObject(options).each(function(hi){if(options.columnsModel[hi].check=="true"){var checkboxObj=$(this).find("input[type=checkbox]");var checkboxObjs=$.fn.bsgrid.getRows(options).find("td:nth-child("+(hi+1)+")>input[type=checkbox]");checkboxObjs.change(function(){var allCheckboxObjs=$.fn.bsgrid.getRows(options).find("td:nth-child("+(hi+1)+")>input[type=checkbox]");var checked=$.bsgrid.adaptAttrOrProp(checkboxObj,"checked")?true:false;if(!checked&&allCheckboxObjs.filter(":checked").length==allCheckboxObjs.length){$.bsgrid.adaptAttrOrProp(checkboxObj,"checked",true)}else{if(checked&&allCheckboxObjs.filter(":checked").length!=allCheckboxObjs.length){$.bsgrid.adaptAttrOrProp(checkboxObj,"checked",false)}}})}})};$.fn.bsgrid.extendAfterRenderGrid.addGridEditEvent=function(parseSuccess,gridData,options){var gridObj=$.fn.bsgrid.getGridObj(options.gridId);$.fn.bsgrid.getRows(options).each(function(){var columnsModel=options.columnsModel;$(this).find("td").each(function(ci){if(columnsModel[ci].edit!=""){$(this).find(":input").change(function(){var rowObj=$(this).parent("td").parent("tr");var isNew=$.trim(rowObj.data("ex_new"));var value=gridObj.getRecordIndexValue(gridObj.getRowRecord(rowObj),columnsModel[ci].index);value=(isNew=="true"?"":value);if($.trim($(this).val())!=value){$(this).addClass("bsgrid_editgrid_change")}else{$(this).removeClass("bsgrid_editgrid_change")}rowObj.data("ex_change",rowObj.find(".bsgrid_editgrid_change").length)})}});if(options.settings.extend.settings.supportGridEditTriggerEvent==""){$(this).find(".bsgrid_editgrid_hidden").each(function(){showCellEdit(this)})}else{if(options.settings.extend.settings.supportGridEditTriggerEvent=="rowClick"){$(this).click(function(){$(this).find(".bsgrid_editgrid_hidden").each(function(){showCellEdit(this)})})}else{if(options.settings.extend.settings.supportGridEditTriggerEvent=="rowDoubleClick"){$(this).dblclick(function(){$(this).find(".bsgrid_editgrid_hidden").each(function(){showCellEdit(this)})})}else{if(options.settings.extend.settings.supportGridEditTriggerEvent=="cellClick"){$(this).find(".bsgrid_editgrid_hidden").each(function(){var formObj=this;$(formObj).parent("td").click(function(){showCellEdit(formObj)})})}else{if(options.settings.extend.settings.supportGridEditTriggerEvent=="cellDoubleClick"){$(this).find(".bsgrid_editgrid_hidden").each(function(){var formObj=this;$(formObj).parent("td").dblclick(function(){showCellEdit(formObj)})})}}}}}});function showCellEdit(formObj){var cloneObj=$(formObj).removeClass("bsgrid_editgrid_hidden").clone(true);$(formObj).parent("td").html(cloneObj)}};$.fn.bsgrid.extendAfterRenderGrid.aggregation=function(parseSuccess,gridData,options){var gridObj=$.fn.bsgrid.getGridObj(options.gridId);var columnsModel=options.columnsModel;$("#"+options.gridId+" tfoot tr td["+options.settings.colsProperties.aggAttr+"!='']").each(function(i){if(columnsModel[i].aggName!=""){var aggName=columnsModel[i].aggName;var val=null;if(aggName=="count"){val=options.curPageRowsNum}else{if(aggName=="countnotnone"||aggName=="sum"||aggName=="avg"||aggName=="max"||aggName=="min"||aggName=="concat"){if(aggName=="countnotnone"){val=0}var valHtml=new StringBuilder();$.fn.bsgrid.getRows(options).filter(":lt("+options.curPageRowsNum+")").each(function(ri){var rval=gridObj.getColumnValue(ri,columnsModel[i].aggIndex);if(rval==""){}else{if(aggName=="countnotnone"){val=(val==null?0:val)+1}else{if(aggName=="sum"||aggName=="avg"){if(!isNaN(rval)){val=(val==null?0:val)+parseFloat(rval)}}else{if(aggName=="max"||aggName=="min"){if(!isNaN(rval)&&(val==null||(aggName=="max"&&parseFloat(rval)>val)||(aggName=="min"&&parseFloat(rval)input:checked").length==1){rowIndexs[rowIndexs.length]=i}});return rowIndexs};$.fn.bsgrid.defaults.extend.getCheckedRowsRecords=function(options){var records=[];$.each($.fn.bsgrid.defaults.extend.getCheckedRowsIndexs(options),function(i,rowIndex){records[records.length]=$.fn.bsgrid.getRecord(rowIndex,options)});return records};$.fn.bsgrid.defaults.extend.getCheckedValues=function(index,options){var values=[];$.each($.fn.bsgrid.defaults.extend.getCheckedRowsRecords(options),function(i,record){values[values.length]=$.fn.bsgrid.getRecordIndexValue(record,index,options)});return values};$.fn.bsgrid.defaults.extend.activeGridEditMode=function(options){if(!options.settings.extend.settings.supportGridEdit){return}$.fn.bsgrid.getRows(options).find("td .bsgrid_editgrid_hidden").each(function(){var cloneObj=$(this).removeClass("bsgrid_editgrid_hidden").clone(true);$(this).parent("td").html(cloneObj)})};$.fn.bsgrid.defaults.extend.getChangedRowsIndexs=function(options){var rowIndexs=[];$.fn.bsgrid.getRows(options).each(function(i){var cellChangedNumStr=$.trim($(this).data("ex_change"));if(!isNaN(cellChangedNumStr)&&parseInt(cellChangedNumStr)>0){rowIndexs[rowIndexs.length]=i}});return rowIndexs};$.fn.bsgrid.defaults.extend.getChangedRowsOldRecords=function(options){var records=[];$.each($.fn.bsgrid.defaults.extend.getChangedRowsIndexs(options),function(i,rowIndex){records[records.length]=$.fn.bsgrid.getRecord(rowIndex,options)});return records};$.fn.bsgrid.defaults.extend.getRowsChangedColumnsValue=function(options){var values={};$.each($.fn.bsgrid.defaults.extend.getChangedRowsIndexs(options),function(i,rowIndex){values["row_"+rowIndex]={};$.fn.bsgrid.getRows(options).filter(":eq("+rowIndex+")").find("td").each(function(ci){if($(this).find(".bsgrid_editgrid_change").length>0){values["row_"+rowIndex][options.columnsModel[ci].index]=options.settings.extend.settings.gridEditConfigs[options.columnsModel[ci].edit].val($(this).find(".bsgrid_editgrid_change"))}})});return values};$.fn.bsgrid.defaults.extend.deleteRow=function(row,options){$.fn.bsgrid.getRow(row,options).remove()};$.fn.bsgrid.defaults.extend.addNewEditRow=function(options){var gridObj=$.fn.bsgrid.getGridObj(options.gridId);$("#"+options.gridId+" tbody").prepend(options.firstRowClone.clone(true));gridObj.getRowCells(0).each(function(colIndex){var columnModel=options.columnsModel[colIndex];if(columnModel.render!=""){var render_method=eval(columnModel.render);var render_html=render_method(null,0,colIndex,options);$(this).html(render_html)}else{if(columnModel.edit!="textarea"){$(this).children().val("")}else{$(this).children().text("")}$(this).html($(this).children().removeClass("bsgrid_editgrid_change").clone(true)).removeAttr("title")}});gridObj.getRow(0).data("record",null).data("ex_new","true")};$.fn.bsgrid.extendOtherMethods.fixedHeader=function(iFirst,options){var gridObj=$("#"+options.gridId);var gridFixedDivObj=$("#"+options.gridId+"_fixedDiv");if($.trim(gridFixedDivObj.data("ex_fixedGridLock"))=="lock"){return}gridFixedDivObj.data("ex_fixedGridLock","lock");var headTrNum=$("#"+options.gridId+" thead tr").length;if(!iFirst){headTrNum=headTrNum/2;$("#"+options.gridId+" thead tr:lt("+headTrNum+")").remove()}var fixedGridHeight=getSize(options.settings.extend.settings.fixedGridHeight);if(fixedGridHeight');$("#"+gridId+"_fixedDiv").data("ex_fixedGridLock","").css({padding:0,"border-width":0,width:"98%","overflow-y":"auto","margin-bottom":"-1px"});$("#"+gridId).css({width:"auto"});$("#"+gridId+"_pt_outTab").css({"border-top-width":"1px"});$.fn.bsgrid.extendOtherMethods.fixedHeader(true,options);$(window).resize(function(){$.fn.bsgrid.extendOtherMethods.fixedHeader(false,options)})}})(jQuery);
+(function(a){a.bsgrid_export={defaults:{url:"",exportFileName:"export",colsProperties:{width:100,align:"center",exportAttr:"w_export",indexAttr:"w_index",widthAttr:"width",alignAttr:"w_align"},colWidthPercentmultiplier:14,requestParamsName:{exportFileName:"exportFileName",colNames:"dataNames",colIndexs:"dataIndexs",colWidths:"dataLengths",colAligns:"dataAligns"}},doExport:function(h,o,d){if(o==undefined){o={}}var c={};if(d==undefined){d={}}a.extend(true,c,a.bsgrid_export.defaults,d);var n="",g="",m="",j="";for(var f=0;f ');var d=a(this).get(0).attributes;for(var e=0;e')})},showForm:function(b,c){b.formType=c;this.showOrHideRequireSpan(b,c);this.showOrHideAssistForms(b,c);this.showOrHideTag(b,c);if(c.startWith("view")){a(".formInput :input:not(:button,:submit,:reset)",b.jqueryObj).css({"border-width":"0"}).attr("readOnly","readOnly")}else{if(c.startWith("add")){a(".formInput :input:not(:button,:submit,:reset)",b.jqueryObj).css({border:"solid 1px #abadb3"}).removeAttr("readOnly")}else{if(c.startWith("edit")){a(".formInput :input:not(:button,:submit,:reset)",b.jqueryObj).css({border:"solid 1px #abadb3"}).removeAttr("readOnly");a(".formInput :input["+c+"Able=false]",b.jqueryObj).css({"border-width":"0"}).attr("readOnly","readOnly")}}}},showOrHideRequireSpan:function(b,c){if(c.startWith("view")){a(".formLabel span.require",b.jqueryObj).hide()}else{if(c.startWith("edit")){a(".formLabel:has(span.require) ~ .formInput:has(:input["+c+"Able=false])",b.jqueryObj).prev().find("span.require").hide()}else{a(".formLabel span.require",b.jqueryObj).show()}}},showOrHideAssistForms:function(b,c){a(".formInput select",b.jqueryObj).each(function(){var e=(c.startWith("view")||(c.startWith("edit")&&a(this).attr(c+"Able")=="false"))?"block":"none";a(this).prev("input").css("display",e).val(a(this).find("option:selected").text());var d=e=="block"?"none":"block";a(this).css("display",d)});a(".formInput textarea",b.jqueryObj).each(function(){var e=(c.startWith("view")||(c.startWith("edit")&&a(this).attr(c+"Able")=="false"))?"block":"none";a(this).prev("div").css("display",e).html(a(this).val());var d=e=="block"?"none":"block";a(this).css("display",d)})},showOrHideTag:function(b,c){a("*",b.jqueryObj).each(function(){var d=a.trim(a(this).attr("showType"));if(d!=""){if((c.startWith("view")||c.startWith("add")||c.startWith("edit"))&&(","+d+",").indexOf(","+c+",")>-1){a(this).show()}else{a(this).hide()}}})}}})(jQuery);
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/merged/form.all.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/merged/form.all.min.css
new file mode 100644
index 0000000..96f50e7
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/merged/form.all.min.css
@@ -0,0 +1,2 @@
+@CHARSET "UTF-8";.bsgrid_form{width:100%;font-size:13px;background-color:white}.bsgrid_form .formLabel{width:20%;color:#000;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bsgrid_form .formInput{width:80%;color:#333;text-align:left;overflow:auto}.bsgrid_form .formInput input,.bsgrid_form .formInput select,.bsgrid_form .formInput textarea,.bsgrid_form .formInput div.assist{width:64%;background-color:white}.bsgrid_form .formInput input{height:1.8em;line-height:1.8em;vertical-align:middle;padding-left:1px}.bsgrid_form .formInput textarea,.bsgrid_form .formInput div.assist{height:8em}.bsgrid_form .formInput div.assist{overflow:auto;word-wrap:break-word;word-break:break-all}.bsgrid_form .formInput .radio{width:20px}.bsgrid_form .formInput .checkbox{width:20px;text-align:left}.bsgrid_form .formInput .inputTip{margin-left:3px;color:#f18300;font-size:12px}.bsgrid_form .require{color:#f00;font-weight:bold;line-height:1.5em}
+@CHARSET "UTF-8";.bsgrid_icon{cursor:pointer;font-family:'微软雅黑',Verdana,sans-serif,'宋体',serif;font-size:12px;line-height:1.5em;color:#b22222;background:no-repeat 3px center}a.bsgrid_icon{padding-left:20px;text-decoration:underline}input.bsgrid_icon,button.bsgrid_icon{padding-left:20px;padding-right:4px;background-color:#d5e2f2;border:solid 1px #99bbe8;width:auto;overflow:visible}.icon_view{background-image:url(../images/icons/view-list-details-5.png)}.icon_add{background-image:url(../images/icons/list-add-6.png)}.icon_edit{background-image:url(../images/icons/page-edit.png)}.icon_save{background-image:url(../images/icons/document-save-6.png)}.icon_delete{background-image:url(../images/icons/edit-delete-6.png)}.icon_delete2{background-image:url(../images/icons/edit-delete-7.png)}.icon_close{background-image:url(../images/icons/window-close-4.png)}.icon_close2{background-image:url(../images/icons/window-close.png)}.icon_find{background-image:url(../images/icons/edit-find-8.png)}.icon_search{background-image:url(../images/icons/system-search-6.png)}.icon_refresh{background-image:url(../images/icons/arrow-refresh.png)}.icon_sort-view{background-image:url(../images/icons/sort-view.gif)}.icon_sort-asc{background-image:url(../images/icons/view-sort-descending-2.png)}.icon_sort-desc{background-image:url(../images/icons/view-sort-ascending-2.png)}.icon_copy{background-image:url(../images/icons/edit-copy-7.png)}.icon_cut{background-image:url(../images/icons/edit-cut-7.png)}.icon_paste{background-image:url(../images/icons/edit-paste-7.png)}.icon_download{background-image:url(../images/icons/download.png)}.icon_print{background-image:url(../images/icons/document-print-2.png)}.icon_mail{background-image:url(../images/icons/mail-generic.png)}.icon_accept{background-image:url(../images/icons/dialog-accept-2.png)}.icon_flag{background-image:url(../images/icons/flag.png)}.icon_about{background-image:url(../images/icons/help-about-3.png)}.icon_help{background-image:url(../images/icons/help.png)}.icon_documentation{background-image:url(../images/icons/documentation.png)}.icon_config{background-image:url(../images/icons/configure-2.png)}.icon_config2{background-image:url(../images/icons/system-config-boot.png)}.icon_text{background-image:url(../images/icons/mimetypes/silk_style/page-white_text.png)}.icon_pdf{background-image:url(../images/icons/mimetypes/silk_style/page-white_acrobat.png)}.icon_excel{background-image:url(../images/icons/mimetypes/silk_style/page-white_excel.png)}.icon_word{background-image:url(../images/icons/mimetypes/silk_style/page-white_word.png)}
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/merged/form.all.min.js b/public/static/admin_static/lib/jquery.bsgrid/builds/merged/form.all.min.js
new file mode 100644
index 0000000..72e0182
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/merged/form.all.min.js
@@ -0,0 +1,9 @@
+/**
+* jQuery.bsgrid v1.38 by @Baishui2004
+* Copyright 2014 Apache v2 License
+* https://github.com/baishui2004/jquery.bsgrid
+*/
+
+String.prototype.startWith=function(a){if(a==null||a==""||this.length==0||a.length>this.length){return false}else{return this.substr(0,a.length)==a}};String.prototype.endWith=function(a){if(a==null||a==""||this.length==0||a.length>this.length){return false}else{return this.substring(this.length-a.length)==a}};String.prototype.replaceAll=function(a,b){return this.replace(new RegExp(a,"gm"),b)};function StringBuilder(){if(arguments.length){this.append.apply(this,arguments)}}StringBuilder.prototype=function(){var c=Array.prototype.join,d=Array.prototype.slice,a=/\{(\d+)\}/g,b=function(){return c.call(this,"")};return{constructor:StringBuilder,length:0,append:Array.prototype.push,appendFormat:function(e){var g=0,f=d.call(arguments,1);this.append(a.test(e)?e.replace(a,function(h,j){return f[j]}):e.replace(/\?/g,function(){return f[g++]}));return this},size:function(){return this.toString().length},toString:b,valueOf:b}}();
+$.bsgrid={param:function(c,b){if(b==undefined){b=false}if(!b){return $.param(c)}var d=new StringBuilder();if(c instanceof Array){$.each(c,function(f,e){d.append("&"+e.name+"=");d.append(encodeURIComponent(encodeURIComponent(e.value)))})}else{for(var a in c){d.append("&"+a+"=");d.append(encodeURIComponent(encodeURIComponent(c[a])))}}return d.length>0?d.toString().substring(1):""},getKeysString:function(c,a){if(a==undefined){a=","}var d=new StringBuilder();if(c instanceof Array){$.each(c,function(f,e){if((d.toString()+a).indexOf(a+e.name+a)==-1){d.append(a+e.name)}})}else{for(var b in c){d.append(a+b)}}return d.length>0?d.toString().substring(1):""},forcePushPropertyInObject:function(b,a,c){if(b.hasOwnProperty(a)){b[a+"_f"]=c}else{b[a]=c}},adaptAttrOrProp:function(b,d,c){var a=parseInt($.fn.jquery.substring(0,$.fn.jquery.indexOf(".",2)).replace(".",""));if(c==undefined){if(a>=16){return b.prop(d)}else{return b.attr(d)}}else{if(a>=16){b.prop(d,c)}else{b.attr(d,c)}}},alert:function(a){alert(a)}};
+(function(a){a.fn.bsgrid_form={defaults:{},formObjs:{},init:function(e,d){var c={settings:a.extend(true,{},a.fn.bsgrid_form.defaults,d),formId:e,jqueryObj:a("#"+e),formType:""};var b={options:c,addAssistShowFormTags:function(){a.fn.bsgrid_form.addAssistShowFormTags(c)},showForm:function(f){a.fn.bsgrid_form.showForm(c,f)},showOrHideRequireSpan:function(f){a.fn.bsgrid_form.showOrHideRequireSpan(c,f)},showOrHideAssistForms:function(f){a.fn.bsgrid_form.showOrHideAssistForms(c,f)},showOrHideTag:function(f){a.fn.bsgrid_form.showOrHideTag(c,f)}};a.fn.bsgrid_form.formObjs[e]=b;b.addAssistShowFormTags();return b},getFormObj:function(c){var b=a.fn.bsgrid_form.formObjs[c];return b?b:null},addAssistShowFormTags:function(b){a(".formInput select",b.jqueryObj).each(function(){a(this).before(' ');var d=a(this).get(0).attributes;for(var e=0;e')})},showForm:function(b,c){b.formType=c;this.showOrHideRequireSpan(b,c);this.showOrHideAssistForms(b,c);this.showOrHideTag(b,c);if(c.startWith("view")){a(".formInput :input:not(:button,:submit,:reset)",b.jqueryObj).css({"border-width":"0"}).attr("readOnly","readOnly")}else{if(c.startWith("add")){a(".formInput :input:not(:button,:submit,:reset)",b.jqueryObj).css({border:"solid 1px #abadb3"}).removeAttr("readOnly")}else{if(c.startWith("edit")){a(".formInput :input:not(:button,:submit,:reset)",b.jqueryObj).css({border:"solid 1px #abadb3"}).removeAttr("readOnly");a(".formInput :input["+c+"Able=false]",b.jqueryObj).css({"border-width":"0"}).attr("readOnly","readOnly")}}}},showOrHideRequireSpan:function(b,c){if(c.startWith("view")){a(".formLabel span.require",b.jqueryObj).hide()}else{if(c.startWith("edit")){a(".formLabel:has(span.require) ~ .formInput:has(:input["+c+"Able=false])",b.jqueryObj).prev().find("span.require").hide()}else{a(".formLabel span.require",b.jqueryObj).show()}}},showOrHideAssistForms:function(b,c){a(".formInput select",b.jqueryObj).each(function(){var e=(c.startWith("view")||(c.startWith("edit")&&a(this).attr(c+"Able")=="false"))?"block":"none";a(this).prev("input").css("display",e).val(a(this).find("option:selected").text());var d=e=="block"?"none":"block";a(this).css("display",d)});a(".formInput textarea",b.jqueryObj).each(function(){var e=(c.startWith("view")||(c.startWith("edit")&&a(this).attr(c+"Able")=="false"))?"block":"none";a(this).prev("div").css("display",e).html(a(this).val());var d=e=="block"?"none":"block";a(this).css("display",d)})},showOrHideTag:function(b,c){a("*",b.jqueryObj).each(function(){var d=a.trim(a(this).attr("showType"));if(d!=""){if((c.startWith("view")||c.startWith("add")||c.startWith("edit"))&&(","+d+",").indexOf(","+c+",")>-1){a(this).show()}else{a(this).hide()}}})}}})(jQuery);
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/merged/grid.all.min.css b/public/static/admin_static/lib/jquery.bsgrid/builds/merged/grid.all.min.css
new file mode 100644
index 0000000..bc20d33
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/merged/grid.all.min.css
@@ -0,0 +1,4 @@
+@CHARSET "UTF-8";.bsgrid{font-size:13px;font-family:'微软雅黑',Verdana,sans-serif,'宋体',serif}table.bsgrid{width:98%;margin-right:5px;border-collapse:collapse}.bsgrid th,.bsgrid td{padding:3px;border:solid 1px #ccc;background-color:white;text-align:center;color:#333;line-height:1.8em}.bsgrid td.lineWrap{word-break:break-all}.bsgrid td.lineNoWrap{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bsgrid th{font-weight:400;background:url(../images/skins/default/bg.gif) repeat-x #f4f4f4}.bsgrid tr.even_index_row td{background-color:#eef}.bsgrid tr.row_hover td{background-color:#fff1cc!important}.bsgrid tr.selected.selected_color td{background-color:#fff1cc!important}.bsgrid a{color:#f60;text-decoration:none}.bsgrid th .sort.sort-view{background:url(../images/sort-view.gif) no-repeat center;margin-left:3px}.bsgrid th .sort.sort-asc{background:url(../images/sort-asc.gif) no-repeat top;margin-left:3px}.bsgrid th .sort.sort-desc{background:url(../images/sort-desc.gif) no-repeat bottom;margin-left:3px}.bsgrid.lockscreen{position:fixed;z-index:2014;display:none;left:0;top:0;width:100%;height:100%;background:#000;filter:alpha(opacity=10);opacity:.1;-moz-opacity:.1}.bsgrid.loading_div{position:fixed;z-index:2015;display:none;left:0;top:0;width:100%;height:100%}.bsgrid.loading_div table{width:100%;height:100%}.bsgrid.loading_div td{width:100%;height:100%;background-color:transparent!important;text-align:center;vertical-align:middle}.bsgrid.loading_div td div{width:200px;padding-top:8px;padding-bottom:8px;color:#000;border:solid 1px #999;background-color:#fff}.bsgrid.loading{padding-left:5px;line-height:1.5em}.bsgrid.loading span{background:url("../images/loading.gif") no-repeat center}.bsgridPagingOutTab{width:98%;margin-right:5px;border-collapse:collapse;border:solid 1px #ccc;background-color:white;border-top-width:0}
+@CHARSET "UTF-8";.bsgridPaging{font-size:13px;font-family:'微软雅黑',Verdana,sans-serif,'宋体',serif;width:770px;border-collapse:collapse}.bsgridPaging.pagingLittleToolbar{width:550px}.bsgridPaging.noPageSizeSelect{width:650px}.bsgridPaging.pagingLittleToolbar.noPageSizeSelect{width:430px}.bsgridPaging td{text-align:center}.bsgridPaging select{font-size:inherit;width:auto;height:auto;padding:1px;margin:1px}.bsgridPaging .pagingBtn{cursor:pointer;border:solid 1px #ccc;background:url(../images/skins/default/bg.gif) repeat-x #f4f4f4;font-size:inherit;font-family:inherit;color:inherit;padding:1px 3px;margin:1px}.bsgridPaging.pagingLittleToolbar .pagingBtn{width:16px;border-width:0;background:transparent no-repeat;padding:0;margin:3px}.bsgridPaging .pagingBtn.disabledCls{color:#999;filter:alpha(opacity=50);opacity:.5;-moz-opacity:.5}.bsgridPaging.pagingLittleToolbar .pagingBtn.firstPage{background-image:url(../images/icons/paging/go-first-view.png)}.bsgridPaging.pagingLittleToolbar .pagingBtn.prevPage{background-image:url(../images/icons/paging/go-previous-view.png)}.bsgridPaging.pagingLittleToolbar .pagingBtn.nextPage{background-image:url(../images/icons/paging/go-next-view.png)}.bsgridPaging.pagingLittleToolbar .pagingBtn.lastPage{background-image:url(../images/icons/paging/go-last-view.png)}.bsgridPaging .gotoPageInputTd{width:44px}.bsgridPaging .gotoPageInput{width:40px;height:auto;font-size:inherit;line-height:1em;color:inherit;border:solid 1px #ccc;padding:1px;margin:1px}.bsgridPaging .gotoPageButtonTd{text-align:left}.bsgridPaging .refreshPageTd{text-align:right;padding-right:4px}.bsgridPaging.pagingLittleToolbar .pagingBtn.gotoPage{background-image:url(../images/icons/paging/go-jump-2.png)}.bsgridPaging.pagingLittleToolbar .pagingBtn.refreshPage{background-image:url(../images/icons/paging/view-refresh-3.png)}
+@CHARSET "UTF-8";.bsgrid th .bsgrid_editgrid_check,.bsgrid td .bsgrid_editgrid_check{text-align:inherit}.bsgrid th .bsgrid_editgrid_checkbox,.bsgrid td .bsgrid_editgrid_checkbox{text-align:inherit}.bsgrid td .bsgrid_editgrid_edit{width:95%;text-align:inherit}.bsgrid td .bsgrid_editgrid_change{border-color:hotpink}.bsgrid td .bsgrid_editgrid_hidden{display:none}
+@CHARSET "UTF-8";.bsgrid_icon{cursor:pointer;font-family:'微软雅黑',Verdana,sans-serif,'宋体',serif;font-size:12px;line-height:1.5em;color:#b22222;background:no-repeat 3px center}a.bsgrid_icon{padding-left:20px;text-decoration:underline}input.bsgrid_icon,button.bsgrid_icon{padding-left:20px;padding-right:4px;background-color:#d5e2f2;border:solid 1px #99bbe8;width:auto;overflow:visible}.icon_view{background-image:url(../images/icons/view-list-details-5.png)}.icon_add{background-image:url(../images/icons/list-add-6.png)}.icon_edit{background-image:url(../images/icons/page-edit.png)}.icon_save{background-image:url(../images/icons/document-save-6.png)}.icon_delete{background-image:url(../images/icons/edit-delete-6.png)}.icon_delete2{background-image:url(../images/icons/edit-delete-7.png)}.icon_close{background-image:url(../images/icons/window-close-4.png)}.icon_close2{background-image:url(../images/icons/window-close.png)}.icon_find{background-image:url(../images/icons/edit-find-8.png)}.icon_search{background-image:url(../images/icons/system-search-6.png)}.icon_refresh{background-image:url(../images/icons/arrow-refresh.png)}.icon_sort-view{background-image:url(../images/icons/sort-view.gif)}.icon_sort-asc{background-image:url(../images/icons/view-sort-descending-2.png)}.icon_sort-desc{background-image:url(../images/icons/view-sort-ascending-2.png)}.icon_copy{background-image:url(../images/icons/edit-copy-7.png)}.icon_cut{background-image:url(../images/icons/edit-cut-7.png)}.icon_paste{background-image:url(../images/icons/edit-paste-7.png)}.icon_download{background-image:url(../images/icons/download.png)}.icon_print{background-image:url(../images/icons/document-print-2.png)}.icon_mail{background-image:url(../images/icons/mail-generic.png)}.icon_accept{background-image:url(../images/icons/dialog-accept-2.png)}.icon_flag{background-image:url(../images/icons/flag.png)}.icon_about{background-image:url(../images/icons/help-about-3.png)}.icon_help{background-image:url(../images/icons/help.png)}.icon_documentation{background-image:url(../images/icons/documentation.png)}.icon_config{background-image:url(../images/icons/configure-2.png)}.icon_config2{background-image:url(../images/icons/system-config-boot.png)}.icon_text{background-image:url(../images/icons/mimetypes/silk_style/page-white_text.png)}.icon_pdf{background-image:url(../images/icons/mimetypes/silk_style/page-white_acrobat.png)}.icon_excel{background-image:url(../images/icons/mimetypes/silk_style/page-white_excel.png)}.icon_word{background-image:url(../images/icons/mimetypes/silk_style/page-white_word.png)}
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/merged/grid.all.min.js b/public/static/admin_static/lib/jquery.bsgrid/builds/merged/grid.all.min.js
new file mode 100644
index 0000000..a412e21
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/merged/grid.all.min.js
@@ -0,0 +1,12 @@
+/**
+* jQuery.bsgrid v1.38 by @Baishui2004
+* Copyright 2014 Apache v2 License
+* https://github.com/baishui2004/jquery.bsgrid
+*/
+
+String.prototype.startWith=function(a){if(a==null||a==""||this.length==0||a.length>this.length){return false}else{return this.substr(0,a.length)==a}};String.prototype.endWith=function(a){if(a==null||a==""||this.length==0||a.length>this.length){return false}else{return this.substring(this.length-a.length)==a}};String.prototype.replaceAll=function(a,b){return this.replace(new RegExp(a,"gm"),b)};function StringBuilder(){if(arguments.length){this.append.apply(this,arguments)}}StringBuilder.prototype=function(){var c=Array.prototype.join,d=Array.prototype.slice,a=/\{(\d+)\}/g,b=function(){return c.call(this,"")};return{constructor:StringBuilder,length:0,append:Array.prototype.push,appendFormat:function(e){var g=0,f=d.call(arguments,1);this.append(a.test(e)?e.replace(a,function(h,j){return f[j]}):e.replace(/\?/g,function(){return f[g++]}));return this},size:function(){return this.toString().length},toString:b,valueOf:b}}();
+$.bsgrid={param:function(c,b){if(b==undefined){b=false}if(!b){return $.param(c)}var d=new StringBuilder();if(c instanceof Array){$.each(c,function(f,e){d.append("&"+e.name+"=");d.append(encodeURIComponent(encodeURIComponent(e.value)))})}else{for(var a in c){d.append("&"+a+"=");d.append(encodeURIComponent(encodeURIComponent(c[a])))}}return d.length>0?d.toString().substring(1):""},getKeysString:function(c,a){if(a==undefined){a=","}var d=new StringBuilder();if(c instanceof Array){$.each(c,function(f,e){if((d.toString()+a).indexOf(a+e.name+a)==-1){d.append(a+e.name)}})}else{for(var b in c){d.append(a+b)}}return d.length>0?d.toString().substring(1):""},forcePushPropertyInObject:function(b,a,c){if(b.hasOwnProperty(a)){b[a+"_f"]=c}else{b[a]=c}},adaptAttrOrProp:function(b,d,c){var a=parseInt($.fn.jquery.substring(0,$.fn.jquery.indexOf(".",2)).replace(".",""));if(c==undefined){if(a>=16){return b.prop(d)}else{return b.attr(d)}}else{if(a>=16){b.prop(d,c)}else{b.attr(d,c)}}},alert:function(a){alert(a)}};
+(function(a){a.fn.bsgrid_paging={defaults:{loopback:false,pageSize:20,pageSizeSelect:false,pageSizeForGrid:[5,10,20,25,50,100,200,500],pageIncorrectTurnAlert:true,pagingLittleToolbar:false,pagingBtnClass:"pagingBtn",pagingMinWidth:"auto",pagingBtnShowState:{select:true,first:true,prev:true,next:true,last:true,gotoBtn:true,refresh:true}},pagingObjs:{},init:function(h,g){var d={settings:a.extend(true,{},a.fn.bsgrid_paging.defaults,g),pagingId:h,totalRowsId:h+"_totalRows",totalPagesId:h+"_totalPages",curPageId:h+"_curPage",gotoPageInputId:h+"_gotoPageInput",gotoPageId:h+"_gotoPage",refreshPageId:h+"_refreshPage",pageSizeId:h+"_pageSize",firstPageId:h+"_firstPage",prevPageId:h+"_prevPage",nextPageId:h+"_nextPage",lastPageId:h+"_lastPage",startRowId:h+"_startRow",endRowId:h+"_endRow",totalRows:0,totalPages:0,curPage:1,curPageRowsNum:0,startRow:0,endRow:0};if(g.pageSizeForGrid!=undefined){d.settings.pageSizeForGrid=g.pageSizeForGrid}var b={options:d,page:function(i){a.fn.bsgrid_paging.page(i,d)},getCurPage:function(){return a.fn.bsgrid_paging.getCurPage(d)},refreshPage:function(){a.fn.bsgrid_paging.refreshPage(d)},firstPage:function(){a.fn.bsgrid_paging.firstPage(d)},prevPage:function(){a.fn.bsgrid_paging.prevPage(d)},nextPage:function(){a.fn.bsgrid_paging.nextPage(d)},lastPage:function(){a.fn.bsgrid_paging.lastPage(d)},gotoPage:function(i){a.fn.bsgrid_paging.gotoPage(d,i)},createPagingToolbar:function(){return a.fn.bsgrid_paging.createPagingToolbar(d)},setPagingToolbarEvents:function(){a.fn.bsgrid_paging.setPagingToolbarEvents(d)},dynamicChangePagingButtonStyle:function(){a.fn.bsgrid_paging.dynamicChangePagingButtonStyle(d)},setPagingValues:function(j,i){a.fn.bsgrid_paging.setPagingValues(j,i,d)}};a.fn.bsgrid_paging.pagingObjs[h]=b;a("#"+h).append(b.createPagingToolbar());if(d.settings.pageSizeSelect){if(a.inArray(d.settings.pageSize,d.settings.pageSizeForGrid)==-1){d.settings.pageSizeForGrid.push(d.settings.pageSize)}d.settings.pageSizeForGrid.sort(function(j,i){return j-i});var f=new StringBuilder();for(var e=0;e'+c+"")}a("#"+d.pageSizeId).html(f.toString()).val(d.settings.pageSize)}b.setPagingToolbarEvents();return b},getPagingObj:function(c){var b=a.fn.bsgrid_paging.pagingObjs[c];return b?b:null},page:function(c,b){var d=a.fn.bsgrid.getGridObj(b.settings.gridId);d.options.settings.pageSize=b.settings.pageSize;a.fn.bsgrid.page(c,d.options)},getCurPage:function(b){var c=a("#"+b.curPageId).html();return c==""?1:c},refreshPage:function(b){a.fn.bsgrid_paging.page(a.fn.bsgrid_paging.getCurPage(b),b)},firstPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c<=1){a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isFirstPage);return}a.fn.bsgrid_paging.page(1,b)},prevPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c<=1){if(b.settings.loopback&&b.totalPages>0){a.fn.bsgrid_paging.page(b.totalPages,b);return}else{a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isFirstPage);return}}a.fn.bsgrid_paging.page(parseInt(c)-1,b)},nextPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c>=b.totalPages){if(b.settings.loopback&&c>0){a.fn.bsgrid_paging.page(1,b);return}else{a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isLastPage);return}}a.fn.bsgrid_paging.page(parseInt(c)+1,b)},lastPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c>=b.totalPages){a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isLastPage);return}a.fn.bsgrid_paging.page(b.totalPages,b)},gotoPage:function(b,c){if(c==undefined){c=a("#"+b.gotoPageInputId).val()}if(a.trim(c)==""||isNaN(c)){a.fn.bsgrid_paging.alert(a.bsgridLanguage.needInteger)}else{if(parseInt(c)<1||parseInt(c)>b.totalPages){a.fn.bsgrid_paging.alert(a.bsgridLanguage.needRange(1,b.totalPages))}else{a("#"+b.gotoPageInputId).val(c);a.fn.bsgrid_paging.page(parseInt(c),b)}}},incorrectTurnAlert:function(b,c){if(b.settings.pageIncorrectTurnAlert){a.fn.bsgrid_paging.alert(c)}},alert:function(c){try{a.bsgrid.alert(c)}catch(b){alert(c)}},createPagingToolbar:function(b){var e=new StringBuilder();var c=b.settings.pagingLittleToolbar;e.append('");return e.toString()},setPagingToolbarEvents:function(b){if(b.settings.pageSizeSelect){a("#"+b.pageSizeId).change(function(){b.settings.pageSize=parseInt(a(this).val());a(this).trigger("blur");a.fn.bsgrid_paging.page(1,b)})}a("#"+b.firstPageId).click(function(){a.fn.bsgrid_paging.firstPage(b)});a("#"+b.prevPageId).click(function(){a.fn.bsgrid_paging.prevPage(b)});a("#"+b.nextPageId).click(function(){a.fn.bsgrid_paging.nextPage(b)});a("#"+b.lastPageId).click(function(){a.fn.bsgrid_paging.lastPage(b)});a("#"+b.gotoPageInputId).keyup(function(c){if(c.which==13){a.fn.bsgrid_paging.gotoPage(b)}});a("#"+b.gotoPageId).click(function(){a.fn.bsgrid_paging.gotoPage(b)});a("#"+b.refreshPageId).click(function(){a.fn.bsgrid_paging.refreshPage(b)})},dynamicChangePagingButtonStyle:function(b){var c="disabledCls";if(b.curPage<=1){a("#"+b.firstPageId).addClass(c);a("#"+b.prevPageId).addClass(c)}else{a("#"+b.firstPageId).removeClass(c);a("#"+b.prevPageId).removeClass(c)}if(b.curPage>=b.totalPages){a("#"+b.nextPageId).addClass(c);a("#"+b.lastPageId).addClass(c)}else{a("#"+b.nextPageId).removeClass(c);a("#"+b.lastPageId).removeClass(c)}},setPagingValues:function(i,g,f){i=Math.max(i,1);var b=f.settings.pageSize;var h=parseInt(g/b);h=parseInt((g%b==0)?h:h+1);var e=(i*b");$("#"+gridId).find("tr:lt("+($("#"+gridId+" tr").length-$("#"+gridId+" tfoot tr").length)+")").appendTo($("#"+gridId+" thead"))}if($("#"+gridId).find("tbody").length==0){$("#"+gridId+" thead").after(" ")}if($("#"+gridId).find("tfoot").length==0){$("#"+gridId).append(' ')}options.columnsModel=$.fn.bsgrid.initColumnsModel(options);if(settings.pageSizeForGrid!=undefined){options.settings.pageSizeForGrid=settings.pageSizeForGrid}options.settings.dataType=options.settings.dataType.toLowerCase();if(options.settings.pageSizeSelect){if($.inArray(options.settings.pageSize,options.settings.pageSizeForGrid)==-1){options.settings.pageSizeForGrid.push(options.settings.pageSize)}options.settings.pageSizeForGrid.sort(function(a,b){return a-b})}var gridObj={options:options,getCondition:function(){return $.fn.bsgrid.getPageCondition(options.curPage,options)},getPageCondition:function(curPage){return $.fn.bsgrid.getPageCondition(curPage,options)},page:function(curPage){$.fn.bsgrid.page(curPage,options)},search:function(params){$.fn.bsgrid.search(options,params)},loadGridData:function(dataType,gridData){$.fn.bsgrid.loadGridData(dataType,gridData,options)},loadRowData:function(record,rowIndex,trObj){$.fn.bsgrid.loadRowData(options,record,rowIndex,trObj)},reloadLocalData:function(localData){$.fn.bsgrid.reloadLocalData(localData,options)},getPageSize:function(){return options.settings.pageSize},getTotalRows:function(){return options.totalRows},getTotalPages:function(){return options.totalPages},getCurPage:function(){return options.curPage},getCurPageRowsNum:function(){return options.curPageRowsNum},getStartRow:function(){return options.startRow},getEndRow:function(){return options.endRow},getSortName:function(){return options.sortName},getSortOrder:function(){return options.sortOrder},getRows:function(){return $.fn.bsgrid.getRows(options)},getRow:function(row){return $.fn.bsgrid.getRow(row,options)},getRowCells:function(row){return $.fn.bsgrid.getRowCells(row,options)},getColCells:function(col){return $.fn.bsgrid.getColCells(col,options)},getCell:function(row,col){return $.fn.bsgrid.getCell(row,col,options)},getSelectedRow:function(){return $.fn.bsgrid.getSelectedRow(options)},getSelectedRowIndex:function(){return $.fn.bsgrid.getSelectedRowIndex(options)},selectRow:function(row){return $.fn.bsgrid.selectRow(row,options)},unSelectRow:function(){return $.fn.bsgrid.unSelectRow(options)},getUserdata:function(){return $.fn.bsgrid.getUserdata(options)},getRowRecord:function(rowObj){return $.fn.bsgrid.getRowRecord(rowObj)},getAllRecords:function(){return $.fn.bsgrid.getAllRecords(options)},getRecord:function(row){return $.fn.bsgrid.getRecord(row,options)},getRecordIndexValue:function(record,index){return $.fn.bsgrid.getRecordIndexValue(record,index,options)},getColumnValue:function(row,index){return $.fn.bsgrid.getColumnValue(row,index,options)},getCellRecordValue:function(row,col){return $.fn.bsgrid.getCellRecordValue(row,col,options)},sort:function(obj){$.fn.bsgrid.sort(obj,options)},getGridHeaderObject:function(){return $.fn.bsgrid.getGridHeaderObject(options)},getColumnModel:function(colIndex){return $.fn.bsgrid.getColumnModel(colIndex,options)},appendHeaderSort:function(){$.fn.bsgrid.appendHeaderSort(options)},setGridBlankBody:function(){return $.fn.bsgrid.setGridBlankBody(options)},createPagingOutTab:function(){$.fn.bsgrid.createPagingOutTab(options)},clearRowData:function(rowIndex){$.fn.bsgrid.clearRowData(rowIndex,options)},clearGridBodyData:function(){$.fn.bsgrid.clearGridBodyData(options)},getPagingObj:function(){return $.fn.bsgrid.getPagingObj(options)},refreshPage:function(){$.fn.bsgrid.refreshPage(options)},firstPage:function(){$.fn.bsgrid.firstPage(options)},prevPage:function(){$.fn.bsgrid.prevPage(options)},nextPage:function(){$.fn.bsgrid.nextPage(options)},lastPage:function(){$.fn.bsgrid.lastPage(options)},gotoPage:function(goPage){$.fn.bsgrid.gotoPage(options,goPage)},initPaging:function(){return $.fn.bsgrid.initPaging(options)},setPagingValues:function(){$.fn.bsgrid.setPagingValues(options)}};$.fn.bsgrid.gridObjs[gridId]=gridObj;if(options.settings.pageAll||options.settings.pageSize<1){options.settings.pageAll=true;options.settings.pageSize=0}gridObj.appendHeaderSort();gridObj.createPagingOutTab();if(!options.settings.showPageToolbar){$("#"+options.pagingId).hide();$("#"+options.pagingOutTabId).hide()}if(!options.settings.pageAll){gridObj.pagingObj=gridObj.initPaging();try{var minWidth=$.trim($("#"+options.pagingId).children().width());minWidth=minWidth==""?0:parseInt(minWidth);if(minWidth!=0){$("#"+gridId).css("min-width",minWidth+16);$("#"+options.pagingOutTabId).css("min-width",minWidth+16)}$("#"+options.pagingOutTabId).width($("#"+gridId).width());$(window).resize(function(){$("#"+options.pagingOutTabId).width($("#"+gridId).width())})}catch(e){}}if(options.settings.isProcessLockScreen){$.fn.bsgrid.addLockScreen(options)}try{$.fn.bsgrid.extendInitGrid.initGridExtendOptions(gridId,options)}catch(e){}for(var key in options.settings.extend.initGridMethods){options.settings.extend.initGridMethods[key](gridId,options)}if(options.settings.autoLoad){setTimeout(function(){gridObj.page(1)},10)}else{gridObj.setGridBlankBody()}return gridObj},initColumnsModel:function(options){var columnsModel=[];$.fn.bsgrid.getGridHeaderObject(options).each(function(){var headObj=$(this);var colsProperties=options.settings.colsProperties;var columnModel={};columnModel.sortName="";columnModel.sortOrder="";var sortInfo=$.trim(headObj.attr(colsProperties.sortAttr));if(sortInfo.length!=0){var sortInfoArray=sortInfo.split(",");columnModel.sortName=$.trim(sortInfoArray[0]);columnModel.sortOrder=$.trim(sortInfoArray.length>1?sortInfoArray[1]:"")}columnModel.index=$.trim(headObj.attr(colsProperties.indexAttr));columnModel.render=$.trim(headObj.attr(colsProperties.renderAttr));columnModel.tip=$.trim(headObj.attr(colsProperties.tipAttr));var maxLen=$.trim(headObj.attr(colsProperties.lengthAttr));columnModel.maxLen=maxLen.length!=0?parseInt(maxLen):colsProperties.maxLength;var align=$.trim(headObj.attr(colsProperties.alignAttr));columnModel.align=align==""?colsProperties.align:align;columnModel.hidden=$.trim(headObj.attr(colsProperties.hiddenAttr));columnsModel.push(columnModel)});return columnsModel},getGridObj:function(gridId){var obj=$.fn.bsgrid.gridObjs[gridId];return obj?obj:null},buildData:{gridData:function(type,curPage,data){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.buildJsonData.gridData(curPage,data)}else{if(type=="xml"){return $.fn.bsgrid.buildXmlData.gridData(curPage,data)}}return false}},parseData:{success:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.success(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.success(gridData)}}return false},totalRows:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.totalRows(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.totalRows(gridData)}}return false},curPage:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.curPage(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.curPage(gridData)}}return false},data:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.data(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.data(gridData)}}return false},userdata:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.userdata(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.userdata(gridData)}}return false},getDataLen:function(type,gridData){if(type=="json"||type=="jsonp"||type=="xml"){return $.fn.bsgrid.parseData.data(type,gridData).length}return 0},getRecord:function(type,data,row){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.getRecord(data,row)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.getRecord(data,row)}}return false},getColumnValue:function(type,record,index){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.getColumnValue(record,index)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.getColumnValue(record,index)}}return false}},buildJsonData:{gridData:function(curPage,data){return{success:true,totalRows:data.length,curPage:curPage,data:data}}},parseJsonData:{success:function(json){return json.success},totalRows:function(json){return json.totalRows},curPage:function(json){return json.curPage},data:function(json){return json.data},userdata:function(json){return json.userdata},getRecord:function(data,row){return data[row]},getColumnValue:function(record,index){return record[index]}},buildXmlData:{gridData:function(curPage,data){return'true '+$(""+data+" ").find("row").length+" "+curPage+" "+data+" "}},parseXmlData:{success:function(xml){return $.trim($(xml).find("gridData success").text())=="true"},totalRows:function(xml){return parseInt($(xml).find("gridData totalRows").text())},curPage:function(xml){return parseInt($(xml).find("gridData curPage").text())},data:function(xml){return $(xml).find("gridData data row")},userdata:function(xml){return $(xml).find("gridData userdata")},getRecord:function(data,row){return data.eq(row)},getColumnValue:function(record,index){return record.find(index).text()}},getPageCondition:function(curPage,options){var params=new StringBuilder();if(options.otherParames==false){}else{if((typeof options.otherParames).toLowerCase()=="string"||options.otherParames instanceof String){params.append("&"+options.otherParames)}else{if(options.otherParames instanceof Array){$.each(options.otherParames,function(i,objVal){params.append("&"+objVal.name+"="+objVal.value)})}else{for(var key in options.otherParames){params.append("&"+key+"="+options.otherParames[key])}}}}var condition=params.length==0?"":params.toString().substring(1);condition+=(condition.length==0?"":"&")+options.settings.requestParamsName.pageSize+"="+options.settings.pageSize+"&"+options.settings.requestParamsName.curPage+"="+curPage+"&"+options.settings.requestParamsName.sortName+"="+options.sortName+"&"+options.settings.requestParamsName.sortOrder+"="+options.sortOrder;return condition},search:function(options,params){if(params!=undefined){options.otherParames=params}else{options.otherParames=false}$.fn.bsgrid.page(1,options)},page:function(curPage,options){if($.trim(curPage)==""||isNaN(curPage)){$.fn.bsgrid.alert($.bsgridLanguage.needInteger);return}var dataType=options.settings.dataType;if(options.settings.localData!=false){if(dataType=="json"||dataType=="jsonp"){$.fn.bsgrid.loadGridData(dataType,$.fn.bsgrid.buildData.gridData(dataType,curPage,options.settings.localData),options)}else{if(dataType=="xml"){$.fn.bsgrid.loadGridData(dataType,""+$.fn.bsgrid.buildData.gridData(dataType,curPage,options.settings.localData)+" ",options)}}return}$.ajax({type:options.settings.ajaxType,url:options.settings.url,data:$.fn.bsgrid.getPageCondition(curPage,options),dataType:dataType,beforeSend:function(XMLHttpRequest){if(options.settings.isProcessLockScreen){$.fn.bsgrid.lockScreen(options)}options.settings.beforeSend(options,XMLHttpRequest)},complete:function(XMLHttpRequest,textStatus){options.settings.complete(options,XMLHttpRequest,textStatus);if(options.settings.isProcessLockScreen){$.fn.bsgrid.unlockScreen(options)}},success:function(gridData,textStatus){$.fn.bsgrid.loadGridData(dataType,gridData,options)},error:function(XMLHttpRequest,textStatus,errorThrown){$.fn.bsgrid.alert($.bsgridLanguage.errorForSendOrRequestData)}})},loadGridData:function(dataType,gridData,options){var parseSuccess=$.fn.bsgrid.parseData.success(dataType,gridData);for(var key in options.settings.extend.beforeRenderGridMethods){options.settings.extend.beforeRenderGridMethods[key](parseSuccess,gridData,options)}options.settings.additionalBeforeRenderGrid(parseSuccess,gridData,options);if(parseSuccess){var userdata=$.fn.bsgrid.parseData.userdata(dataType,gridData);$.fn.bsgrid.storeUserdata(userdata,options);options.settings.processUserdata(userdata,options);var totalRows=parseInt($.fn.bsgrid.parseData.totalRows(dataType,gridData));var curPage=parseInt($.fn.bsgrid.parseData.curPage(dataType,gridData));curPage=Math.max(curPage,1);if(options.settings.pageAll){curPage=1;options.settings.pageSize=totalRows;$("#"+options.noPagingationId).html(totalRows)}var pageSize=options.settings.pageSize;var totalPages=parseInt(totalRows/pageSize);totalPages=parseInt((totalRows%pageSize==0)?totalPages:totalPages+1);var curPageRowsNum=$.fn.bsgrid.parseData.getDataLen(dataType,gridData);curPageRowsNum=curPageRowsNum>pageSize?pageSize:curPageRowsNum;curPageRowsNum=(curPage*pageSize ';$(this).append(sortHtml).find(".sort").click(function(){$.fn.bsgrid.sort($(this).parent("th"),options)})}})},setGridBlankBody:function(options){var gridBody=$("#"+options.gridId+" tbody");gridBody.html("");var header=$.fn.bsgrid.getGridHeaderObject(options);var columnsModel=options.columnsModel;for(var hi=0;hi0){var trSb=new StringBuilder();trSb.append("");for(var hi=0;hi ")}trSb.append(" ");rowSb=trSb.toString()}var curPageRowsNum=options.settings.pageSize;if(!options.settings.displayBlankRows){curPageRowsNum=options.endRow-options.startRow+1;curPageRowsNum=options.endRow>0?curPageRowsNum:0}var rowsSb=new StringBuilder();if(curPageRowsNum==0){rowsSb.append(''+$.bsgridLanguage.noDataToDisplay+" ")}else{for(var pi=0;pi');if(options.settings.pageAll){pagingOutTabSb.append($.bsgridLanguage.noPagingation(options.noPagingationId)+" ")}pagingOutTabSb.append(" ");$("#"+options.gridId).after(pagingOutTabSb.toString())},clearRowData:function(rowIndex,options){$.fn.bsgrid.getRowCells(rowIndex,options).html(" ");$.fn.bsgrid.storeRowData(rowIndex,null,options)},clearGridBodyData:function(options){$.fn.bsgrid.getRows(options).each(function(i){$(this).find("td").html(" ");$.fn.bsgrid.storeRowData(i,null,options)})},addLockScreen:function(options){if($(".bsgrid.lockscreen").length==0){var lockScreenHtml=new StringBuilder();lockScreenHtml.append('');lockScreenHtml.append("
");lockScreenHtml.append('');lockScreenHtml.append('
'+$.bsgridLanguage.loadingDataMessage+"
");lockScreenHtml.append("
");$("body").append(lockScreenHtml.toString())}},lockScreen:function(options){$(".bsgrid.lockscreen").attr("times",parseInt($(".bsgrid.lockscreen").attr("times"))+1);if($(".bsgrid.lockscreen").css("display")=="none"){$(".bsgrid.lockscreen").show();$(".bsgrid.loading_div").show()}},unlockScreen:function(options){$(".bsgrid.lockscreen").attr("times",parseInt($(".bsgrid.lockscreen").attr("times"))-1);if($(".bsgrid.lockscreen").attr("times")=="0"){setTimeout(function(){$(".bsgrid.lockscreen").hide();$(".bsgrid.loading_div").hide()},50)}},columnTip:function(tdObj,value,record){tdObj.attr("title",value)},alert:function(msg){try{$.bsgrid.alert(msg)}catch(e){alert(msg)}},longLengthSubAndTip:function(tdObj,value,maxLen,record){var tip=false;if(value.length>maxLen){try{if(value.indexOf("<")<0||value.indexOf(">")<2||$(value).text().length==0){tip=true}}catch(e){tip=true}}if(tip){tdObj.html(value.substring(0,maxLen-3)+"...");$.fn.bsgrid.columnTip(tdObj,value,record)}else{tdObj.html(value)}},getPagingObj:function(options){return $.fn.bsgrid.getGridObj(options.gridId).pagingObj},refreshPage:function(options){if(!options.settings.pageAll){$.fn.bsgrid.getPagingObj(options).refreshPage()}else{$.fn.bsgrid.page(1,options)}},firstPage:function(options){$.fn.bsgrid.getPagingObj(options).firstPage()},prevPage:function(options){$.fn.bsgrid.getPagingObj(options).prevPage()},nextPage:function(options){$.fn.bsgrid.getPagingObj(options).nextPage()},lastPage:function(options){$.fn.bsgrid.getPagingObj(options).lastPage()},gotoPage:function(options,goPage){$.fn.bsgrid.getPagingObj(options).gotoPage(goPage)},initPaging:function(options){$("#"+options.pagingOutTabId+" td").attr("id",options.pagingId);return $.fn.bsgrid_paging.init(options.pagingId,{gridId:options.gridId,pageSize:options.settings.pageSize,pageSizeSelect:options.settings.pageSizeSelect,pageSizeForGrid:options.settings.pageSizeForGrid,pageIncorrectTurnAlert:options.settings.pageIncorrectTurnAlert,pagingLittleToolbar:options.settings.pagingLittleToolbar,pagingBtnClass:options.settings.pagingBtnClass})},setPagingValues:function(options){$.fn.bsgrid.getPagingObj(options).setPagingValues(options.curPage,options.totalRows)}}})(jQuery);
+(function($){$.fn.bsgrid.defaults.extend.settings={supportGridEdit:false,supportGridEditTriggerEvent:"rowClick",supportColumnMove:false,searchConditionsContainerId:"",fixedGridHeader:false,fixedGridHeight:"320px",gridEditConfigs:{text:{build:function(edit,value,record,rowIndex,colIndex,tdObj,trObj,options){return value+' '},val:function(formObj){return formObj.val()}},checkbox:{build:function(edit,value,record,rowIndex,colIndex,tdObj,trObj,options){return value+' '},val:function(formObj){return formObj.val()}},textarea:{build:function(edit,value,record,rowIndex,colIndex,tdObj,trObj,options){return value+'"},val:function(formObj){return formObj.val()}}}};$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.hidden=$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.text;$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.password=$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.text;$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.radio=$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.text;$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.button=$.fn.bsgrid.defaults.extend.settings.gridEditConfigs.text;$.extend(true,$.fn.bsgrid.defaults.colsProperties,{lineNumberAttr:"w_num",checkAttr:"w_check",editAttr:"w_edit",aggAttr:"w_agg"});$.fn.bsgrid.defaults.event.customCellEditEvents={};$.fn.bsgrid.extendInitGrid={};$.fn.bsgrid.extendBeforeRenderGrid={};$.fn.bsgrid.extendRenderPerRow={};$.fn.bsgrid.extendRenderPerColumn={};$.fn.bsgrid.extendAfterRenderGrid={};$.fn.bsgrid.extendOtherMethods={};$.fn.bsgrid.extendInitGrid.initGridExtendOptions=function(gridId,options){var columnsModel=options.columnsModel;var colsProperties=options.settings.colsProperties;$.fn.bsgrid.getGridHeaderObject(options).each(function(i){columnsModel[i].lineNumber=$.trim($(this).attr(colsProperties.lineNumberAttr));columnsModel[i].check=$.trim($(this).attr(colsProperties.checkAttr));columnsModel[i].edit=$.trim($(this).attr(colsProperties.editAttr))});if($("#"+options.gridId+" tfoot tr td["+colsProperties.aggAttr+"!='']").length!=0){$("#"+options.gridId+" tfoot tr td").each(function(i){columnsModel[i].aggName="";columnsModel[i].aggIndex="";var aggInfo=$.trim($(this).attr(colsProperties.aggAttr));if(aggInfo.length!=0){var aggInfoArray=aggInfo.split(",");columnsModel[i].aggName=aggInfoArray[0].toLocaleLowerCase();columnsModel[i].aggIndex=aggInfoArray.length>1?aggInfoArray[1]:""}})}if($.fn.bsgrid.getGridHeaderObject(options).filter("["+colsProperties.lineNumberAttr+"$='line']").length!=0){options.settings.extend.afterRenderGridMethods.renderLineNumber=$.fn.bsgrid.extendAfterRenderGrid.renderLineNumber}if($.fn.bsgrid.getGridHeaderObject(options).filter("["+colsProperties.checkAttr+"='true']").length!=0){options.settings.extend.initGridMethods.initGridCheck=$.fn.bsgrid.extendInitGrid.initGridCheck;options.settings.extend.renderPerColumnMethods.renderCheck=$.fn.bsgrid.extendRenderPerColumn.renderCheck;options.settings.extend.afterRenderGridMethods.addCheckChangedEvent=$.fn.bsgrid.extendAfterRenderGrid.addCheckChangedEvent}if(options.settings.extend.settings.supportGridEdit){options.settings.extend.renderPerColumnMethods.renderForm=$.fn.bsgrid.extendRenderPerColumn.renderForm;options.settings.extend.afterRenderGridMethods.addGridEditEvent=$.fn.bsgrid.extendAfterRenderGrid.addGridEditEvent;options.settings.extend.afterRenderGridMethods.setOptionsFirstRowClone=$.fn.bsgrid.extendAfterRenderGrid.setOptionsFirstRowClone;var gridObj=$.fn.bsgrid.getGridObj(gridId);gridObj.activeGridEditMode=function(){return $.fn.bsgrid.defaults.extend.activeGridEditMode(options)};gridObj.getChangedRowsIndexs=function(){return $.fn.bsgrid.defaults.extend.getChangedRowsIndexs(options)};gridObj.getChangedRowsOldRecords=function(){return $.fn.bsgrid.defaults.extend.getChangedRowsOldRecords(options)};gridObj.getRowsChangedColumnsValue=function(){return $.fn.bsgrid.defaults.extend.getRowsChangedColumnsValue(options)};gridObj.deleteRow=function(row){$.fn.bsgrid.defaults.extend.deleteRow(row,options)};gridObj.addNewEditRow=function(){$.fn.bsgrid.defaults.extend.addNewEditRow(options)}}if(options.settings.extend.settings.supportColumnMove){options.settings.extend.initGridMethods.initColumnMove=$.fn.bsgrid.extendInitGrid.initColumnMove}if(options.settings.extend.settings.fixedGridHeader){options.settings.extend.initGridMethods.initFixedHeader=$.fn.bsgrid.extendOtherMethods.initFixedHeader;options.settings.extend.afterRenderGridMethods.fixedHeader=function(parseSuccess,gridData,options){$.fn.bsgrid.extendOtherMethods.fixedHeader(false,options)}}if($.trim(options.settings.extend.settings.searchConditionsContainerId)!=""){options.settings.extend.initGridMethods.initSearchConditions=$.fn.bsgrid.extendInitGrid.initSearchConditions}if($("#"+options.gridId+" tfoot td["+colsProperties.aggAttr+"!='']").length!=0){options.settings.extend.afterRenderGridMethods.aggregation=$.fn.bsgrid.extendAfterRenderGrid.aggregation}};$.fn.bsgrid.extendInitGrid.initGridCheck=function(gridId,options){$.fn.bsgrid.getGridHeaderObject(options).each(function(hi){if(options.columnsModel[hi].check=="true"){if($.trim($(this).html())==""){$(this).html(' ')}$(this).find("input[type=checkbox]").change(function(){var checked=$.bsgrid.adaptAttrOrProp($(this),"checked")?true:false;$.bsgrid.adaptAttrOrProp($.fn.bsgrid.getRows(options).find("td:nth-child("+(hi+1)+")>input[type=checkbox]"),"checked",checked)})}});var gridObj=$.fn.bsgrid.getGridObj(gridId);gridObj.getCheckedRowsIndexs=function(){return $.fn.bsgrid.defaults.extend.getCheckedRowsIndexs(options)};gridObj.getCheckedRowsRecords=function(){return $.fn.bsgrid.defaults.extend.getCheckedRowsRecords(options)};gridObj.getCheckedValues=function(index){return $.fn.bsgrid.defaults.extend.getCheckedValues(index,options)}};$.fn.bsgrid.extendInitGrid.initSearchConditions=function(gridId,options){var conditionsHtml=new StringBuilder();conditionsHtml.append('');var params={};$.fn.bsgrid.getGridHeaderObject(options).each(function(i){var index=options.columnsModel[i].index;var text=$.trim($(this).text());if(index!=""&&text!=""&&$.trim(params[index])==""){params[index]=text}});for(var key in params){conditionsHtml.append(''+params[key]+" ")}conditionsHtml.append(" ");conditionsHtml.append(" ");conditionsHtml.append(' ');$("#"+options.settings.extend.settings.searchConditionsContainerId).html(conditionsHtml.toString());$("#"+options.settings.extend.settings.searchConditionsContainerId+" select.bsgrid_conditions_select").change(function(){$(this).next("input.bsgrid_conditions_input").attr("name",$(this).val())}).trigger("change")};$.fn.bsgrid.extendInitGrid.initColumnMove=function(gridId,options){if($("#"+options.gridId+" thead tr").length!=1){return}$("#"+options.gridId).css({"table-layout":"fixed"});var headObj=$.fn.bsgrid.getGridHeaderObject(options);var headLen=headObj.length;headObj.each(function(i){var obj=this;$(obj).bind("selectstart",function(){return false});$(obj).css("-moz-user-select","none");$(obj).mousedown(function(){bindDownData(obj,i,headLen)});$(obj).mousemove(function(e){e=e||event;var left=$(obj).offset().left;var nObj=0,nLeft=0;if(i!=headLen-1){nObj=$(obj).next();nLeft=nObj.offset().left}var mObj=obj;if(i!=headLen-1&&e.clientX-nLeft>-10){mObj=nObj}if((i!=0&&e.clientX-left<10)||(i!=headLen-1&&e.clientX-nLeft>-10)){$(obj).css({cursor:"e-resize"});if($.trim($(obj).data("ex_mousedown"))!="mousedown"){return}var mWidth=$(mObj).width();var newMWidth=mWidth-e.clientX+$(mObj).offset().left;var preMWidth=$(mObj).prev().width();var preNewMWidth=preMWidth+e.clientX-$(mObj).offset().left;if(parseInt(newMWidth)>19&&parseInt(preNewMWidth)>19){$(mObj).width(newMWidth).prev().width(preNewMWidth)}}else{$(mObj).css({cursor:"default"});releaseDownData(obj,i,headLen)}});$(obj).mouseup(function(){releaseDownData(obj,i,headLen)});$(obj).mouseout(function(e){e=e||event;var objOffect=$(obj).offset();if(objOffect.top>e.clientY||objOffect.top+$(obj).height() '}return false};$.fn.bsgrid.extendRenderPerColumn.renderForm=function(record,rowIndex,colIndex,tdObj,trObj,options){var columnModel=options.columnsModel[colIndex];var edit=columnModel.edit;var value=$.fn.bsgrid.getRecordIndexValue(record,columnModel.index,options);var tdHtml=" ";if(edit in options.settings.extend.settings.gridEditConfigs){tdHtml=options.settings.extend.settings.gridEditConfigs[edit].build(edit,value,record,rowIndex,colIndex,tdObj,trObj,options)}else{return false}tdObj.html(tdHtml);tdObj.find(":input").addClass("bsgrid_editgrid_hidden");for(var key in options.settings.event.customCellEditEvents){tdObj.find(":input").each(function(){var formObj=$(this);formObj.bind(key,{formObj:formObj,record:record,rowIndex:rowIndex,colIndex:colIndex,tdObj:tdObj,trObj:trObj,options:options},function(event){options.settings.event.customCellEditEvents[key](event.data.formObj,event.data.record,event.data.rowIndex,event.data.colIndex,event.data.tdObj,event.data.trObj,event.data.options)})})}return false};$.fn.bsgrid.extendAfterRenderGrid.renderLineNumber=function(parseSuccess,gridData,options){$.fn.bsgrid.getGridHeaderObject(options).each(function(i){var num=options.columnsModel[i].lineNumber;if(num=="line"||num=="total_line"){$.fn.bsgrid.getRows(options).find("td:nth-child("+(i+1)+")").each(function(li){$(this).html((num=="line")?(li+1):(li+options.startRow))})}})};$.fn.bsgrid.extendAfterRenderGrid.addCheckChangedEvent=function(parseSuccess,gridData,options){$.fn.bsgrid.getGridHeaderObject(options).each(function(hi){if(options.columnsModel[hi].check=="true"){var checkboxObj=$(this).find("input[type=checkbox]");var checkboxObjs=$.fn.bsgrid.getRows(options).find("td:nth-child("+(hi+1)+")>input[type=checkbox]");checkboxObjs.change(function(){var allCheckboxObjs=$.fn.bsgrid.getRows(options).find("td:nth-child("+(hi+1)+")>input[type=checkbox]");var checked=$.bsgrid.adaptAttrOrProp(checkboxObj,"checked")?true:false;if(!checked&&allCheckboxObjs.filter(":checked").length==allCheckboxObjs.length){$.bsgrid.adaptAttrOrProp(checkboxObj,"checked",true)}else{if(checked&&allCheckboxObjs.filter(":checked").length!=allCheckboxObjs.length){$.bsgrid.adaptAttrOrProp(checkboxObj,"checked",false)}}})}})};$.fn.bsgrid.extendAfterRenderGrid.addGridEditEvent=function(parseSuccess,gridData,options){var gridObj=$.fn.bsgrid.getGridObj(options.gridId);$.fn.bsgrid.getRows(options).each(function(){var columnsModel=options.columnsModel;$(this).find("td").each(function(ci){if(columnsModel[ci].edit!=""){$(this).find(":input").change(function(){var rowObj=$(this).parent("td").parent("tr");var isNew=$.trim(rowObj.data("ex_new"));var value=gridObj.getRecordIndexValue(gridObj.getRowRecord(rowObj),columnsModel[ci].index);value=(isNew=="true"?"":value);if($.trim($(this).val())!=value){$(this).addClass("bsgrid_editgrid_change")}else{$(this).removeClass("bsgrid_editgrid_change")}rowObj.data("ex_change",rowObj.find(".bsgrid_editgrid_change").length)})}});if(options.settings.extend.settings.supportGridEditTriggerEvent==""){$(this).find(".bsgrid_editgrid_hidden").each(function(){showCellEdit(this)})}else{if(options.settings.extend.settings.supportGridEditTriggerEvent=="rowClick"){$(this).click(function(){$(this).find(".bsgrid_editgrid_hidden").each(function(){showCellEdit(this)})})}else{if(options.settings.extend.settings.supportGridEditTriggerEvent=="rowDoubleClick"){$(this).dblclick(function(){$(this).find(".bsgrid_editgrid_hidden").each(function(){showCellEdit(this)})})}else{if(options.settings.extend.settings.supportGridEditTriggerEvent=="cellClick"){$(this).find(".bsgrid_editgrid_hidden").each(function(){var formObj=this;$(formObj).parent("td").click(function(){showCellEdit(formObj)})})}else{if(options.settings.extend.settings.supportGridEditTriggerEvent=="cellDoubleClick"){$(this).find(".bsgrid_editgrid_hidden").each(function(){var formObj=this;$(formObj).parent("td").dblclick(function(){showCellEdit(formObj)})})}}}}}});function showCellEdit(formObj){var cloneObj=$(formObj).removeClass("bsgrid_editgrid_hidden").clone(true);$(formObj).parent("td").html(cloneObj)}};$.fn.bsgrid.extendAfterRenderGrid.aggregation=function(parseSuccess,gridData,options){var gridObj=$.fn.bsgrid.getGridObj(options.gridId);var columnsModel=options.columnsModel;$("#"+options.gridId+" tfoot tr td["+options.settings.colsProperties.aggAttr+"!='']").each(function(i){if(columnsModel[i].aggName!=""){var aggName=columnsModel[i].aggName;var val=null;if(aggName=="count"){val=options.curPageRowsNum}else{if(aggName=="countnotnone"||aggName=="sum"||aggName=="avg"||aggName=="max"||aggName=="min"||aggName=="concat"){if(aggName=="countnotnone"){val=0}var valHtml=new StringBuilder();$.fn.bsgrid.getRows(options).filter(":lt("+options.curPageRowsNum+")").each(function(ri){var rval=gridObj.getColumnValue(ri,columnsModel[i].aggIndex);if(rval==""){}else{if(aggName=="countnotnone"){val=(val==null?0:val)+1}else{if(aggName=="sum"||aggName=="avg"){if(!isNaN(rval)){val=(val==null?0:val)+parseFloat(rval)}}else{if(aggName=="max"||aggName=="min"){if(!isNaN(rval)&&(val==null||(aggName=="max"&&parseFloat(rval)>val)||(aggName=="min"&&parseFloat(rval)input:checked").length==1){rowIndexs[rowIndexs.length]=i}});return rowIndexs};$.fn.bsgrid.defaults.extend.getCheckedRowsRecords=function(options){var records=[];$.each($.fn.bsgrid.defaults.extend.getCheckedRowsIndexs(options),function(i,rowIndex){records[records.length]=$.fn.bsgrid.getRecord(rowIndex,options)});return records};$.fn.bsgrid.defaults.extend.getCheckedValues=function(index,options){var values=[];$.each($.fn.bsgrid.defaults.extend.getCheckedRowsRecords(options),function(i,record){values[values.length]=$.fn.bsgrid.getRecordIndexValue(record,index,options)});return values};$.fn.bsgrid.defaults.extend.activeGridEditMode=function(options){if(!options.settings.extend.settings.supportGridEdit){return}$.fn.bsgrid.getRows(options).find("td .bsgrid_editgrid_hidden").each(function(){var cloneObj=$(this).removeClass("bsgrid_editgrid_hidden").clone(true);$(this).parent("td").html(cloneObj)})};$.fn.bsgrid.defaults.extend.getChangedRowsIndexs=function(options){var rowIndexs=[];$.fn.bsgrid.getRows(options).each(function(i){var cellChangedNumStr=$.trim($(this).data("ex_change"));if(!isNaN(cellChangedNumStr)&&parseInt(cellChangedNumStr)>0){rowIndexs[rowIndexs.length]=i}});return rowIndexs};$.fn.bsgrid.defaults.extend.getChangedRowsOldRecords=function(options){var records=[];$.each($.fn.bsgrid.defaults.extend.getChangedRowsIndexs(options),function(i,rowIndex){records[records.length]=$.fn.bsgrid.getRecord(rowIndex,options)});return records};$.fn.bsgrid.defaults.extend.getRowsChangedColumnsValue=function(options){var values={};$.each($.fn.bsgrid.defaults.extend.getChangedRowsIndexs(options),function(i,rowIndex){values["row_"+rowIndex]={};$.fn.bsgrid.getRows(options).filter(":eq("+rowIndex+")").find("td").each(function(ci){if($(this).find(".bsgrid_editgrid_change").length>0){values["row_"+rowIndex][options.columnsModel[ci].index]=options.settings.extend.settings.gridEditConfigs[options.columnsModel[ci].edit].val($(this).find(".bsgrid_editgrid_change"))}})});return values};$.fn.bsgrid.defaults.extend.deleteRow=function(row,options){$.fn.bsgrid.getRow(row,options).remove()};$.fn.bsgrid.defaults.extend.addNewEditRow=function(options){var gridObj=$.fn.bsgrid.getGridObj(options.gridId);$("#"+options.gridId+" tbody").prepend(options.firstRowClone.clone(true));gridObj.getRowCells(0).each(function(colIndex){var columnModel=options.columnsModel[colIndex];if(columnModel.render!=""){var render_method=eval(columnModel.render);var render_html=render_method(null,0,colIndex,options);$(this).html(render_html)}else{if(columnModel.edit!="textarea"){$(this).children().val("")}else{$(this).children().text("")}$(this).html($(this).children().removeClass("bsgrid_editgrid_change").clone(true)).removeAttr("title")}});gridObj.getRow(0).data("record",null).data("ex_new","true")};$.fn.bsgrid.extendOtherMethods.fixedHeader=function(iFirst,options){var gridObj=$("#"+options.gridId);var gridFixedDivObj=$("#"+options.gridId+"_fixedDiv");if($.trim(gridFixedDivObj.data("ex_fixedGridLock"))=="lock"){return}gridFixedDivObj.data("ex_fixedGridLock","lock");var headTrNum=$("#"+options.gridId+" thead tr").length;if(!iFirst){headTrNum=headTrNum/2;$("#"+options.gridId+" thead tr:lt("+headTrNum+")").remove()}var fixedGridHeight=getSize(options.settings.extend.settings.fixedGridHeight);if(fixedGridHeight');$("#"+gridId+"_fixedDiv").data("ex_fixedGridLock","").css({padding:0,"border-width":0,width:"98%","overflow-y":"auto","margin-bottom":"-1px"});$("#"+gridId).css({width:"auto"});$("#"+gridId+"_pt_outTab").css({"border-top-width":"1px"});$.fn.bsgrid.extendOtherMethods.fixedHeader(true,options);$(window).resize(function(){$.fn.bsgrid.extendOtherMethods.fixedHeader(false,options)})}})(jQuery);
+(function(a){a.bsgrid_export={defaults:{url:"",exportFileName:"export",colsProperties:{width:100,align:"center",exportAttr:"w_export",indexAttr:"w_index",widthAttr:"width",alignAttr:"w_align"},colWidthPercentmultiplier:14,requestParamsName:{exportFileName:"exportFileName",colNames:"dataNames",colIndexs:"dataIndexs",colWidths:"dataLengths",colAligns:"dataAligns"}},doExport:function(h,o,d){if(o==undefined){o={}}var c={};if(d==undefined){d={}}a.extend(true,c,a.bsgrid_export.defaults,d);var n="",g="",m="",j="";for(var f=0;fthis.length){return false}else{return this.substr(0,a.length)==a}};String.prototype.endWith=function(a){if(a==null||a==""||this.length==0||a.length>this.length){return false}else{return this.substring(this.length-a.length)==a}};String.prototype.replaceAll=function(a,b){return this.replace(new RegExp(a,"gm"),b)};function StringBuilder(){if(arguments.length){this.append.apply(this,arguments)}}StringBuilder.prototype=function(){var c=Array.prototype.join,d=Array.prototype.slice,a=/\{(\d+)\}/g,b=function(){return c.call(this,"")};return{constructor:StringBuilder,length:0,append:Array.prototype.push,appendFormat:function(e){var g=0,f=d.call(arguments,1);this.append(a.test(e)?e.replace(a,function(h,j){return f[j]}):e.replace(/\?/g,function(){return f[g++]}));return this},size:function(){return this.toString().length},toString:b,valueOf:b}}();
+(function(a){a.fn.bsgrid_paging={defaults:{loopback:false,pageSize:20,pageSizeSelect:false,pageSizeForGrid:[5,10,20,25,50,100,200,500],pageIncorrectTurnAlert:true,pagingLittleToolbar:false,pagingBtnClass:"pagingBtn",pagingMinWidth:"auto",pagingBtnShowState:{select:true,first:true,prev:true,next:true,last:true,gotoBtn:true,refresh:true}},pagingObjs:{},init:function(h,g){var d={settings:a.extend(true,{},a.fn.bsgrid_paging.defaults,g),pagingId:h,totalRowsId:h+"_totalRows",totalPagesId:h+"_totalPages",curPageId:h+"_curPage",gotoPageInputId:h+"_gotoPageInput",gotoPageId:h+"_gotoPage",refreshPageId:h+"_refreshPage",pageSizeId:h+"_pageSize",firstPageId:h+"_firstPage",prevPageId:h+"_prevPage",nextPageId:h+"_nextPage",lastPageId:h+"_lastPage",startRowId:h+"_startRow",endRowId:h+"_endRow",totalRows:0,totalPages:0,curPage:1,curPageRowsNum:0,startRow:0,endRow:0};if(g.pageSizeForGrid!=undefined){d.settings.pageSizeForGrid=g.pageSizeForGrid}var b={options:d,page:function(i){a.fn.bsgrid_paging.page(i,d)},getCurPage:function(){return a.fn.bsgrid_paging.getCurPage(d)},refreshPage:function(){a.fn.bsgrid_paging.refreshPage(d)},firstPage:function(){a.fn.bsgrid_paging.firstPage(d)},prevPage:function(){a.fn.bsgrid_paging.prevPage(d)},nextPage:function(){a.fn.bsgrid_paging.nextPage(d)},lastPage:function(){a.fn.bsgrid_paging.lastPage(d)},gotoPage:function(i){a.fn.bsgrid_paging.gotoPage(d,i)},createPagingToolbar:function(){return a.fn.bsgrid_paging.createPagingToolbar(d)},setPagingToolbarEvents:function(){a.fn.bsgrid_paging.setPagingToolbarEvents(d)},dynamicChangePagingButtonStyle:function(){a.fn.bsgrid_paging.dynamicChangePagingButtonStyle(d)},setPagingValues:function(j,i){a.fn.bsgrid_paging.setPagingValues(j,i,d)}};a.fn.bsgrid_paging.pagingObjs[h]=b;a("#"+h).append(b.createPagingToolbar());if(d.settings.pageSizeSelect){if(a.inArray(d.settings.pageSize,d.settings.pageSizeForGrid)==-1){d.settings.pageSizeForGrid.push(d.settings.pageSize)}d.settings.pageSizeForGrid.sort(function(j,i){return j-i});var f=new StringBuilder();for(var e=0;e'+c+"")}a("#"+d.pageSizeId).html(f.toString()).val(d.settings.pageSize)}b.setPagingToolbarEvents();return b},getPagingObj:function(c){var b=a.fn.bsgrid_paging.pagingObjs[c];return b?b:null},page:function(c,b){var d=a.fn.bsgrid.getGridObj(b.settings.gridId);d.options.settings.pageSize=b.settings.pageSize;a.fn.bsgrid.page(c,d.options)},getCurPage:function(b){var c=a("#"+b.curPageId).html();return c==""?1:c},refreshPage:function(b){a.fn.bsgrid_paging.page(a.fn.bsgrid_paging.getCurPage(b),b)},firstPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c<=1){a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isFirstPage);return}a.fn.bsgrid_paging.page(1,b)},prevPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c<=1){if(b.settings.loopback&&b.totalPages>0){a.fn.bsgrid_paging.page(b.totalPages,b);return}else{a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isFirstPage);return}}a.fn.bsgrid_paging.page(parseInt(c)-1,b)},nextPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c>=b.totalPages){if(b.settings.loopback&&c>0){a.fn.bsgrid_paging.page(1,b);return}else{a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isLastPage);return}}a.fn.bsgrid_paging.page(parseInt(c)+1,b)},lastPage:function(b){var c=a.fn.bsgrid_paging.getCurPage(b);if(c>=b.totalPages){a.fn.bsgrid_paging.incorrectTurnAlert(b,a.bsgridLanguage.isLastPage);return}a.fn.bsgrid_paging.page(b.totalPages,b)},gotoPage:function(b,c){if(c==undefined){c=a("#"+b.gotoPageInputId).val()}if(a.trim(c)==""||isNaN(c)){a.fn.bsgrid_paging.alert(a.bsgridLanguage.needInteger)}else{if(parseInt(c)<1||parseInt(c)>b.totalPages){a.fn.bsgrid_paging.alert(a.bsgridLanguage.needRange(1,b.totalPages))}else{a("#"+b.gotoPageInputId).val(c);a.fn.bsgrid_paging.page(parseInt(c),b)}}},incorrectTurnAlert:function(b,c){if(b.settings.pageIncorrectTurnAlert){a.fn.bsgrid_paging.alert(c)}},alert:function(c){try{a.bsgrid.alert(c)}catch(b){alert(c)}},createPagingToolbar:function(b){var e=new StringBuilder();var c=b.settings.pagingLittleToolbar;e.append('");return e.toString()},setPagingToolbarEvents:function(b){if(b.settings.pageSizeSelect){a("#"+b.pageSizeId).change(function(){b.settings.pageSize=parseInt(a(this).val());a(this).trigger("blur");a.fn.bsgrid_paging.page(1,b)})}a("#"+b.firstPageId).click(function(){a.fn.bsgrid_paging.firstPage(b)});a("#"+b.prevPageId).click(function(){a.fn.bsgrid_paging.prevPage(b)});a("#"+b.nextPageId).click(function(){a.fn.bsgrid_paging.nextPage(b)});a("#"+b.lastPageId).click(function(){a.fn.bsgrid_paging.lastPage(b)});a("#"+b.gotoPageInputId).keyup(function(c){if(c.which==13){a.fn.bsgrid_paging.gotoPage(b)}});a("#"+b.gotoPageId).click(function(){a.fn.bsgrid_paging.gotoPage(b)});a("#"+b.refreshPageId).click(function(){a.fn.bsgrid_paging.refreshPage(b)})},dynamicChangePagingButtonStyle:function(b){var c="disabledCls";if(b.curPage<=1){a("#"+b.firstPageId).addClass(c);a("#"+b.prevPageId).addClass(c)}else{a("#"+b.firstPageId).removeClass(c);a("#"+b.prevPageId).removeClass(c)}if(b.curPage>=b.totalPages){a("#"+b.nextPageId).addClass(c);a("#"+b.lastPageId).addClass(c)}else{a("#"+b.nextPageId).removeClass(c);a("#"+b.lastPageId).removeClass(c)}},setPagingValues:function(i,g,f){i=Math.max(i,1);var b=f.settings.pageSize;var h=parseInt(g/b);h=parseInt((g%b==0)?h:h+1);var e=(i*b");$("#"+gridId).find("tr:lt("+($("#"+gridId+" tr").length-$("#"+gridId+" tfoot tr").length)+")").appendTo($("#"+gridId+" thead"))}if($("#"+gridId).find("tbody").length==0){$("#"+gridId+" thead").after(" ")}if($("#"+gridId).find("tfoot").length==0){$("#"+gridId).append(' ')}options.columnsModel=$.fn.bsgrid.initColumnsModel(options);if(settings.pageSizeForGrid!=undefined){options.settings.pageSizeForGrid=settings.pageSizeForGrid}options.settings.dataType=options.settings.dataType.toLowerCase();if(options.settings.pageSizeSelect){if($.inArray(options.settings.pageSize,options.settings.pageSizeForGrid)==-1){options.settings.pageSizeForGrid.push(options.settings.pageSize)}options.settings.pageSizeForGrid.sort(function(a,b){return a-b})}var gridObj={options:options,getCondition:function(){return $.fn.bsgrid.getPageCondition(options.curPage,options)},getPageCondition:function(curPage){return $.fn.bsgrid.getPageCondition(curPage,options)},page:function(curPage){$.fn.bsgrid.page(curPage,options)},search:function(params){$.fn.bsgrid.search(options,params)},loadGridData:function(dataType,gridData){$.fn.bsgrid.loadGridData(dataType,gridData,options)},loadRowData:function(record,rowIndex,trObj){$.fn.bsgrid.loadRowData(options,record,rowIndex,trObj)},reloadLocalData:function(localData){$.fn.bsgrid.reloadLocalData(localData,options)},getPageSize:function(){return options.settings.pageSize},getTotalRows:function(){return options.totalRows},getTotalPages:function(){return options.totalPages},getCurPage:function(){return options.curPage},getCurPageRowsNum:function(){return options.curPageRowsNum},getStartRow:function(){return options.startRow},getEndRow:function(){return options.endRow},getSortName:function(){return options.sortName},getSortOrder:function(){return options.sortOrder},getRows:function(){return $.fn.bsgrid.getRows(options)},getRow:function(row){return $.fn.bsgrid.getRow(row,options)},getRowCells:function(row){return $.fn.bsgrid.getRowCells(row,options)},getColCells:function(col){return $.fn.bsgrid.getColCells(col,options)},getCell:function(row,col){return $.fn.bsgrid.getCell(row,col,options)},getSelectedRow:function(){return $.fn.bsgrid.getSelectedRow(options)},getSelectedRowIndex:function(){return $.fn.bsgrid.getSelectedRowIndex(options)},selectRow:function(row){return $.fn.bsgrid.selectRow(row,options)},unSelectRow:function(){return $.fn.bsgrid.unSelectRow(options)},getUserdata:function(){return $.fn.bsgrid.getUserdata(options)},getRowRecord:function(rowObj){return $.fn.bsgrid.getRowRecord(rowObj)},getAllRecords:function(){return $.fn.bsgrid.getAllRecords(options)},getRecord:function(row){return $.fn.bsgrid.getRecord(row,options)},getRecordIndexValue:function(record,index){return $.fn.bsgrid.getRecordIndexValue(record,index,options)},getColumnValue:function(row,index){return $.fn.bsgrid.getColumnValue(row,index,options)},getCellRecordValue:function(row,col){return $.fn.bsgrid.getCellRecordValue(row,col,options)},sort:function(obj){$.fn.bsgrid.sort(obj,options)},getGridHeaderObject:function(){return $.fn.bsgrid.getGridHeaderObject(options)},getColumnModel:function(colIndex){return $.fn.bsgrid.getColumnModel(colIndex,options)},appendHeaderSort:function(){$.fn.bsgrid.appendHeaderSort(options)},setGridBlankBody:function(){return $.fn.bsgrid.setGridBlankBody(options)},createPagingOutTab:function(){$.fn.bsgrid.createPagingOutTab(options)},clearRowData:function(rowIndex){$.fn.bsgrid.clearRowData(rowIndex,options)},clearGridBodyData:function(){$.fn.bsgrid.clearGridBodyData(options)},getPagingObj:function(){return $.fn.bsgrid.getPagingObj(options)},refreshPage:function(){$.fn.bsgrid.refreshPage(options)},firstPage:function(){$.fn.bsgrid.firstPage(options)},prevPage:function(){$.fn.bsgrid.prevPage(options)},nextPage:function(){$.fn.bsgrid.nextPage(options)},lastPage:function(){$.fn.bsgrid.lastPage(options)},gotoPage:function(goPage){$.fn.bsgrid.gotoPage(options,goPage)},initPaging:function(){return $.fn.bsgrid.initPaging(options)},setPagingValues:function(){$.fn.bsgrid.setPagingValues(options)}};$.fn.bsgrid.gridObjs[gridId]=gridObj;if(options.settings.pageAll||options.settings.pageSize<1){options.settings.pageAll=true;options.settings.pageSize=0}gridObj.appendHeaderSort();gridObj.createPagingOutTab();if(!options.settings.showPageToolbar){$("#"+options.pagingId).hide();$("#"+options.pagingOutTabId).hide()}if(!options.settings.pageAll){gridObj.pagingObj=gridObj.initPaging();try{var minWidth=$.trim($("#"+options.pagingId).children().width());minWidth=minWidth==""?0:parseInt(minWidth);if(minWidth!=0){$("#"+gridId).css("min-width",minWidth+16);$("#"+options.pagingOutTabId).css("min-width",minWidth+16)}$("#"+options.pagingOutTabId).width($("#"+gridId).width());$(window).resize(function(){$("#"+options.pagingOutTabId).width($("#"+gridId).width())})}catch(e){}}if(options.settings.isProcessLockScreen){$.fn.bsgrid.addLockScreen(options)}try{$.fn.bsgrid.extendInitGrid.initGridExtendOptions(gridId,options)}catch(e){}for(var key in options.settings.extend.initGridMethods){options.settings.extend.initGridMethods[key](gridId,options)}if(options.settings.autoLoad){setTimeout(function(){gridObj.page(1)},10)}else{gridObj.setGridBlankBody()}return gridObj},initColumnsModel:function(options){var columnsModel=[];$.fn.bsgrid.getGridHeaderObject(options).each(function(){var headObj=$(this);var colsProperties=options.settings.colsProperties;var columnModel={};columnModel.sortName="";columnModel.sortOrder="";var sortInfo=$.trim(headObj.attr(colsProperties.sortAttr));if(sortInfo.length!=0){var sortInfoArray=sortInfo.split(",");columnModel.sortName=$.trim(sortInfoArray[0]);columnModel.sortOrder=$.trim(sortInfoArray.length>1?sortInfoArray[1]:"")}columnModel.index=$.trim(headObj.attr(colsProperties.indexAttr));columnModel.render=$.trim(headObj.attr(colsProperties.renderAttr));columnModel.tip=$.trim(headObj.attr(colsProperties.tipAttr));var maxLen=$.trim(headObj.attr(colsProperties.lengthAttr));columnModel.maxLen=maxLen.length!=0?parseInt(maxLen):colsProperties.maxLength;var align=$.trim(headObj.attr(colsProperties.alignAttr));columnModel.align=align==""?colsProperties.align:align;columnModel.hidden=$.trim(headObj.attr(colsProperties.hiddenAttr));columnsModel.push(columnModel)});return columnsModel},getGridObj:function(gridId){var obj=$.fn.bsgrid.gridObjs[gridId];return obj?obj:null},buildData:{gridData:function(type,curPage,data){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.buildJsonData.gridData(curPage,data)}else{if(type=="xml"){return $.fn.bsgrid.buildXmlData.gridData(curPage,data)}}return false}},parseData:{success:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.success(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.success(gridData)}}return false},totalRows:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.totalRows(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.totalRows(gridData)}}return false},curPage:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.curPage(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.curPage(gridData)}}return false},data:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.data(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.data(gridData)}}return false},userdata:function(type,gridData){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.userdata(gridData)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.userdata(gridData)}}return false},getDataLen:function(type,gridData){if(type=="json"||type=="jsonp"||type=="xml"){return $.fn.bsgrid.parseData.data(type,gridData).length}return 0},getRecord:function(type,data,row){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.getRecord(data,row)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.getRecord(data,row)}}return false},getColumnValue:function(type,record,index){if(type=="json"||type=="jsonp"){return $.fn.bsgrid.parseJsonData.getColumnValue(record,index)}else{if(type=="xml"){return $.fn.bsgrid.parseXmlData.getColumnValue(record,index)}}return false}},buildJsonData:{gridData:function(curPage,data){return{success:true,totalRows:data.length,curPage:curPage,data:data}}},parseJsonData:{success:function(json){return json.success},totalRows:function(json){return json.totalRows},curPage:function(json){return json.curPage},data:function(json){return json.data},userdata:function(json){return json.userdata},getRecord:function(data,row){return data[row]},getColumnValue:function(record,index){return record[index]}},buildXmlData:{gridData:function(curPage,data){return'true '+$(""+data+" ").find("row").length+" "+curPage+" "+data+" "}},parseXmlData:{success:function(xml){return $.trim($(xml).find("gridData success").text())=="true"},totalRows:function(xml){return parseInt($(xml).find("gridData totalRows").text())},curPage:function(xml){return parseInt($(xml).find("gridData curPage").text())},data:function(xml){return $(xml).find("gridData data row")},userdata:function(xml){return $(xml).find("gridData userdata")},getRecord:function(data,row){return data.eq(row)},getColumnValue:function(record,index){return record.find(index).text()}},getPageCondition:function(curPage,options){var params=new StringBuilder();if(options.otherParames==false){}else{if((typeof options.otherParames).toLowerCase()=="string"||options.otherParames instanceof String){params.append("&"+options.otherParames)}else{if(options.otherParames instanceof Array){$.each(options.otherParames,function(i,objVal){params.append("&"+objVal.name+"="+objVal.value)})}else{for(var key in options.otherParames){params.append("&"+key+"="+options.otherParames[key])}}}}var condition=params.length==0?"":params.toString().substring(1);condition+=(condition.length==0?"":"&")+options.settings.requestParamsName.pageSize+"="+options.settings.pageSize+"&"+options.settings.requestParamsName.curPage+"="+curPage+"&"+options.settings.requestParamsName.sortName+"="+options.sortName+"&"+options.settings.requestParamsName.sortOrder+"="+options.sortOrder;return condition},search:function(options,params){if(params!=undefined){options.otherParames=params}else{options.otherParames=false}$.fn.bsgrid.page(1,options)},page:function(curPage,options){if($.trim(curPage)==""||isNaN(curPage)){$.fn.bsgrid.alert($.bsgridLanguage.needInteger);return}var dataType=options.settings.dataType;if(options.settings.localData!=false){if(dataType=="json"||dataType=="jsonp"){$.fn.bsgrid.loadGridData(dataType,$.fn.bsgrid.buildData.gridData(dataType,curPage,options.settings.localData),options)}else{if(dataType=="xml"){$.fn.bsgrid.loadGridData(dataType,""+$.fn.bsgrid.buildData.gridData(dataType,curPage,options.settings.localData)+" ",options)}}return}$.ajax({type:options.settings.ajaxType,url:options.settings.url,data:$.fn.bsgrid.getPageCondition(curPage,options),dataType:dataType,beforeSend:function(XMLHttpRequest){if(options.settings.isProcessLockScreen){$.fn.bsgrid.lockScreen(options)}options.settings.beforeSend(options,XMLHttpRequest)},complete:function(XMLHttpRequest,textStatus){options.settings.complete(options,XMLHttpRequest,textStatus);if(options.settings.isProcessLockScreen){$.fn.bsgrid.unlockScreen(options)}},success:function(gridData,textStatus){$.fn.bsgrid.loadGridData(dataType,gridData,options)},error:function(XMLHttpRequest,textStatus,errorThrown){$.fn.bsgrid.alert($.bsgridLanguage.errorForSendOrRequestData)}})},loadGridData:function(dataType,gridData,options){var parseSuccess=$.fn.bsgrid.parseData.success(dataType,gridData);for(var key in options.settings.extend.beforeRenderGridMethods){options.settings.extend.beforeRenderGridMethods[key](parseSuccess,gridData,options)}options.settings.additionalBeforeRenderGrid(parseSuccess,gridData,options);if(parseSuccess){var userdata=$.fn.bsgrid.parseData.userdata(dataType,gridData);$.fn.bsgrid.storeUserdata(userdata,options);options.settings.processUserdata(userdata,options);var totalRows=parseInt($.fn.bsgrid.parseData.totalRows(dataType,gridData));var curPage=parseInt($.fn.bsgrid.parseData.curPage(dataType,gridData));curPage=Math.max(curPage,1);if(options.settings.pageAll){curPage=1;options.settings.pageSize=totalRows;$("#"+options.noPagingationId).html(totalRows)}var pageSize=options.settings.pageSize;var totalPages=parseInt(totalRows/pageSize);totalPages=parseInt((totalRows%pageSize==0)?totalPages:totalPages+1);var curPageRowsNum=$.fn.bsgrid.parseData.getDataLen(dataType,gridData);curPageRowsNum=curPageRowsNum>pageSize?pageSize:curPageRowsNum;curPageRowsNum=(curPage*pageSize ';$(this).append(sortHtml).find(".sort").click(function(){$.fn.bsgrid.sort($(this).parent("th"),options)})}})},setGridBlankBody:function(options){var gridBody=$("#"+options.gridId+" tbody");gridBody.html("");var header=$.fn.bsgrid.getGridHeaderObject(options);var columnsModel=options.columnsModel;for(var hi=0;hi0){var trSb=new StringBuilder();trSb.append("");for(var hi=0;hi ")}trSb.append(" ");rowSb=trSb.toString()}var curPageRowsNum=options.settings.pageSize;if(!options.settings.displayBlankRows){curPageRowsNum=options.endRow-options.startRow+1;curPageRowsNum=options.endRow>0?curPageRowsNum:0}var rowsSb=new StringBuilder();if(curPageRowsNum==0){rowsSb.append(''+$.bsgridLanguage.noDataToDisplay+" ")}else{for(var pi=0;pi');if(options.settings.pageAll){pagingOutTabSb.append($.bsgridLanguage.noPagingation(options.noPagingationId)+" ")}pagingOutTabSb.append(" ");$("#"+options.gridId).after(pagingOutTabSb.toString())},clearRowData:function(rowIndex,options){$.fn.bsgrid.getRowCells(rowIndex,options).html(" ");$.fn.bsgrid.storeRowData(rowIndex,null,options)},clearGridBodyData:function(options){$.fn.bsgrid.getRows(options).each(function(i){$(this).find("td").html(" ");$.fn.bsgrid.storeRowData(i,null,options)})},addLockScreen:function(options){if($(".bsgrid.lockscreen").length==0){var lockScreenHtml=new StringBuilder();lockScreenHtml.append('');lockScreenHtml.append("
");lockScreenHtml.append('');lockScreenHtml.append('
'+$.bsgridLanguage.loadingDataMessage+"
");lockScreenHtml.append("
");$("body").append(lockScreenHtml.toString())}},lockScreen:function(options){$(".bsgrid.lockscreen").attr("times",parseInt($(".bsgrid.lockscreen").attr("times"))+1);if($(".bsgrid.lockscreen").css("display")=="none"){$(".bsgrid.lockscreen").show();$(".bsgrid.loading_div").show()}},unlockScreen:function(options){$(".bsgrid.lockscreen").attr("times",parseInt($(".bsgrid.lockscreen").attr("times"))-1);if($(".bsgrid.lockscreen").attr("times")=="0"){setTimeout(function(){$(".bsgrid.lockscreen").hide();$(".bsgrid.loading_div").hide()},50)}},columnTip:function(tdObj,value,record){tdObj.attr("title",value)},alert:function(msg){try{$.bsgrid.alert(msg)}catch(e){alert(msg)}},longLengthSubAndTip:function(tdObj,value,maxLen,record){var tip=false;if(value.length>maxLen){try{if(value.indexOf("<")<0||value.indexOf(">")<2||$(value).text().length==0){tip=true}}catch(e){tip=true}}if(tip){tdObj.html(value.substring(0,maxLen-3)+"...");$.fn.bsgrid.columnTip(tdObj,value,record)}else{tdObj.html(value)}},getPagingObj:function(options){return $.fn.bsgrid.getGridObj(options.gridId).pagingObj},refreshPage:function(options){if(!options.settings.pageAll){$.fn.bsgrid.getPagingObj(options).refreshPage()}else{$.fn.bsgrid.page(1,options)}},firstPage:function(options){$.fn.bsgrid.getPagingObj(options).firstPage()},prevPage:function(options){$.fn.bsgrid.getPagingObj(options).prevPage()},nextPage:function(options){$.fn.bsgrid.getPagingObj(options).nextPage()},lastPage:function(options){$.fn.bsgrid.getPagingObj(options).lastPage()},gotoPage:function(options,goPage){$.fn.bsgrid.getPagingObj(options).gotoPage(goPage)},initPaging:function(options){$("#"+options.pagingOutTabId+" td").attr("id",options.pagingId);return $.fn.bsgrid_paging.init(options.pagingId,{gridId:options.gridId,pageSize:options.settings.pageSize,pageSizeSelect:options.settings.pageSizeSelect,pageSizeForGrid:options.settings.pageSizeForGrid,pageIncorrectTurnAlert:options.settings.pageIncorrectTurnAlert,pagingLittleToolbar:options.settings.pagingLittleToolbar,pagingBtnClass:options.settings.pagingBtnClass})},setPagingValues:function(options){$.fn.bsgrid.getPagingObj(options).setPagingValues(options.curPage,options.totalRows)}}})(jQuery);
diff --git a/public/static/admin_static/lib/jquery.bsgrid/builds/readme b/public/static/admin_static/lib/jquery.bsgrid/builds/readme
new file mode 100644
index 0000000..7feeb7b
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/builds/readme
@@ -0,0 +1,26 @@
+### zh-CN ###
+builds/merged/grid.simple.min.css 合并grid、paging分页css样式
+builds/merged/grid.simple.min.js 合并grid、paging分页js脚本
+
+builds/merged/grid.all.min.css 合并grid、paging分页、grid扩展、icon图标css样式
+builds/merged/grid.all.min.js 合并grid、paging分页、grid扩展、grid导出构建js脚本
+
+builds/merged/form.all.min.css 合并form表单、icon图标css样式
+builds/merged/form.all.min.js 合并form表单及其依赖js脚本
+
+builds/merged/bsgrid.all.min.css 合并grid、paging分页、grid扩展、icon图标、form表单css样式
+builds/merged/bsgrid.all.min.js 合并grid、paging分页、grid扩展、grid导出构建、form表单js脚本
+
+
+### en ###
+builds/merged/grid.simple.min.css merged builds/css: grid.min.css, grid.paging.min.css
+builds/merged/grid.simple.min.js merged builds/js: common.min.js, grid.paging.min.js, grid.min.js
+
+builds/merged/grid.all.min.css merged builds/css: grid.min.css, grid.paging.min.css, grid.extend.min.css, icon.min.css
+builds/merged/grid.all.min.js merged builds/js: common.min.js, util.min.js, grid.paging.min.js, grid.min.js, grid.extend.min.js, export.min.js
+
+builds/merged/form.all.min.css merged builds/css: form.min.css, icon.min.css
+builds/merged/form.all.min.js merged builds/js: common.min.js, util.min.js, form.min.js
+
+builds/merged/bsgrid.all.min.css merged builds/css: grid.min.css, grid.paging.min.css, grid.extend.min.css, icon.min.css, form.min.css
+builds/merged/bsgrid.all.min.js merged builds/js: common.min.js, util.min.js, grid.paging.min.js, grid.min.js, grid.extend.min.js, export.min.js, form.min.js
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/documention/documention.html b/public/static/admin_static/lib/jquery.bsgrid/documention/documention.html
new file mode 100644
index 0000000..eb49c16
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/documention/documention.html
@@ -0,0 +1,175 @@
+
+
+
+
+ Documention
+
+
+
+1, skins css
+ files: builds/css/skins/grid_*.min.css, source: source/css/skins/grid_*.css
+ language js
+ files: builds/js/lang/grid.*.min.js, source: source/js/lang/grid.*.js
+
+2, settings: $.fn.bsgrid.defaults or $.fn.bsgrid.init(gridId, settings) second param settings
+ dataType: 'json', 'jsonp', 'xml', default 'json'
+ dataTrim: true, false, if trim render cell value
+ ajaxType: 'post', 'get', default 'post'
+ localData: json data, xml data, default false
+ url: page request url
+ otherParames: other parameters, values: false, A Search String, A Object or A jquery serialize Array, default false
+ Samples, First: 'param1=val1¶m2=val2'
+ Second: {'param1': 'val1', 'param2': 'val2'}
+ Third: $('#searchForm').serializeArray()
+ autoLoad: load onReady, default true
+ pageAll: display all datas, no paging only count, default false
+ showPageToolbar: if show page toolbar, default true
+ pageSize: if set value little then 1, then pageAll will auto set true, default 20
+ pageSizeSelect: if display pageSize select option, use with property pageSizeForGrid, default false
+ pageSizeForGrid: pageSize select option
+ pageIncorrectTurnAlert: if turn incorrect page alert(firstPage, prevPage, nextPage, lastPage), default true
+ multiSort: multi column sort support, default false
+ displayBlankRows: true or false, default true
+ lineWrap: if grid cell content wrap, default false, if false then td use style: grid.css -> .bsgrid td.lineNoWrap
+ if true then td use style: grid.css -> .bsgrid td.lineWrap
+ stripeRows: true or false, default false, css: grid.css -> .bsgrid tr.even_index_row td
+ rowHoverColor: true or false, default false, css: grid.css -> .bsgrid tr.row_hover td
+ rowSelectedColor: true or false, default true, css: grid.css -> .bsgrid tr.selected.selected_color td
+ pagingLittleToolbar: if display page little toolbar, default false
+ pagingToolbarAlign: default 'right', other values 'left', 'center'
+ pagingBtnClass: paging toolbar button css class, default 'pagingBtn', write in grid.paging.css
+ displayPagingToolbarOnlyMultiPages: true or false, default false means alway diaplay pagingToolbar
+ isProcessLockScreen: process lock screen, default true
+ longLengthAotoSubAndTip: if column's value length longer than it, auto sub and tip it, default true
+ sub: content.substring(0, MaxLength-3) + '...'. if column's render is not false then not make effective to it
+ method: $.fn.bsgrid.longLengthSubAndTip, global method
+ beforeSend: method before page ajax request send, params: options, XMLHttpRequest
+ complete: method after page ajax request complete, params: options, XMLHttpRequest, textStatus
+ processUserdata: method process userdata, process before grid render data, params: userdata, options
+ extend.settings: supportGridEdit: if support extend grid edit, default false
+ supportGridEditTriggerEvent: values: ''(means no need Trigger), 'rowClick', 'rowDoubleClick',
+ 'cellClick', 'cellDoubleClick', default 'rowClick'
+ supportColumnMove: if support extend column move, default false
+ searchConditions: simple search conditions's container id, default ''
+ fixedGridHeader: fixed grid header, auto height scroll, default false
+ fixedGridHeight: fixed grid height, auto scroll, default '320px'
+ extend config methods, note these methods execute before same means's additional method, write in grid.extend.js:
+ extend.initGridMethods: init grid methods
+ extend.beforeRenderGridMethods: before render grid methods
+ extend.renderPerColumnMethods: render per column methods, no matter blank not blank column
+ extend.renderPerRowMethods: render per row methods, no matter blank or not blank row, after render per column methods
+ extend.afterRenderGridMethods: after render grid methods
+ additional render methods:
+ additionalBeforeRenderGrid: additional before render grid
+ additionalRenderPerColumn: additional render per column, no matter blank column or not blank column
+ additionalRenderPerRow: additional render per row, no matter blank or not blank row, after additional render per column
+ additionalAfterRenderGrid: additional after render grid
+
+3, th properties
+ w_index: column index, mapping load data's column key, case senstive
+ w_sort: like "id", "id,desc", "id,asc", "id" is column index
+ w_align: body column align, not header th
+ w_length: if column's value length longer than it, auto sub and title it
+ sub: txt.substring(0, MaxLength-3) + '...'
+ if column's render is not false, then this property is not make effective to it
+ w_render: use js function name, it will use eval(funName) to execute it, have params: record, rowIndex, colIndex, options
+ Note: if column has property w_render, then ignore property w_index. It's be allowed to no property w_index or w_render
+ w_hidden: if set "true", then will not display this column
+ w_tip: if set "true", then will tip column, ignore if it's length is longer than w_length
+ method, $.fn.bsgrid.columnTip, global method
+
+ th extend properties
+ w_num: line number, value: line, total_line
+ w_check: render checkbox to check rows, value: true
+ w_edit: extend render column, values: text, hidden, password, radio, button, checkbox, textarea
+ tfoot td properties
+ w_agg: aggregation, values: count, countNotNone, sum, avg, max, min, concat, custom
+
+4, these get pagination values, get record or column's value methods, get userdata's value, could call after grid data rendered
+ gridObj.getPageSize(): get page size
+ gridObj.getTotalRows(): get total rows number
+ gridObj.getTotalPages(): get total pages number
+ gridObj.getCurPage(): get current page number
+ gridObj.getCurPageRowsNum(): get current page rows number
+ gridObj.getStartRow(): get start row number in current page, from 1
+ gridObj.getEndRow(): get end row number in current page
+ gridObj.getSortName(): get sort name
+ gridObj.getSortOrder(): get sort order
+ gridObj.getAllRecords(): get all records
+ gridObj.getRecord(rowIndex): get record by rowIndex, note that index from 0
+ gridObj.getRowRecord(rowObj): get row record by row's tr object
+ gridObj.getRecordIndexValue(record, index): get column value by record and index
+ gridObj.getColumnValue(rowIndex, index): get column value by rowIndex and index
+ gridObj.getCellRecordValue(rowIndex, colIndex): get column value by rowIndex and colIndex
+ gridObj.getRows(): get all rows dom object
+ gridObj.getRow(rowIndex): get row dom object by rowIndex
+ gridObj.getRowCells(rowIndex): get row cells dom object by rowIndex
+ gridObj.getColCells(colIndex): get col cells dom object by colIndex
+ gridObj.getCell(rowIndex, colIndex): get cell dom object by rowIndex and colIndex
+ gridObj.getUserdata(): get userdata's value
+
+5, these three select row methods and two check row methods could call after grid data rendered
+ gridObj.selectRow(rowIndex): select row by rowIndex, note that index from 0
+ gridObj.unSelectRow(): unSelect row
+ gridObj.getSelectedRow(): get selected row's tr object
+ gridObj.getSelectedRowIndex(): get selected row's tr index from 0, if not selected return -1
+ gridObj.getCheckedRowsIndexs(): get checked rows indexs, note that index from 0
+ gridObj.getCheckedRowsRecords(): get checked rows records
+ gridObj.getCheckedValues(index): get checked values by index
+
+6, grid other methods list
+ gridObj.getPageCondition(curPage)
+ gridObj.refreshPage()
+ gridObj.firstPage()
+ gridObj.prevPage()
+ gridObj.nextPage()
+ gridObj.lastPage()
+ gridObj.gotoPage(pageNo)
+ gridObj.page(curPage)
+
+ gridObj.sort(thObj)
+ gridObj.getGridHeaderObject(): note only return thead last tr's th
+ gridObj.getColumnModel(colIndex)
+ gridObj.clearGridBodyData()
+
+ gridObj.setGridBlankBody()
+ gridObj.appendHeaderSort()
+ gridObj.createPagingOutTab()
+ gridObj.initPaging()
+ gridObj.setPagingValues()
+
+7, bsgrid other useful methods
+ $.fn.bsgrid.getGridObj(gridId): get grid object
+ $.fn.bsgrid.columnTip(tdObj, value, record): tip column
+ $.fn.bsgrid.longLengthSubAndTip(tdObj, value, maxLen, record): if column's value length longer than it, auto sub and tip it.
+ sub: txt.substring(0, MaxLength-3) + '...'
+
+8, bsgrid edit methods
+ gridObj.activeGridEditMode: active grid edit mode
+ gridObj.getChangedRowsIndexs: get changed rows indexs, from 0
+ gridObj.getChangedRowsOldRecords: get changed rows old records
+ gridObj.getRowsChangedColumnsValue: get rows changed columns value, return Object's key is 'row_'+rowIndex, value is a object
+
+9, process lock screen: global method
+ $.fn.bsgrid.lockScreen: lock screen method
+ $.fn.bsgrid.unlockScreen: unlock screen method
+
+10, Paging Toolbar
+ How to Change Paging Toolbar, global method
+ $.fn.bsgrid.createPagingOutTab(options): grid.js
+ $.fn.bsgrid.createPagingToolbar(options): grid.paging.js
+ $.fn.bsgrid.setPagingToolbarEvents(options): grid.paging.js
+ $.fn.bsgrid.dynamicChangePagingButtonStyle(options): grid.paging.js
+
+11, th properties default
+ $.fn.bsgrid.defaults.colsProperties, properties follow:
+ body row every column config: align(default 'center'), maxLength(default 40)
+ config properties's name: indexAttr, sortAttr, alignAttr, lengthAttr, renderAttr, hiddenAttr, tipAttr
+ extend properties's name: editAttr
+
+12, request post params names
+ to modify that: $.fn.bsgrid.defaults.requestParamsName.X = '', X may pageSize, curPage, sortName, sortOrder
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/documention/documention.zh-CN.html b/public/static/admin_static/lib/jquery.bsgrid/documention/documention.zh-CN.html
new file mode 100644
index 0000000..7cd3351
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/documention/documention.zh-CN.html
@@ -0,0 +1,175 @@
+
+
+
+
+ 文档
+
+
+
+1, 皮肤样式
+ 文件: builds/css/skins/grid_*.min.css, 源码: source/css/skins/grid_*.css
+ 本地化脚本
+ 文件: builds/js/lang/grid.*.min.js, 源码: source/js/lang/grid.*.js
+
+2, 配置参数: $.fn.bsgrid.defaults 或 $.fn.bsgrid.init(gridId, settings) 第二个参数
+ dataType: 'json', 'jsonp', 'xml', 默认值'json'
+ dataTrim: true, false, 是否trim单元格值
+ ajaxType: 'post', 'get', 默认值 'post'
+ localData: json数据, xml数据, 默认值false
+ url: 分页请求URL
+ otherParames: 额外的参数, 可设值: false, 字符查询查询串, Object对象或jquery序列化数组, 默认值false
+ 格式 一: 'param1=val1¶m2=val2'
+ 二: {'param1': 'val1', 'param2': 'val2'}
+ 三: $('#searchForm').serializeArray()
+ autoLoad: 是否自动加载数据, 默认值true即初始化表格后自动加载localData或请求URL的数据
+ pageAll: 是否显示全部数据, 显示全部数据时只显示总数据行数不加载分页工具条, 默认值false
+ showPageToolbar: 是否显示分页工具条,默认值true
+ pageSize: 分页大小, 如果设置值小于1则不分页且展示全部数据(即自动将pageAll设置为true), 默认值20
+ pageSizeSelect: 是否显示分页大小选择下拉框, 配合参数pageSizeForGrid, 默认值false
+ pageSizeForGrid: 分页大小选择下拉框显示的值数组
+ pageIncorrectTurnAlert: 翻页是是否显示无页可翻的提示(首页, 上一页, 下一页, 末页), 默认值true
+ multiSort: 是否支持多列排序, 默认值false
+ displayBlankRows: 是否显示空白行, 默认值true
+ lineWrap: 单元格值是否自动换行, 默认值false, 设置false对单元格起效果的样式是: grid.css -> .bsgrid td.lineNoWrap
+ 设置true对单元格起效果的样式是: grid.css -> .bsgrid td.lineWrap
+ stripeRows: 隔行变色, 默认值false, 对应样式是: grid.css -> .bsgrid tr.even_index_row td
+ rowHoverColor: 划过行变色, 默认值false, 对应样式是: grid.css -> .bsgrid tr.row_hover td
+ rowSelectedColor: 是否显示选中行背景色, 默认值true, 对应样式是: grid.css -> .bsgrid tr.selected.selected_color td
+ pagingLittleToolbar: 是否显示精简的图标按钮分页工具条, 默认值false
+ pagingToolbarAlign: 分页工具条的显示位置, 默认值'right'居右, 其他值'left', 'center'
+ pagingBtnClass: 分页工具条按钮的样式, 默认值'pagingBtn', 样式在文件grid.paging.css中
+ displayPagingToolbarOnlyMultiPages: 仅当多页时才显示分页工具条, 默认值false
+ isProcessLockScreen: 数据请求加载过程中是否显示遮罩, 默认值true
+ longLengthAotoSubAndTip: 单元格需要被渲染内容超长时是否截断并tip显示完整内容, 默认值true
+ 截断算法: content.substring(0, MaxLength-3) + '...'. 如果单元格自定义render方法则此配置无意义
+ 截断及tip方法: $.fn.bsgrid.longLengthSubAndTip, 这是一个全局方法
+ beforeSend: Ajax请求提交前执行方法, 参数: options, XMLHttpRequest
+ complete: Ajax请求完成后执行方法, 参数: options, XMLHttpRequest, textStatus
+ processUserdata: 处理userdata的方法, 在表格渲染数据之前执行, 参数: userdata, options
+ extend.settings: supportGridEdit: 是否支持表格编辑, 默认值false
+ supportGridEditTriggerEvent: 触发表格编辑的事件: ''(直接显示编辑状态), 'rowClick', 'rowDoubleClick',
+ 'cellClick', 'cellDoubleClick', 默认值'rowClick'
+ supportColumnMove: 是否支持拖动表头改变表头宽度, 默认值false
+ searchConditions: 构造下拉框查询表单存放的容器ID, 默认值''
+ fixedGridHeader: 是否固定表格表头并滚动表体数据, 默认值false
+ fixedGridHeight: 固定表格的高度, 默认值'320px'
+ 扩展方法, 此系列各方法在additional系列同义方法前执行, 内置扩展写在grid.extend.js文件中:
+ extend.initGridMethods: 初始化表格完成后额外执行的方法
+ extend.beforeRenderGridMethods: 在渲染表格数据前执行的方法
+ extend.renderPerColumnMethods: 渲染单元格数据执行方法, 不论此单元格是否为空单元格(即无数据渲染)
+ extend.renderPerRowMethods: 渲染行数据执行方法, 不论此行是否为空行(即无数据渲染), 在渲染单元格数据方法执行后执行
+ extend.afterRenderGridMethods: 在渲染表格数据后执行的方法
+ additional render methods:
+ additionalBeforeRenderGrid: 在渲染表格数据前执行的方法
+ additionalRenderPerColumn: 渲染单元格数据执行方法, 不论此单元格是否为空单元格(即无数据渲染)
+ additionalRenderPerRow: 渲染行数据执行方法, 不论此行是否为空行(即无数据渲染), 在渲染单元格数据方法执行后执行
+ additionalAfterRenderGrid: 在渲染表格数据后执行的方法
+
+3, 列/表头属性
+ w_index: 列index, 对应加载数据的列key, 区分大小写
+ w_sort: 类似值"id", "id,desc", "id,asc", 其中"id"是列index
+ w_align: 表格单元格数据的对齐方式, 非表头
+ w_length: 单元格需要被渲染内容超过此长度则截断并tip显示完整内容,
+ 截断算法: content.substring(0, MaxLength-3) + '...'
+ 如果单元格自定义render方法则此配置无意义
+ w_render: 自定义列单元格渲染方法名, 插件使用eval(funName)执行此方法, 具有的四个参数是record, rowIndex, colIndex, options
+ 注意如果列有w_render属性设置w_index则无意义. 列可以无w_index或w_render属性
+ w_hidden: 设置为"true"则隐藏此列
+ w_tip: 设置为"true"则同时tip单元格内容, 而不论其长度是否超过w_length设置的长度
+ tip方法: $.fn.bsgrid.columnTip, 这是一个全局方法
+
+ 列/表头扩展属性
+ w_num: 行号, 值为line, total_line, 分别表示当前页的数据行号, 所有记录的数据行号
+ w_check: 设置为true时为列渲染checkbox以选中行
+ w_edit: 单元格编辑, 值: text, hidden, password, radio, button, checkbox, textarea
+ 表底扩展属性
+ w_agg: 聚合, 值: count, countNotNone, sum, avg, max, min, concat, custom
+
+4, 获取分页相关、行记录值、单元格值以及userdata值的方法, 在表格数据渲染后使用
+ gridObj.getPageSize(): 获取分页大小
+ gridObj.getTotalRows(): 获取总行数
+ gridObj.getTotalPages(): 获取总页数
+ gridObj.getCurPage(): 获取当前页码
+ gridObj.getCurPageRowsNum(): 获取当前页记录条数
+ gridObj.getStartRow(): 获取当前页记录起始行数, 从1开始
+ gridObj.getEndRow(): 获取当前页技术行数
+ gridObj.getSortName(): 获取排序属性name
+ gridObj.getSortOrder(): 获取排序方向
+ gridObj.getAllRecords(): 获取所有记录值
+ gridObj.getRecord(rowIndex): 根据行索引获取行记录值, 行索引从0开始
+ gridObj.getRowRecord(rowObj): 根据行dom对象获取行记录值
+ gridObj.getRecordIndexValue(record, index): 获取单元格值, 根据行记录值及列index
+ gridObj.getColumnValue(rowIndex, index): 获取单元格值, 根据行索引值及列index
+ gridObj.getCellRecordValue(rowIndex, colIndex): 获取单元格值, 根据行索引值及列索引
+ gridObj.getRows(): 获取所有行dom对象
+ gridObj.getRow(rowIndex): 获取行dom对象, 根据行index
+ gridObj.getRowCells(rowIndex): 获取行单元格dom对象, 根据行索引值
+ gridObj.getColCells(colIndex): 获取列单元格dom对象, 根据列索引值
+ gridObj.getCell(rowIndex, colIndex): 获取单元格dom对象, 根据行及列索引值
+ gridObj.getUserdata(): 获取userdata值
+
+5, select以及check选中行相关方法, 在表格数据渲染后使用
+ gridObj.selectRow(rowIndex): 根据行索引选中行, 行索引从0开始
+ gridObj.unSelectRow(): 反选行
+ gridObj.getSelectedRow(): 获取选中行dom对象
+ gridObj.getSelectedRowIndex(): 获取选中行的索引值, 行索引从0开始, 如果没有选择则返回-1
+ gridObj.getCheckedRowsIndexs(): 获取checked行的索引值, 行索引从0开始
+ gridObj.getCheckedRowsRecords(): 获取checked行的记录值
+ gridObj.getCheckedValues(index): 获取checked行的index值
+
+6, 表格的其他方法
+ gridObj.getPageCondition(curPage): 获取当前页请求条件
+ gridObj.refreshPage(): 刷新
+ gridObj.firstPage(): 首页
+ gridObj.prevPage(): 上一页
+ gridObj.nextPage(): 下一页
+ gridObj.lastPage(): 末页
+ gridObj.gotoPage(pageNo): 转到指定页
+ gridObj.page(curPage): 此方法不严谨, 使用gridObj.gotoPage(pageNo)代替
+
+ gridObj.sort(thObj): 列排序, 参数是表头dom对象
+ gridObj.getGridHeaderObject(): 获取表头dom对象, 注意获取的是表头的最后一行(最后一行是对于多行表头而言)th的dom对象
+ gridObj.getColumnModel(colIndex): 获取列model值, 参数是列索引
+ gridObj.clearGridBodyData(): 清空表格数据
+
+ gridObj.setGridBlankBody(): 设置表格空白表体
+ gridObj.appendHeaderSort(): append表头的排序
+ gridObj.createPagingOutTab(): 创建存放分页工具条的表格
+ gridObj.initPaging(): 初始化分页工具条
+ gridObj.setPagingValues(): 设置分页工具条的相关值, 注意这是一个接口, 实现方法由分页工具条自身或适配方法实现
+
+7, 表格的其他有用方法
+ $.fn.bsgrid.getGridObj(gridId): 根据表格ID获取表格对象
+ $.fn.bsgrid.columnTip(tdObj, value, record): tip单元格值
+ $.fn.bsgrid.longLengthSubAndTip(tdObj, value, maxLen, record): 单元格需要被渲染内容超过此长度则截断并tip显示完整内容,
+ 截断算法: content.substring(0, MaxLength-3) + '...'
+
+8, 表格编辑方法
+ gridObj.activeGridEditMode: 激活可被编辑的表格单元格
+ gridObj.getChangedRowsIndexs: 获取changed行的索引值, 行索引从0开始
+ gridObj.getChangedRowsOldRecords: 获取changed行的旧记录值
+ gridObj.getRowsChangedColumnsValue: 获取changed单元格的值, 返回Object对象, 其key是'row_'+rowIndex, 值也是Object对象
+
+9, 锁屏遮罩: 全局方法
+ $.fn.bsgrid.lockScreen: 加载锁屏遮罩
+ $.fn.bsgrid.unlockScreen: 解除锁屏遮罩
+
+10, 分页工具条
+ 如何重新构建分页工具条
+ $.fn.bsgrid.createPagingOutTab(options): grid.js
+ $.fn.bsgrid.createPagingToolbar(options): grid.paging.js
+ $.fn.bsgrid.setPagingToolbarEvents(options): grid.paging.js
+ $.fn.bsgrid.dynamicChangePagingButtonStyle(options): grid.paging.js
+
+11, 列/表头部分配置参数
+ $.fn.bsgrid.defaults.colsProperties, 参数如下:
+ 表格表体数据列配置: align(默认值'center'), maxLength(默认值40)
+ 配置参数: indexAttr, sortAttr, alignAttr, lengthAttr, renderAttr, hiddenAttr, tipAttr
+ 扩展配置参数: editAttr
+
+12, 请求参数名
+ 使用如下方法修改默认配置: $.fn.bsgrid.defaults.requestParamsName.X = '', X可以是pageSize, curPage, sortName, sortOrder
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/documention/feedback.html b/public/static/admin_static/lib/jquery.bsgrid/documention/feedback.html
new file mode 100644
index 0000000..d7182db
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/documention/feedback.html
@@ -0,0 +1,62 @@
+
+
+
+
+ 反馈
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/documention/images/donate/weixin.png b/public/static/admin_static/lib/jquery.bsgrid/documention/images/donate/weixin.png
new file mode 100644
index 0000000..e4e1137
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/documention/images/donate/weixin.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/documention/images/donate/zhifubao.jpg b/public/static/admin_static/lib/jquery.bsgrid/documention/images/donate/zhifubao.jpg
new file mode 100644
index 0000000..858fba4
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/documention/images/donate/zhifubao.jpg differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/documention/images/pagination.jpg b/public/static/admin_static/lib/jquery.bsgrid/documention/images/pagination.jpg
new file mode 100644
index 0000000..ecdf86c
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/documention/images/pagination.jpg differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/documention/images/simple.png b/public/static/admin_static/lib/jquery.bsgrid/documention/images/simple.png
new file mode 100644
index 0000000..ab8977d
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/documention/images/simple.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/documention/images/themes.jpg b/public/static/admin_static/lib/jquery.bsgrid/documention/images/themes.jpg
new file mode 100644
index 0000000..4f3e08e
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/documention/images/themes.jpg differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/documention/source.html b/public/static/admin_static/lib/jquery.bsgrid/documention/source.html
new file mode 100644
index 0000000..196fdbd
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/documention/source.html
@@ -0,0 +1,51 @@
+
+
+
+
+ 源码
+
+
+
+
+
+
+ Github
+ 与
+ Git@OSC
+ 同步更新!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/documention/themes.html b/public/static/admin_static/lib/jquery.bsgrid/documention/themes.html
new file mode 100644
index 0000000..ff2ce81
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/documention/themes.html
@@ -0,0 +1,32 @@
+
+
+
+
+ 皮肤
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/donate.html b/public/static/admin_static/lib/jquery.bsgrid/donate.html
new file mode 100644
index 0000000..49af736
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/donate.html
@@ -0,0 +1,110 @@
+
+
+
+
+ 捐助-支持长远发展,感谢您的认可!
+
+
+
+
+
+
+
+
+
+
+
+ 支付宝:
+ 微信:
+
+
+
+
+
+
+捐助总额:
+
+
+ 日期
+ 姓名
+ 数额
+ 捐助方式
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/grid.html b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/grid.html
new file mode 100644
index 0000000..86d2517
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/grid.html
@@ -0,0 +1,61 @@
+
+
+
+
+ Grid with ArtDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/gridAndForm.html b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/gridAndForm.html
new file mode 100644
index 0000000..0c315ea
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/gridAndForm.html
@@ -0,0 +1,229 @@
+
+
+
+
+ Grid And Form with ArtDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override.grid.js b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override.grid.js
new file mode 100644
index 0000000..357fc3e
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override.grid.js
@@ -0,0 +1,32 @@
+/**
+ * require grid.js, artDialog 5.0.4.
+ *
+ * @author Baishui2004
+ * @Date March 21, 2014
+ */
+
+// lock and unlock screen
+$.fn.bsgrid.defaults.lockScreen = function (options, xhr) {
+ $lockScreenDialog.visible();
+ $lockScreenDialog.lock();
+};
+$.fn.bsgrid.defaults.unlockScreen = function (options, xhr, ts) {
+ // delay 0.1s, to make lock screen look better
+ setTimeout(function () {
+ $lockScreenDialog.unlock();
+ $lockScreenDialog.hidden();
+ }, 100);
+};
+
+var $lockScreenDialog;
+$(function () {
+ $lockScreenDialog = $.dialog({
+ id: '$-lock-screen-dialog',
+ width: '205px', // Under IE9, if not set width or set width 'auto', it will cause dialog not display in center.
+ title: false,
+ cancel: false,
+ visible: false,
+ padding: '5px 5px 8px 15px',
+ content: ' ' + $.bsgridLanguage.loadingDataMessage + '
'
+ });
+});
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override.pop.js b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override.pop.js
new file mode 100644
index 0000000..ecda6f9
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override.pop.js
@@ -0,0 +1,43 @@
+/**
+ * require artDialog 5.0.4, artDialog.plugin.override.js.
+ *
+ * @author Baishui2004
+ * @Date July 20, 2014
+ */
+
+function alert(message) {
+ return $.alert(message);
+}
+
+function confirm(message) {
+ return $.confirm(message);
+}
+
+function prompt(text, defaultText) {
+ return $.prompt(text, defaultText);
+}
+
+function modifyDialogAndMaskZIndex() {
+ // Under IE9, may occur dialog covered by it's d-mask lock screen, These code is to solve it below.
+ var mask_index = 0;
+ $('.d-mask').each(function () {
+ var tmp_index = $(this).css('z-index');
+ if (!isNaN(tmp_index) && parseInt(tmp_index) > mask_index) {
+ mask_index = parseInt(tmp_index);
+ }
+ });
+ $('div[role=dialog]').parent('div').each(function (i) {
+ $(this).css('z-index', mask_index + i + 1);
+ });
+}
+
+$(function () {
+ if ($.browser.msie && $.browser.version == '9.0') {
+ // Under IE9, if not set width or set width 'auto', it will cause dialog not display in center. These three line code is to solve it below.
+ alert().hidden().time(1);
+ confirm('').hidden().time(1);
+ prompt('', '').hidden().time(1);
+
+ setInterval(modifyDialogAndMaskZIndex, 500);
+ }
+});
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.plugin.override.en.js b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.plugin.override.en.js
new file mode 100644
index 0000000..383a0dd
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.plugin.override.en.js
@@ -0,0 +1,17 @@
+/**
+ * require artDialog 5.0.4.
+ *
+ * @author Baishui2004
+ * @Date March 21, 2014
+ */
+(function ($) {
+
+ $.bsgrid_artDialog = {
+ okValue: 'OK',
+ cancelValue: 'Cancel',
+ alertDialogTitle: 'Message',
+ confirmDialogTitle: 'Confirm',
+ promptDialogTitle: 'Prompt'
+ };
+
+})(jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.plugin.override.js b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.plugin.override.js
new file mode 100644
index 0000000..e585b89
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.plugin.override.js
@@ -0,0 +1,167 @@
+/**
+ * require artDialog 5.0.4.
+ *
+ * @author Baishui2004
+ * @Date March 21, 2014
+ */
+(function ($) {
+
+ /**
+ * Copy all properties of config obj to obj, if defaults is not undefined or null then first copy all properties of defaults obj to obj.
+ */
+ $.apply = $.dialog.apply = function (o, c, defaults) {
+ if (defaults) {
+ $.apply(o, defaults);
+ }
+ if (o && c && typeof c == 'object') {
+ for (var p in c) {
+ o[p] = c[p];
+ }
+ }
+ return o;
+ };
+
+ $.getCfg = $.dialog.getCfg = function (params) {
+ var cfg = {
+ esc: false, // key Esc to close dialog, default true
+ lock: true, // lock screen, default false
+ okValue: $.bsgrid_artDialog.okValue,
+ cancelValue: $.bsgrid_artDialog.cancelValue
+ };
+ return $.apply(params, cfg);
+ };
+
+ /**
+ * alert dialog.
+ *
+ * @param msg message
+ * @param fn callback function after trigger ok
+ * @param follow HTMLElement, set dialog follow HTMLElement
+ * @param title dilog title
+ */
+ $.alert = $.dialog.alert = function (msg, fn, follow, title) {
+ if (title == undefined) {
+ title = $.bsgrid_artDialog.alertDialogTitle;
+ }
+ var params = {
+ id: 'Alert',
+ title: title,
+ content: [
+ '',
+ msg,
+ '
'
+ ].join(''),
+ ok: true,
+ beforeunload: fn
+ };
+ if (follow == undefined) {
+ return $.dialog($.getCfg(params));
+ } else {
+ params = $.getCfg(params);
+ return $.dialog($.apply(params, {follow: follow}));
+ }
+ };
+
+ /**
+ * confirm dialog.
+ *
+ * @param msg message
+ * @param ok callback function after trigger ok
+ * @param cancel callback function after trigger cancel or close
+ * @param follow HTMLElement, set dialog follow HTMLElement
+ * @param title dilog title
+ */
+ $.confirm = $.dialog.confirm = function (msg, ok, cancel, follow, title) {
+ if (ok == undefined) {
+ ok = function(){
+ this.close();
+ return true;
+ };
+ }
+ if (cancel == undefined) {
+ cancel = function () {
+ this.close();
+ return false;
+ };
+ }
+ if (title == undefined) {
+ title = $.bsgrid_artDialog.confirmDialogTitle;
+ }
+ var params = {
+ id: 'Confirm',
+ title: title,
+ content: [
+ '',
+ msg,
+ '
'
+ ].join(''),
+ ok: ok,
+ cancel: cancel,
+ cancelValue: $.bsgrid_artDialog.cancelValue
+ };
+ if (follow == undefined) {
+ return $.dialog($.getCfg(params));
+ } else {
+ params = $.getCfg(params);
+ return $.dialog($.apply(params, {follow: follow}));
+ }
+ };
+
+ /**
+ * prompt dialog.
+ *
+ * @param msg message
+ * @param defaultValue default value
+ * @param fn callback function after trigger ok
+ * @param follow HTMLElement, set dialog follow HTMLElement
+ * @param title dilog title
+ */
+ $.prompt = $.dialog.prompt = function (msg, defaultValue, ok, cancel, follow, title) {
+ if (ok == undefined) {
+ ok = function (newText) {
+ return newText;
+ };
+ }
+ if (cancel == undefined) {
+ cancel = function () {
+ this.close();
+ };
+ }
+ if (title == undefined) {
+ title = $.bsgrid_artDialog.promptDialogTitle;
+ }
+ var params = {
+ id: 'Prompt',
+ title: title,
+ content: [
+ '',
+ msg,
+ '
',
+ '',
+ '',
+ defaultValue,
+ ' ',
+ '
'
+ ].join(''),
+ initialize: function () {
+ input = this.dom.content.find('.d-input-text')[0];
+ input.select();
+ input.focus();
+ },
+ ok: function () {
+ return ok && ok.call(this, input.value);
+ },
+ cancel: cancel
+ };
+ defaultValue = defaultValue || '';
+ var input;
+ if (follow == undefined) {
+ return $.dialog($.getCfg(params));
+ } else {
+ params = $.getCfg(params);
+ return $.dialog($.apply(params, {follow: follow}));
+ }
+ };
+
+}(this.art || this.jQuery));
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.plugin.override.zh-CN.js b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.plugin.override.zh-CN.js
new file mode 100644
index 0000000..88bf29d
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.plugin.override.zh-CN.js
@@ -0,0 +1,17 @@
+/**
+ * require artDialog 5.0.4.
+ *
+ * @author Baishui2004
+ * @Date March 21, 2014
+ */
+(function ($) {
+
+ $.bsgrid_artDialog = {
+ okValue: '确定',
+ cancelValue: '取消',
+ alertDialogTitle: '提示',
+ confirmDialogTitle: '确认',
+ promptDialogTitle: '输入'
+ };
+
+})(jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.plugin.override.zh-TW.js b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.plugin.override.zh-TW.js
new file mode 100644
index 0000000..e32d2e3
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.plugin.override.zh-TW.js
@@ -0,0 +1,17 @@
+/**
+ * require artDialog 5.0.4.
+ *
+ * @author Baishui2004
+ * @Date March 21, 2014
+ */
+(function ($) {
+
+ $.bsgrid_artDialog = {
+ okValue: '確定',
+ cancelValue: '取消',
+ alertDialogTitle: '提示',
+ confirmDialogTitle: '確認',
+ promptDialogTitle: '輸入'
+ };
+
+})(jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.skins.override.css b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.skins.override.css
new file mode 100644
index 0000000..8570d4d
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/override/artDialog.skins.override.css
@@ -0,0 +1,14 @@
+@CHARSET "UTF-8";
+
+.d-mask {
+ /* Modify transparency. Original opacity=70, opacity:.7 at blue.css line 35. */
+ background: #000;
+ filter: alpha(opacity=10);
+ opacity: .1;
+ -moz-opacity:0.1;
+}
+
+/* Modify pop window's background color. Original #f7f7f7 at blue.css line 38. */
+.d-inner {
+ background: white;
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/pop.html b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/pop.html
new file mode 100644
index 0000000..0f1021f
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/artDialog/pop.html
@@ -0,0 +1,72 @@
+
+
+
+
+ ArtDialog pop
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ArtDialog Pop:
+ 1, Once time only can display a pop, alert or confirm or prompt;
+ 2, Compared with browser js native pop method, pop used artDialog is Not Blocked;
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/bootstrap/grid.html b/public/static/admin_static/lib/jquery.bsgrid/examples/bootstrap/grid.html
new file mode 100644
index 0000000..8886970
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/bootstrap/grid.html
@@ -0,0 +1,59 @@
+
+
+
+
+ Simple BootStrap Style Grid
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/button/button.html b/public/static/admin_static/lib/jquery.bsgrid/examples/button/button.html
new file mode 100644
index 0000000..325bf04
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/button/button.html
@@ -0,0 +1,20 @@
+
+
+
+
+ Button
+
+
+
+
Style 1:
+View
+
+Long icon
+
+
Style 2:
+View
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/en.html b/public/static/admin_static/lib/jquery.bsgrid/examples/en.html
new file mode 100644
index 0000000..17b9bce
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/en.html
@@ -0,0 +1,270 @@
+
+
+
+
+Samples Index - jQuery.bsgrid
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/example.css b/public/static/admin_static/lib/jquery.bsgrid/examples/form/example.css
new file mode 100644
index 0000000..0a3430e
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/example.css
@@ -0,0 +1,12 @@
+@CHARSET "UTF-8";
+
+.bsgrid_form table {
+ width: 100%;
+ border-collapse: collapse;
+}
+
+.bsgrid_form table td {
+ padding: 4px;
+ line-height: 150%;
+ border: solid 1px #eee;
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/simple.html b/public/static/admin_static/lib/jquery.bsgrid/examples/form/simple.html
new file mode 100644
index 0000000..dea4ffb
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/simple.html
@@ -0,0 +1,70 @@
+
+
+
+
+ Simple Form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/standard.html b/public/static/admin_static/lib/jquery.bsgrid/examples/form/standard.html
new file mode 100644
index 0000000..e59872c
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/standard.html
@@ -0,0 +1,95 @@
+
+
+
+
+ Standard Form
+
+
+
+
+
+
+
+
+
+
+
+
+Documention:
+
+1, .bsgrid_form *:
+ showType: 'view*', 'add*', 'edit*', 'add*,edit*', and so on, no deal blank, '*' means zero or more characters.
+2, .bsgrid_form :input:
+ edit*Able: 'false', other value display and can edit, '*' means zero or more characters.
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/validation-ajax.html b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validation-ajax.html
new file mode 100644
index 0000000..4703e10
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validation-ajax.html
@@ -0,0 +1,114 @@
+
+
+
+
+ With Ajax Validation Form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 说明:示例中仅当Account所填值为"Account"时,才满足唯一性校验。
+ 使用validationEngine进行form提交校验时,提交button的type值必须是submit。
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/validation-ajax.json.jsp b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validation-ajax.json.jsp
new file mode 100644
index 0000000..4c179a9
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validation-ajax.json.jsp
@@ -0,0 +1,18 @@
+<%@ page language="java" pageEncoding="UTF-8" %>
+<%
+ String formType = request.getParameter("formType");
+ String fieldId = request.getParameter("fieldId");
+ String fieldValue = request.getParameter("fieldValue");
+
+ if (fieldValue == null) {
+ fieldValue = request.getParameter("account");
+ }
+
+ System.out.println("formType=" + formType + ", fieldId=" + fieldId + ", fieldValue=" + fieldValue);
+
+ if (fieldValue.equals("Account")) {
+ out.print("[\"account\", true]"); // true表示唯一
+ } else {
+ out.print("[\"account\", false]"); // false非唯一
+ }
+%>
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/validation.html b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validation.html
new file mode 100644
index 0000000..ee9ec59
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validation.html
@@ -0,0 +1,99 @@
+
+
+
+
+ Validation Form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine-addition-rules.js b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine-addition-rules.js
new file mode 100644
index 0000000..bd77ba1
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine-addition-rules.js
@@ -0,0 +1,70 @@
+/**
+ * 验证需以字母开头,只可包含字母数字的账号,最小长度1.
+ *
+ * @param {jqObject} the field where the validation applies
+ * @param {Array[String]} validation rules for this field
+ * @param {int} rule index
+ * @param {Map} form options
+ * @return an error string if validation failed
+ */
+function checkAccount(field, rules, i, options){
+ if(!/^[a-zA-Z]\w*$/.test(field.val())){
+ return "* 需以字母开头可含数字";
+ }
+}
+/**
+ * 验证中文.
+ */
+function checkChinese(field, rules, i, options){
+ if(!/^[\u4E00-\u9FA5]+$/.test(field.val())){
+ return "* 只能填写汉字";
+ }
+}
+/**
+ * 验证中文姓名(可以包含中文,英文字母,数字,半角括号,下划线"_"及"-").
+ */
+function checkChineseName(field, rules, i, options){
+ if(!/^[\d\u002d\u005f\u0028\u0029\u4E00-\u9FA5a-zA-Z]+$/.test(field.val())){
+ return "* 请填写中文、英文、数字、半角括号、\"_\"、\"-\"";
+ }
+}
+/**
+ * 验证18位身份证号码.
+ */
+function checkChinaId(field, rules, i, options){
+ if(!/^[1-9]\d{5}[1-9]\d{3}(((0[13578]|1[02])(0[1-9]|[12]\d|3[0-1]))|((0[469]|11)(0[1-9]|[12]\d|30))|(02(0[1-9]|[12]\d)))(\d{4}|\d{3}[xX])$/.test(field.val())){
+ return "* 无效的身份证号码";
+ }
+}
+/**
+ * 验证宽松的身份证号码18位或15位.
+ */
+function checkChinaIdLoose(field, rules, i, options){
+ if(!/^(\d{18}|\d{15}|\d{17}[xX])$/.test(field.val())){
+ return "* 无效的身份证号码";
+ }
+}
+/**
+ * 验证邮政编码.
+ */
+function checkChinaZip(field, rules, i, options){
+ if(!/^\d{6}$/.test(field.val())){
+ return "* 无效的邮政编码";
+ }
+}
+/**
+ * 验证手机号码.
+ */
+function checkChinaMobilephone(field, rules, i, options){
+ if(!/^1\d{10}$/.test(field.val())){
+ return "* 无效的手机号码";
+ }
+}
+/**
+ * 验证QQ号码.
+ */
+function checkQq(field, rules, i, options){
+ if(!/^[1-9]\d{4,10}$/.test(field.val())){
+ return "* 无效的QQ号码";
+ }
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/css/validationEngine.jquery.css b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/css/validationEngine.jquery.css
new file mode 100644
index 0000000..5cfcdf7
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/css/validationEngine.jquery.css
@@ -0,0 +1,182 @@
+
+
+
+/* Z-INDEX */
+ .formError { z-index: 990; }
+ .formError .formErrorContent { z-index: 991; }
+ .formError .formErrorArrow { z-index: 996; }
+
+ .ui-dialog .formError { z-index: 5000; }
+ .ui-dialog .formError .formErrorContent { z-index: 5001; }
+ .ui-dialog .formError .formErrorArrow { z-index: 5006; }
+
+
+
+
+.inputContainer {
+ position: relative;
+ float: left;
+}
+
+.formError {
+ position: absolute;
+ top: 300px;
+ left: 300px;
+ display: block;
+ cursor: pointer;
+ text-align: left;
+}
+
+.formError.inline {
+ position: relative;
+ top: 0;
+ left: 0;
+ display: inline-block;
+}
+
+.ajaxSubmit {
+ padding: 20px;
+ background: #55ea55;
+ border: 1px solid #999;
+ display: none;
+}
+
+.formError .formErrorContent {
+ width: 100%;
+ background: #ee0101;
+ position:relative;
+ color: #fff;
+ min-width: 120px;
+ font-size: 11px;
+ border: 2px solid #ddd;
+ box-shadow: 0 0 6px #000;
+ -moz-box-shadow: 0 0 6px #000;
+ -webkit-box-shadow: 0 0 6px #000;
+ -o-box-shadow: 0 0 6px #000;
+ padding: 4px 10px 4px 10px;
+ border-radius: 6px;
+ -moz-border-radius: 6px;
+ -webkit-border-radius: 6px;
+ -o-border-radius: 6px;
+}
+
+.formError.inline .formErrorContent {
+ box-shadow: none;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ -o-box-shadow: none;
+ border: none;
+ border-radius: 0;
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+ -o-border-radius: 0;
+}
+
+.greenPopup .formErrorContent {
+ background: #33be40;
+}
+
+.blackPopup .formErrorContent {
+ background: #393939;
+ color: #FFF;
+}
+
+.formError .formErrorArrow {
+ width: 15px;
+ margin: -2px 0 0 13px;
+ position:relative;
+}
+body[dir='rtl'] .formError .formErrorArrow,
+body.rtl .formError .formErrorArrow {
+ margin: -2px 13px 0 0;
+}
+
+.formError .formErrorArrowBottom {
+ box-shadow: none;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ -o-box-shadow: none;
+ margin: 0px 0 0 12px;
+ top:2px;
+}
+
+.formError .formErrorArrow div {
+ border-left: 2px solid #ddd;
+ border-right: 2px solid #ddd;
+ box-shadow: 0 2px 3px #444;
+ -moz-box-shadow: 0 2px 3px #444;
+ -webkit-box-shadow: 0 2px 3px #444;
+ -o-box-shadow: 0 2px 3px #444;
+ font-size: 0px;
+ height: 1px;
+ background: #ee0101;
+ margin: 0 auto;
+ line-height: 0;
+ font-size: 0;
+ display: block;
+}
+
+.formError .formErrorArrowBottom div {
+ box-shadow: none;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ -o-box-shadow: none;
+}
+
+.greenPopup .formErrorArrow div {
+ background: #33be40;
+}
+
+.blackPopup .formErrorArrow div {
+ background: #393939;
+ color: #FFF;
+}
+
+.formError .formErrorArrow .line10 {
+ width: 15px;
+ border: none;
+}
+
+.formError .formErrorArrow .line9 {
+ width: 13px;
+ border: none;
+}
+
+.formError .formErrorArrow .line8 {
+ width: 11px;
+}
+
+.formError .formErrorArrow .line7 {
+ width: 9px;
+}
+
+.formError .formErrorArrow .line6 {
+ width: 7px;
+}
+
+.formError .formErrorArrow .line5 {
+ width: 5px;
+}
+
+.formError .formErrorArrow .line4 {
+ width: 3px;
+}
+
+.formError .formErrorArrow .line3 {
+ width: 1px;
+ border-left: 2px solid #ddd;
+ border-right: 2px solid #ddd;
+ border-bottom: 0 solid #ddd;
+}
+
+.formError .formErrorArrow .line2 {
+ width: 3px;
+ border: none;
+ background: #ddd;
+}
+
+.formError .formErrorArrow .line1 {
+ width: 1px;
+ border: none;
+ background: #ddd;
+}
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/js/jquery.validationEngine.js b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/js/jquery.validationEngine.js
new file mode 100644
index 0000000..386d352
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/js/jquery.validationEngine.js
@@ -0,0 +1,2053 @@
+/*
+ * Inline Form Validation Engine 2.6.2, jQuery plugin
+ *
+ * Copyright(c) 2010, Cedric Dugas
+ * http://www.position-absolute.com
+ *
+ * 2.0 Rewrite by Olivier Refalo
+ * http://www.crionics.com
+ *
+ * Form validation engine allowing custom regex rules to be added.
+ * Licensed under the MIT License
+ */
+ (function($) {
+
+ "use strict";
+
+ var methods = {
+
+ /**
+ * Kind of the constructor, called before any action
+ * @param {Map} user options
+ */
+ init: function(options) {
+ var form = this;
+ if (!form.data('jqv') || form.data('jqv') == null ) {
+ options = methods._saveOptions(form, options);
+ // bind all formError elements to close on click
+ $(document).on("click", ".formError", function() {
+ $(this).fadeOut(150, function() {
+ // remove prompt once invisible
+ $(this).parent('.formErrorOuter').remove();
+ $(this).remove();
+ });
+ });
+ }
+ return this;
+ },
+ /**
+ * Attachs jQuery.validationEngine to form.submit and field.blur events
+ * Takes an optional params: a list of options
+ * ie. jQuery("#formID1").validationEngine('attach', {promptPosition : "centerRight"});
+ */
+ attach: function(userOptions) {
+
+ var form = this;
+ var options;
+
+ if(userOptions)
+ options = methods._saveOptions(form, userOptions);
+ else
+ options = form.data('jqv');
+
+ options.validateAttribute = (form.find("[data-validation-engine*=validate]").length) ? "data-validation-engine" : "class";
+ if (options.binded) {
+
+ // delegate fields
+ form.on(options.validationEventTrigger, "["+options.validateAttribute+"*=validate]:not([type=checkbox]):not([type=radio]):not(.datepicker)", methods._onFieldEvent);
+ form.on("click", "["+options.validateAttribute+"*=validate][type=checkbox],["+options.validateAttribute+"*=validate][type=radio]", methods._onFieldEvent);
+ form.on(options.validationEventTrigger,"["+options.validateAttribute+"*=validate][class*=datepicker]", {"delay": 300}, methods._onFieldEvent);
+ }
+ if (options.autoPositionUpdate) {
+ $(window).bind("resize", {
+ "noAnimation": true,
+ "formElem": form
+ }, methods.updatePromptsPosition);
+ }
+ form.on("click","a[data-validation-engine-skip], a[class*='validate-skip'], button[data-validation-engine-skip], button[class*='validate-skip'], input[data-validation-engine-skip], input[class*='validate-skip']", methods._submitButtonClick);
+ form.removeData('jqv_submitButton');
+
+ // bind form.submit
+ form.on("submit", methods._onSubmitEvent);
+ return this;
+ },
+ /**
+ * Unregisters any bindings that may point to jQuery.validaitonEngine
+ */
+ detach: function() {
+
+ var form = this;
+ var options = form.data('jqv');
+
+ // unbind fields
+ form.find("["+options.validateAttribute+"*=validate]").not("[type=checkbox]").off(options.validationEventTrigger, methods._onFieldEvent);
+ form.find("["+options.validateAttribute+"*=validate][type=checkbox],[class*=validate][type=radio]").off("click", methods._onFieldEvent);
+
+ // unbind form.submit
+ form.off("submit", methods.onAjaxFormComplete);
+
+ // unbind form.submit
+ form.off("submit", methods.onAjaxFormComplete);
+ form.removeData('jqv');
+
+ form.off("click", "a[data-validation-engine-skip], a[class*='validate-skip'], button[data-validation-engine-skip], button[class*='validate-skip'], input[data-validation-engine-skip], input[class*='validate-skip']", methods._submitButtonClick);
+ form.removeData('jqv_submitButton');
+
+ if (options.autoPositionUpdate)
+ $(window).unbind("resize", methods.updatePromptsPosition);
+
+ return this;
+ },
+ /**
+ * Validates either a form or a list of fields, shows prompts accordingly.
+ * Note: There is no ajax form validation with this method, only field ajax validation are evaluated
+ *
+ * @return true if the form validates, false if it fails
+ */
+ validate: function() {
+ var element = $(this);
+ var valid = null;
+
+ if (element.is("form") || element.hasClass("validationEngineContainer")) {
+ if (element.hasClass('validating')) {
+ // form is already validating.
+ // Should abort old validation and start new one. I don't know how to implement it.
+ return false;
+ } else {
+ element.addClass('validating');
+ var options = element.data('jqv');
+ var valid = methods._validateFields(this);
+
+ // If the form doesn't validate, clear the 'validating' class before the user has a chance to submit again
+ setTimeout(function(){
+ element.removeClass('validating');
+ }, 100);
+ if (valid && options.onSuccess) {
+ options.onSuccess();
+ } else if (!valid && options.onFailure) {
+ options.onFailure();
+ }
+ }
+ } else if (element.is('form') || element.hasClass('validationEngineContainer')) {
+ element.removeClass('validating');
+ } else {
+ // field validation
+ var form = element.closest('form, .validationEngineContainer'),
+ options = (form.data('jqv')) ? form.data('jqv') : $.validationEngine.defaults,
+ valid = methods._validateField(element, options);
+
+ if (valid && options.onFieldSuccess)
+ options.onFieldSuccess();
+ else if (options.onFieldFailure && options.InvalidFields.length > 0) {
+ options.onFieldFailure();
+ }
+ }
+ if(options.onValidationComplete) {
+ // !! ensures that an undefined return is interpreted as return false but allows a onValidationComplete() to possibly return true and have form continue processing
+ return !!options.onValidationComplete(form, valid);
+ }
+ return valid;
+ },
+ /**
+ * Redraw prompts position, useful when you change the DOM state when validating
+ */
+ updatePromptsPosition: function(event) {
+
+ if (event && this == window) {
+ var form = event.data.formElem;
+ var noAnimation = event.data.noAnimation;
+ }
+ else
+ var form = $(this.closest('form, .validationEngineContainer'));
+
+ var options = form.data('jqv');
+ // No option, take default one
+ form.find('['+options.validateAttribute+'*=validate]').not(":disabled").each(function(){
+ var field = $(this);
+ if (options.prettySelect && field.is(":hidden"))
+ field = form.find("#" + options.usePrefix + field.attr('id') + options.useSuffix);
+ var prompt = methods._getPrompt(field);
+ var promptText = $(prompt).find(".formErrorContent").html();
+
+ if(prompt)
+ methods._updatePrompt(field, $(prompt), promptText, undefined, false, options, noAnimation);
+ });
+ return this;
+ },
+ /**
+ * Displays a prompt on a element.
+ * Note that the element needs an id!
+ *
+ * @param {String} promptText html text to display type
+ * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
+ * @param {String} possible values topLeft, topRight, bottomLeft, centerRight, bottomRight
+ */
+ showPrompt: function(promptText, type, promptPosition, showArrow) {
+ var form = this.closest('form, .validationEngineContainer');
+ var options = form.data('jqv');
+ // No option, take default one
+ if(!options)
+ options = methods._saveOptions(this, options);
+ if(promptPosition)
+ options.promptPosition=promptPosition;
+ options.showArrow = showArrow==true;
+
+ methods._showPrompt(this, promptText, type, false, options);
+ return this;
+ },
+ /**
+ * Closes form error prompts, CAN be invidual
+ */
+ hide: function() {
+ var form = $(this).closest('form, .validationEngineContainer');
+ var options = form.data('jqv');
+ var fadeDuration = (options && options.fadeDuration) ? options.fadeDuration : 0.3;
+ var closingtag;
+
+ if($(this).is("form") || $(this).hasClass("validationEngineContainer")) {
+ closingtag = "parentForm"+methods._getClassName($(this).attr("id"));
+ } else {
+ closingtag = methods._getClassName($(this).attr("id")) +"formError";
+ }
+ $('.'+closingtag).fadeTo(fadeDuration, 0.3, function() {
+ $(this).parent('.formErrorOuter').remove();
+ $(this).remove();
+ });
+ return this;
+ },
+ /**
+ * Closes all error prompts on the page
+ */
+ hideAll: function() {
+
+ var form = this;
+ var options = form.data('jqv');
+ var duration = options ? options.fadeDuration:300;
+ $('.formError').fadeTo(duration, 300, function() {
+ $(this).parent('.formErrorOuter').remove();
+ $(this).remove();
+ });
+ return this;
+ },
+ /**
+ * Typically called when user exists a field using tab or a mouse click, triggers a field
+ * validation
+ */
+ _onFieldEvent: function(event) {
+ var field = $(this);
+ var form = field.closest('form, .validationEngineContainer');
+ var options = form.data('jqv');
+ options.eventTrigger = "field";
+ // validate the current field
+ window.setTimeout(function() {
+ methods._validateField(field, options);
+ if (options.InvalidFields.length == 0 && options.onFieldSuccess) {
+ options.onFieldSuccess();
+ } else if (options.InvalidFields.length > 0 && options.onFieldFailure) {
+ options.onFieldFailure();
+ }
+ }, (event.data) ? event.data.delay : 0);
+
+ },
+ /**
+ * Called when the form is submited, shows prompts accordingly
+ *
+ * @param {jqObject}
+ * form
+ * @return false if form submission needs to be cancelled
+ */
+ _onSubmitEvent: function() {
+ var form = $(this);
+ var options = form.data('jqv');
+
+ //check if it is trigger from skipped button
+ if (form.data("jqv_submitButton")){
+ var submitButton = $("#" + form.data("jqv_submitButton"));
+ if (submitButton){
+ if (submitButton.length > 0){
+ if (submitButton.hasClass("validate-skip") || submitButton.attr("data-validation-engine-skip") == "true")
+ return true;
+ }
+ }
+ }
+
+ options.eventTrigger = "submit";
+
+ // validate each field
+ // (- skip field ajax validation, not necessary IF we will perform an ajax form validation)
+ var r=methods._validateFields(form);
+
+ if (r && options.ajaxFormValidation) {
+ methods._validateFormWithAjax(form, options);
+ // cancel form auto-submission - process with async call onAjaxFormComplete
+ return false;
+ }
+
+ if(options.onValidationComplete) {
+ // !! ensures that an undefined return is interpreted as return false but allows a onValidationComplete() to possibly return true and have form continue processing
+ return !!options.onValidationComplete(form, r);
+ }
+ return r;
+ },
+ /**
+ * Return true if the ajax field validations passed so far
+ * @param {Object} options
+ * @return true, is all ajax validation passed so far (remember ajax is async)
+ */
+ _checkAjaxStatus: function(options) {
+ var status = true;
+ $.each(options.ajaxValidCache, function(key, value) {
+ if (!value) {
+ status = false;
+ // break the each
+ return false;
+ }
+ });
+ return status;
+ },
+
+ /**
+ * Return true if the ajax field is validated
+ * @param {String} fieldid
+ * @param {Object} options
+ * @return true, if validation passed, false if false or doesn't exist
+ */
+ _checkAjaxFieldStatus: function(fieldid, options) {
+ return options.ajaxValidCache[fieldid] == true;
+ },
+ /**
+ * Validates form fields, shows prompts accordingly
+ *
+ * @param {jqObject}
+ * form
+ * @param {skipAjaxFieldValidation}
+ * boolean - when set to true, ajax field validation is skipped, typically used when the submit button is clicked
+ *
+ * @return true if form is valid, false if not, undefined if ajax form validation is done
+ */
+ _validateFields: function(form) {
+ var options = form.data('jqv');
+
+ // this variable is set to true if an error is found
+ var errorFound = false;
+
+ // Trigger hook, start validation
+ form.trigger("jqv.form.validating");
+ // first, evaluate status of non ajax fields
+ var first_err=null;
+ form.find('['+options.validateAttribute+'*=validate]').not(":disabled").each( function() {
+ var field = $(this);
+ var names = [];
+ if ($.inArray(field.attr('name'), names) < 0) {
+ errorFound |= methods._validateField(field, options);
+ if (errorFound && first_err==null)
+ if (field.is(":hidden") && options.prettySelect)
+ first_err = field = form.find("#" + options.usePrefix + methods._jqSelector(field.attr('id')) + options.useSuffix);
+ else
+ first_err=field;
+ if (options.doNotShowAllErrosOnSubmit)
+ return false;
+ names.push(field.attr('name'));
+
+ //if option set, stop checking validation rules after one error is found
+ if(options.showOneMessage == true && errorFound){
+ return false;
+ }
+ }
+ });
+
+ // second, check to see if all ajax calls completed ok
+ // errorFound |= !methods._checkAjaxStatus(options);
+
+ // third, check status and scroll the container accordingly
+ form.trigger("jqv.form.result", [errorFound]);
+
+ if (errorFound) {
+ if (options.scroll) {
+ var destination=first_err.offset().top;
+ var fixleft = first_err.offset().left;
+
+ //prompt positioning adjustment support. Usage: positionType:Xshift,Yshift (for ex.: bottomLeft:+20 or bottomLeft:-20,+10)
+ var positionType=options.promptPosition;
+ if (typeof(positionType)=='string' && positionType.indexOf(":")!=-1)
+ positionType=positionType.substring(0,positionType.indexOf(":"));
+
+ if (positionType!="bottomRight" && positionType!="bottomLeft") {
+ var prompt_err= methods._getPrompt(first_err);
+ if (prompt_err) {
+ destination=prompt_err.offset().top;
+ }
+ }
+
+ // Offset the amount the page scrolls by an amount in px to accomodate fixed elements at top of page
+ if (options.scrollOffset) {
+ destination -= options.scrollOffset;
+ }
+
+ // get the position of the first error, there should be at least one, no need to check this
+ //var destination = form.find(".formError:not('.greenPopup'):first").offset().top;
+ if (options.isOverflown) {
+ var overflowDIV = $(options.overflownDIV);
+ if(!overflowDIV.length) return false;
+ var scrollContainerScroll = overflowDIV.scrollTop();
+ var scrollContainerPos = -parseInt(overflowDIV.offset().top);
+
+ destination += scrollContainerScroll + scrollContainerPos - 5;
+ var scrollContainer = $(options.overflownDIV + ":not(:animated)");
+
+ scrollContainer.animate({ scrollTop: destination }, 1100, function(){
+ if(options.focusFirstField) first_err.focus();
+ });
+
+ } else {
+ $("html, body").animate({
+ scrollTop: destination
+ }, 1100, function(){
+ if(options.focusFirstField) first_err.focus();
+ });
+ $("html, body").animate({scrollLeft: fixleft},1100)
+ }
+
+ } else if(options.focusFirstField)
+ first_err.focus();
+ return false;
+ }
+ return true;
+ },
+ /**
+ * This method is called to perform an ajax form validation.
+ * During this process all the (field, value) pairs are sent to the server which returns a list of invalid fields or true
+ *
+ * @param {jqObject} form
+ * @param {Map} options
+ */
+ _validateFormWithAjax: function(form, options) {
+
+ var data = form.serialize();
+ var type = (options.ajaxFormValidationMethod) ? options.ajaxFormValidationMethod : "GET";
+ var url = (options.ajaxFormValidationURL) ? options.ajaxFormValidationURL : form.attr("action");
+ var dataType = (options.dataType) ? options.dataType : "json";
+ $.ajax({
+ type: type,
+ url: url,
+ cache: false,
+ dataType: dataType,
+ data: data,
+ form: form,
+ methods: methods,
+ options: options,
+ beforeSend: function() {
+ return options.onBeforeAjaxFormValidation(form, options);
+ },
+ error: function(data, transport) {
+ methods._ajaxError(data, transport);
+ },
+ success: function(json) {
+ if ((dataType == "json") && (json !== true)) {
+ // getting to this case doesn't necessary means that the form is invalid
+ // the server may return green or closing prompt actions
+ // this flag helps figuring it out
+ var errorInForm=false;
+ for (var i = 0; i < json.length; i++) {
+ var value = json[i];
+
+ var errorFieldId = value[0];
+ var errorField = $($("#" + errorFieldId)[0]);
+
+ // make sure we found the element
+ if (errorField.length == 1) {
+
+ // promptText or selector
+ var msg = value[2];
+ // if the field is valid
+ if (value[1] == true) {
+
+ if (msg == "" || !msg){
+ // if for some reason, status==true and error="", just close the prompt
+ methods._closePrompt(errorField);
+ } else {
+ // the field is valid, but we are displaying a green prompt
+ if (options.allrules[msg]) {
+ var txt = options.allrules[msg].alertTextOk;
+ if (txt)
+ msg = txt;
+ }
+ if (options.showPrompts) methods._showPrompt(errorField, msg, "pass", false, options, true);
+ }
+ } else {
+ // the field is invalid, show the red error prompt
+ errorInForm|=true;
+ if (options.allrules[msg]) {
+ var txt = options.allrules[msg].alertText;
+ if (txt)
+ msg = txt;
+ }
+ if(options.showPrompts) methods._showPrompt(errorField, msg, "", false, options, true);
+ }
+ }
+ }
+ options.onAjaxFormComplete(!errorInForm, form, json, options);
+ } else
+ options.onAjaxFormComplete(true, form, json, options);
+
+ }
+ });
+
+ },
+ /**
+ * Validates field, shows prompts accordingly
+ *
+ * @param {jqObject}
+ * field
+ * @param {Array[String]}
+ * field's validation rules
+ * @param {Map}
+ * user options
+ * @return false if field is valid (It is inversed for *fields*, it return false on validate and true on errors.)
+ */
+ _validateField: function(field, options, skipAjaxValidation) {
+ if (!field.attr("id")) {
+ field.attr("id", "form-validation-field-" + $.validationEngine.fieldIdCounter);
+ ++$.validationEngine.fieldIdCounter;
+ }
+
+ if (!options.validateNonVisibleFields && (field.is(":hidden") && !options.prettySelect || field.parent().is(":hidden")))
+ return false;
+
+ var rulesParsing = field.attr(options.validateAttribute);
+ var getRules = /validate\[(.*)\]/.exec(rulesParsing);
+
+ if (!getRules)
+ return false;
+ var str = getRules[1];
+ var rules = str.split(/\[|,|\]/);
+
+ // true if we ran the ajax validation, tells the logic to stop messing with prompts
+ var isAjaxValidator = false;
+ var fieldName = field.attr("name");
+ var promptText = "";
+ var promptType = "";
+ var required = false;
+ var limitErrors = false;
+ options.isError = false;
+ options.showArrow = true;
+
+ // If the programmer wants to limit the amount of error messages per field,
+ if (options.maxErrorsPerField > 0) {
+ limitErrors = true;
+ }
+
+ var form = $(field.closest("form, .validationEngineContainer"));
+ // Fix for adding spaces in the rules
+ for (var i = 0; i < rules.length; i++) {
+ rules[i] = rules[i].replace(" ", "");
+ // Remove any parsing errors
+ if (rules[i] === '') {
+ delete rules[i];
+ }
+ }
+
+ for (var i = 0, field_errors = 0; i < rules.length; i++) {
+
+ // If we are limiting errors, and have hit the max, break
+ if (limitErrors && field_errors >= options.maxErrorsPerField) {
+ // If we haven't hit a required yet, check to see if there is one in the validation rules for this
+ // field and that it's index is greater or equal to our current index
+ if (!required) {
+ var have_required = $.inArray('required', rules);
+ required = (have_required != -1 && have_required >= i);
+ }
+ break;
+ }
+
+
+ var errorMsg = undefined;
+ switch (rules[i]) {
+
+ case "required":
+ required = true;
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._required);
+ break;
+ case "custom":
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._custom);
+ break;
+ case "groupRequired":
+ // Check is its the first of group, if not, reload validation with first field
+ // AND continue normal validation on present field
+ var classGroup = "["+options.validateAttribute+"*=" +rules[i + 1] +"]";
+ var firstOfGroup = form.find(classGroup).eq(0);
+ if(firstOfGroup[0] != field[0]){
+
+ methods._validateField(firstOfGroup, options, skipAjaxValidation);
+ options.showArrow = true;
+
+ }
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._groupRequired);
+ if(errorMsg) required = true;
+ options.showArrow = false;
+ break;
+ case "ajax":
+ // AJAX defaults to returning it's loading message
+ errorMsg = methods._ajax(field, rules, i, options);
+ if (errorMsg) {
+ promptType = "load";
+ }
+ break;
+ case "minSize":
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._minSize);
+ break;
+ case "maxSize":
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._maxSize);
+ break;
+ case "min":
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._min);
+ break;
+ case "max":
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._max);
+ break;
+ case "past":
+ errorMsg = methods._getErrorMessage(form, field,rules[i], rules, i, options, methods._past);
+ break;
+ case "future":
+ errorMsg = methods._getErrorMessage(form, field,rules[i], rules, i, options, methods._future);
+ break;
+ case "dateRange":
+ var classGroup = "["+options.validateAttribute+"*=" + rules[i + 1] + "]";
+ options.firstOfGroup = form.find(classGroup).eq(0);
+ options.secondOfGroup = form.find(classGroup).eq(1);
+
+ //if one entry out of the pair has value then proceed to run through validation
+ if (options.firstOfGroup[0].value || options.secondOfGroup[0].value) {
+ errorMsg = methods._getErrorMessage(form, field,rules[i], rules, i, options, methods._dateRange);
+ }
+ if (errorMsg) required = true;
+ options.showArrow = false;
+ break;
+
+ case "dateTimeRange":
+ var classGroup = "["+options.validateAttribute+"*=" + rules[i + 1] + "]";
+ options.firstOfGroup = form.find(classGroup).eq(0);
+ options.secondOfGroup = form.find(classGroup).eq(1);
+
+ //if one entry out of the pair has value then proceed to run through validation
+ if (options.firstOfGroup[0].value || options.secondOfGroup[0].value) {
+ errorMsg = methods._getErrorMessage(form, field,rules[i], rules, i, options, methods._dateTimeRange);
+ }
+ if (errorMsg) required = true;
+ options.showArrow = false;
+ break;
+ case "maxCheckbox":
+ field = $(form.find("input[name='" + fieldName + "']"));
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._maxCheckbox);
+ break;
+ case "minCheckbox":
+ field = $(form.find("input[name='" + fieldName + "']"));
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._minCheckbox);
+ break;
+ case "equals":
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._equals);
+ break;
+ case "funcCall":
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._funcCall);
+ break;
+ case "creditCard":
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._creditCard);
+ break;
+ case "condRequired":
+ errorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._condRequired);
+ if (errorMsg !== undefined) {
+ required = true;
+ }
+ break;
+
+ default:
+ }
+
+ var end_validation = false;
+
+ // If we were passed back an message object, check what the status was to determine what to do
+ if (typeof errorMsg == "object") {
+ switch (errorMsg.status) {
+ case "_break":
+ end_validation = true;
+ break;
+ // If we have an error message, set errorMsg to the error message
+ case "_error":
+ errorMsg = errorMsg.message;
+ break;
+ // If we want to throw an error, but not show a prompt, return early with true
+ case "_error_no_prompt":
+ return true;
+ break;
+ // Anything else we continue on
+ default:
+ break;
+ }
+ }
+
+ // If it has been specified that validation should end now, break
+ if (end_validation) {
+ break;
+ }
+
+ // If we have a string, that means that we have an error, so add it to the error message.
+ if (typeof errorMsg == 'string') {
+ promptText += errorMsg + " ";
+ options.isError = true;
+ field_errors++;
+ }
+ }
+ // If the rules required is not added, an empty field is not validated
+ if(!required && !(field.val()) && field.val().length < 1) options.isError = false;
+
+ // Hack for radio/checkbox group button, the validation go into the
+ // first radio/checkbox of the group
+ var fieldType = field.prop("type");
+ var positionType=field.data("promptPosition") || options.promptPosition;
+
+ if ((fieldType == "radio" || fieldType == "checkbox") && form.find("input[name='" + fieldName + "']").size() > 1) {
+ if(positionType === 'inline') {
+ field = $(form.find("input[name='" + fieldName + "'][type!=hidden]:last"));
+ } else {
+ field = $(form.find("input[name='" + fieldName + "'][type!=hidden]:first"));
+ }
+ options.showArrow = false;
+ }
+
+ if(field.is(":hidden") && options.prettySelect) {
+ field = form.find("#" + options.usePrefix + methods._jqSelector(field.attr('id')) + options.useSuffix);
+ }
+
+ if (options.isError && options.showPrompts){
+ methods._showPrompt(field, promptText, promptType, false, options);
+ }else{
+ if (!isAjaxValidator) methods._closePrompt(field);
+ }
+
+ if (!isAjaxValidator) {
+ field.trigger("jqv.field.result", [field, options.isError, promptText]);
+ }
+
+ /* Record error */
+ var errindex = $.inArray(field[0], options.InvalidFields);
+ if (errindex == -1) {
+ if (options.isError)
+ options.InvalidFields.push(field[0]);
+ } else if (!options.isError) {
+ options.InvalidFields.splice(errindex, 1);
+ }
+
+ methods._handleStatusCssClasses(field, options);
+
+ /* run callback function for each field */
+ if (options.isError && options.onFieldFailure)
+ options.onFieldFailure(field);
+
+ if (!options.isError && options.onFieldSuccess)
+ options.onFieldSuccess(field);
+
+ return options.isError;
+ },
+ /**
+ * Handling css classes of fields indicating result of validation
+ *
+ * @param {jqObject}
+ * field
+ * @param {Array[String]}
+ * field's validation rules
+ * @private
+ */
+ _handleStatusCssClasses: function(field, options) {
+ /* remove all classes */
+ if(options.addSuccessCssClassToField)
+ field.removeClass(options.addSuccessCssClassToField);
+
+ if(options.addFailureCssClassToField)
+ field.removeClass(options.addFailureCssClassToField);
+
+ /* Add classes */
+ if (options.addSuccessCssClassToField && !options.isError)
+ field.addClass(options.addSuccessCssClassToField);
+
+ if (options.addFailureCssClassToField && options.isError)
+ field.addClass(options.addFailureCssClassToField);
+ },
+
+ /********************
+ * _getErrorMessage
+ *
+ * @param form
+ * @param field
+ * @param rule
+ * @param rules
+ * @param i
+ * @param options
+ * @param originalValidationMethod
+ * @return {*}
+ * @private
+ */
+ _getErrorMessage:function (form, field, rule, rules, i, options, originalValidationMethod) {
+ // If we are using the custon validation type, build the index for the rule.
+ // Otherwise if we are doing a function call, make the call and return the object
+ // that is passed back.
+ var rule_index = jQuery.inArray(rule, rules);
+ if (rule === "custom" || rule === "funcCall") {
+ var custom_validation_type = rules[rule_index + 1];
+ rule = rule + "[" + custom_validation_type + "]";
+ // Delete the rule from the rules array so that it doesn't try to call the
+ // same rule over again
+ delete(rules[rule_index]);
+ }
+ // Change the rule to the composite rule, if it was different from the original
+ var alteredRule = rule;
+
+
+ var element_classes = (field.attr("data-validation-engine")) ? field.attr("data-validation-engine") : field.attr("class");
+ var element_classes_array = element_classes.split(" ");
+
+ // Call the original validation method. If we are dealing with dates or checkboxes, also pass the form
+ var errorMsg;
+ if (rule == "future" || rule == "past" || rule == "maxCheckbox" || rule == "minCheckbox") {
+ errorMsg = originalValidationMethod(form, field, rules, i, options);
+ } else {
+ errorMsg = originalValidationMethod(field, rules, i, options);
+ }
+
+ // If the original validation method returned an error and we have a custom error message,
+ // return the custom message instead. Otherwise return the original error message.
+ if (errorMsg != undefined) {
+ var custom_message = methods._getCustomErrorMessage($(field), element_classes_array, alteredRule, options);
+ if (custom_message) errorMsg = custom_message;
+ }
+ return errorMsg;
+
+ },
+ _getCustomErrorMessage:function (field, classes, rule, options) {
+ var custom_message = false;
+ var validityProp = /^custom\[.*\]$/.test(rule) ? methods._validityProp["custom"] : methods._validityProp[rule];
+ // If there is a validityProp for this rule, check to see if the field has an attribute for it
+ if (validityProp != undefined) {
+ custom_message = field.attr("data-errormessage-"+validityProp);
+ // If there was an error message for it, return the message
+ if (custom_message != undefined)
+ return custom_message;
+ }
+ custom_message = field.attr("data-errormessage");
+ // If there is an inline custom error message, return it
+ if (custom_message != undefined)
+ return custom_message;
+ var id = '#' + field.attr("id");
+ // If we have custom messages for the element's id, get the message for the rule from the id.
+ // Otherwise, if we have custom messages for the element's classes, use the first class message we find instead.
+ if (typeof options.custom_error_messages[id] != "undefined" &&
+ typeof options.custom_error_messages[id][rule] != "undefined" ) {
+ custom_message = options.custom_error_messages[id][rule]['message'];
+ } else if (classes.length > 0) {
+ for (var i = 0; i < classes.length && classes.length > 0; i++) {
+ var element_class = "." + classes[i];
+ if (typeof options.custom_error_messages[element_class] != "undefined" &&
+ typeof options.custom_error_messages[element_class][rule] != "undefined") {
+ custom_message = options.custom_error_messages[element_class][rule]['message'];
+ break;
+ }
+ }
+ }
+ if (!custom_message &&
+ typeof options.custom_error_messages[rule] != "undefined" &&
+ typeof options.custom_error_messages[rule]['message'] != "undefined"){
+ custom_message = options.custom_error_messages[rule]['message'];
+ }
+ return custom_message;
+ },
+ _validityProp: {
+ "required": "value-missing",
+ "custom": "custom-error",
+ "groupRequired": "value-missing",
+ "ajax": "custom-error",
+ "minSize": "range-underflow",
+ "maxSize": "range-overflow",
+ "min": "range-underflow",
+ "max": "range-overflow",
+ "past": "type-mismatch",
+ "future": "type-mismatch",
+ "dateRange": "type-mismatch",
+ "dateTimeRange": "type-mismatch",
+ "maxCheckbox": "range-overflow",
+ "minCheckbox": "range-underflow",
+ "equals": "pattern-mismatch",
+ "funcCall": "custom-error",
+ "creditCard": "pattern-mismatch",
+ "condRequired": "value-missing"
+ },
+ /**
+ * Required validation
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @param {bool} condRequired flag when method is used for internal purpose in condRequired check
+ * @return an error string if validation failed
+ */
+ _required: function(field, rules, i, options, condRequired) {
+ switch (field.prop("type")) {
+ case "text":
+ case "password":
+ case "textarea":
+ case "file":
+ case "select-one":
+ case "select-multiple":
+ default:
+ var field_val = $.trim( field.val() );
+ var dv_placeholder = $.trim( field.attr("data-validation-placeholder") );
+ var placeholder = $.trim( field.attr("placeholder") );
+ if (
+ ( !field_val )
+ || ( dv_placeholder && field_val == dv_placeholder )
+ || ( placeholder && field_val == placeholder )
+ ) {
+ return options.allrules[rules[i]].alertText;
+ }
+ break;
+ case "radio":
+ case "checkbox":
+ // new validation style to only check dependent field
+ if (condRequired) {
+ if (!field.attr('checked')) {
+ return options.allrules[rules[i]].alertTextCheckboxMultiple;
+ }
+ break;
+ }
+ // old validation style
+ var form = field.closest("form, .validationEngineContainer");
+ var name = field.attr("name");
+ if (form.find("input[name='" + name + "']:checked").size() == 0) {
+ if (form.find("input[name='" + name + "']:visible").size() == 1)
+ return options.allrules[rules[i]].alertTextCheckboxe;
+ else
+ return options.allrules[rules[i]].alertTextCheckboxMultiple;
+ }
+ break;
+ }
+ },
+ /**
+ * Validate that 1 from the group field is required
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _groupRequired: function(field, rules, i, options) {
+ var classGroup = "["+options.validateAttribute+"*=" +rules[i + 1] +"]";
+ var isValid = false;
+ // Check all fields from the group
+ field.closest("form, .validationEngineContainer").find(classGroup).each(function(){
+ if(!methods._required($(this), rules, i, options)){
+ isValid = true;
+ return false;
+ }
+ });
+
+ if(!isValid) {
+ return options.allrules[rules[i]].alertText;
+ }
+ },
+ /**
+ * Validate rules
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _custom: function(field, rules, i, options) {
+ var customRule = rules[i + 1];
+ var rule = options.allrules[customRule];
+ var fn;
+ if(!rule) {
+ alert("jqv:custom rule not found - "+customRule);
+ return;
+ }
+
+ if(rule["regex"]) {
+ var ex=rule.regex;
+ if(!ex) {
+ alert("jqv:custom regex not found - "+customRule);
+ return;
+ }
+ var pattern = new RegExp(ex);
+
+ if (!pattern.test(field.val())) return options.allrules[customRule].alertText;
+
+ } else if(rule["func"]) {
+ fn = rule["func"];
+
+ if (typeof(fn) !== "function") {
+ alert("jqv:custom parameter 'function' is no function - "+customRule);
+ return;
+ }
+
+ if (!fn(field, rules, i, options))
+ return options.allrules[customRule].alertText;
+ } else {
+ alert("jqv:custom type not allowed "+customRule);
+ return;
+ }
+ },
+ /**
+ * Validate custom function outside of the engine scope
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _funcCall: function(field, rules, i, options) {
+ var functionName = rules[i + 1];
+ var fn;
+ if(functionName.indexOf('.') >-1)
+ {
+ var namespaces = functionName.split('.');
+ var scope = window;
+ while(namespaces.length)
+ {
+ scope = scope[namespaces.shift()];
+ }
+ fn = scope;
+ }
+ else
+ fn = window[functionName] || options.customFunctions[functionName];
+ if (typeof(fn) == 'function')
+ return fn(field, rules, i, options);
+
+ },
+ /**
+ * Field match
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _equals: function(field, rules, i, options) {
+ var equalsField = rules[i + 1];
+
+ if (field.val() != $("#" + equalsField).val())
+ return options.allrules.equals.alertText;
+ },
+ /**
+ * Check the maximum size (in characters)
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _maxSize: function(field, rules, i, options) {
+ var max = rules[i + 1];
+ var len = field.val().length;
+
+ if (len > max) {
+ var rule = options.allrules.maxSize;
+ return rule.alertText + max + rule.alertText2;
+ }
+ },
+ /**
+ * Check the minimum size (in characters)
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _minSize: function(field, rules, i, options) {
+ var min = rules[i + 1];
+ var len = field.val().length;
+
+ if (len < min) {
+ var rule = options.allrules.minSize;
+ return rule.alertText + min + rule.alertText2;
+ }
+ },
+ /**
+ * Check number minimum value
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _min: function(field, rules, i, options) {
+ var min = parseFloat(rules[i + 1]);
+ var len = parseFloat(field.val());
+
+ if (len < min) {
+ var rule = options.allrules.min;
+ if (rule.alertText2) return rule.alertText + min + rule.alertText2;
+ return rule.alertText + min;
+ }
+ },
+ /**
+ * Check number maximum value
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _max: function(field, rules, i, options) {
+ var max = parseFloat(rules[i + 1]);
+ var len = parseFloat(field.val());
+
+ if (len >max ) {
+ var rule = options.allrules.max;
+ if (rule.alertText2) return rule.alertText + max + rule.alertText2;
+ //orefalo: to review, also do the translations
+ return rule.alertText + max;
+ }
+ },
+ /**
+ * Checks date is in the past
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _past: function(form, field, rules, i, options) {
+
+ var p=rules[i + 1];
+ var fieldAlt = $(form.find("input[name='" + p.replace(/^#+/, '') + "']"));
+ var pdate;
+
+ if (p.toLowerCase() == "now") {
+ pdate = new Date();
+ } else if (undefined != fieldAlt.val()) {
+ if (fieldAlt.is(":disabled"))
+ return;
+ pdate = methods._parseDate(fieldAlt.val());
+ } else {
+ pdate = methods._parseDate(p);
+ }
+ var vdate = methods._parseDate(field.val());
+
+ if (vdate > pdate ) {
+ var rule = options.allrules.past;
+ if (rule.alertText2) return rule.alertText + methods._dateToString(pdate) + rule.alertText2;
+ return rule.alertText + methods._dateToString(pdate);
+ }
+ },
+ /**
+ * Checks date is in the future
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _future: function(form, field, rules, i, options) {
+
+ var p=rules[i + 1];
+ var fieldAlt = $(form.find("input[name='" + p.replace(/^#+/, '') + "']"));
+ var pdate;
+
+ if (p.toLowerCase() == "now") {
+ pdate = new Date();
+ } else if (undefined != fieldAlt.val()) {
+ if (fieldAlt.is(":disabled"))
+ return;
+ pdate = methods._parseDate(fieldAlt.val());
+ } else {
+ pdate = methods._parseDate(p);
+ }
+ var vdate = methods._parseDate(field.val());
+
+ if (vdate < pdate ) {
+ var rule = options.allrules.future;
+ if (rule.alertText2)
+ return rule.alertText + methods._dateToString(pdate) + rule.alertText2;
+ return rule.alertText + methods._dateToString(pdate);
+ }
+ },
+ /**
+ * Checks if valid date
+ *
+ * @param {string} date string
+ * @return a bool based on determination of valid date
+ */
+ _isDate: function (value) {
+ var dateRegEx = new RegExp(/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/);
+ return dateRegEx.test(value);
+ },
+ /**
+ * Checks if valid date time
+ *
+ * @param {string} date string
+ * @return a bool based on determination of valid date time
+ */
+ _isDateTime: function (value){
+ var dateTimeRegEx = new RegExp(/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/);
+ return dateTimeRegEx.test(value);
+ },
+ //Checks if the start date is before the end date
+ //returns true if end is later than start
+ _dateCompare: function (start, end) {
+ return (new Date(start.toString()) < new Date(end.toString()));
+ },
+ /**
+ * Checks date range
+ *
+ * @param {jqObject} first field name
+ * @param {jqObject} second field name
+ * @return an error string if validation failed
+ */
+ _dateRange: function (field, rules, i, options) {
+ //are not both populated
+ if ((!options.firstOfGroup[0].value && options.secondOfGroup[0].value) || (options.firstOfGroup[0].value && !options.secondOfGroup[0].value)) {
+ return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
+ }
+
+ //are not both dates
+ if (!methods._isDate(options.firstOfGroup[0].value) || !methods._isDate(options.secondOfGroup[0].value)) {
+ return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
+ }
+
+ //are both dates but range is off
+ if (!methods._dateCompare(options.firstOfGroup[0].value, options.secondOfGroup[0].value)) {
+ return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
+ }
+ },
+ /**
+ * Checks date time range
+ *
+ * @param {jqObject} first field name
+ * @param {jqObject} second field name
+ * @return an error string if validation failed
+ */
+ _dateTimeRange: function (field, rules, i, options) {
+ //are not both populated
+ if ((!options.firstOfGroup[0].value && options.secondOfGroup[0].value) || (options.firstOfGroup[0].value && !options.secondOfGroup[0].value)) {
+ return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
+ }
+ //are not both dates
+ if (!methods._isDateTime(options.firstOfGroup[0].value) || !methods._isDateTime(options.secondOfGroup[0].value)) {
+ return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
+ }
+ //are both dates but range is off
+ if (!methods._dateCompare(options.firstOfGroup[0].value, options.secondOfGroup[0].value)) {
+ return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
+ }
+ },
+ /**
+ * Max number of checkbox selected
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _maxCheckbox: function(form, field, rules, i, options) {
+
+ var nbCheck = rules[i + 1];
+ var groupname = field.attr("name");
+ var groupSize = form.find("input[name='" + groupname + "']:checked").size();
+ if (groupSize > nbCheck) {
+ options.showArrow = false;
+ if (options.allrules.maxCheckbox.alertText2)
+ return options.allrules.maxCheckbox.alertText + " " + nbCheck + " " + options.allrules.maxCheckbox.alertText2;
+ return options.allrules.maxCheckbox.alertText;
+ }
+ },
+ /**
+ * Min number of checkbox selected
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _minCheckbox: function(form, field, rules, i, options) {
+
+ var nbCheck = rules[i + 1];
+ var groupname = field.attr("name");
+ var groupSize = form.find("input[name='" + groupname + "']:checked").size();
+ if (groupSize < nbCheck) {
+ options.showArrow = false;
+ return options.allrules.minCheckbox.alertText + " " + nbCheck + " " + options.allrules.minCheckbox.alertText2;
+ }
+ },
+ /**
+ * Checks that it is a valid credit card number according to the
+ * Luhn checksum algorithm.
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _creditCard: function(field, rules, i, options) {
+ //spaces and dashes may be valid characters, but must be stripped to calculate the checksum.
+ var valid = false, cardNumber = field.val().replace(/ +/g, '').replace(/-+/g, '');
+
+ var numDigits = cardNumber.length;
+ if (numDigits >= 14 && numDigits <= 16 && parseInt(cardNumber) > 0) {
+
+ var sum = 0, i = numDigits - 1, pos = 1, digit, luhn = new String();
+ do {
+ digit = parseInt(cardNumber.charAt(i));
+ luhn += (pos++ % 2 == 0) ? digit * 2 : digit;
+ } while (--i >= 0)
+
+ for (i = 0; i < luhn.length; i++) {
+ sum += parseInt(luhn.charAt(i));
+ }
+ valid = sum % 10 == 0;
+ }
+ if (!valid) return options.allrules.creditCard.alertText;
+ },
+ /**
+ * Ajax field validation
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return nothing! the ajax validator handles the prompts itself
+ */
+ _ajax: function(field, rules, i, options) {
+
+ var errorSelector = rules[i + 1];
+ var rule = options.allrules[errorSelector];
+ var extraData = rule.extraData;
+ var extraDataDynamic = rule.extraDataDynamic;
+ var data = {
+ "fieldId" : field.attr("id"),
+ "fieldValue" : field.val()
+ };
+
+ if (typeof extraData === "object") {
+ $.extend(data, extraData);
+ } else if (typeof extraData === "string") {
+ var tempData = extraData.split("&");
+ for(var i = 0; i < tempData.length; i++) {
+ var values = tempData[i].split("=");
+ if (values[0] && values[0]) {
+ data[values[0]] = values[1];
+ }
+ }
+ }
+
+ if (extraDataDynamic) {
+ var tmpData = [];
+ var domIds = String(extraDataDynamic).split(",");
+ for (var i = 0; i < domIds.length; i++) {
+ var id = domIds[i];
+ if ($(id).length) {
+ var inputValue = field.closest("form, .validationEngineContainer").find(id).val();
+ var keyValue = id.replace('#', '') + '=' + escape(inputValue);
+ data[id.replace('#', '')] = inputValue;
+ }
+ }
+ }
+
+ // If a field change event triggered this we want to clear the cache for this ID
+ if (options.eventTrigger == "field") {
+ delete(options.ajaxValidCache[field.attr("id")]);
+ }
+
+ // If there is an error or if the the field is already validated, do not re-execute AJAX
+ if (!options.isError && !methods._checkAjaxFieldStatus(field.attr("id"), options)) {
+ $.ajax({
+ type: options.ajaxFormValidationMethod,
+ url: rule.url,
+ cache: false,
+ dataType: "json",
+ data: data,
+ field: field,
+ rule: rule,
+ methods: methods,
+ options: options,
+ beforeSend: function() {},
+ error: function(data, transport) {
+ methods._ajaxError(data, transport);
+ },
+ success: function(json) {
+
+ // asynchronously called on success, data is the json answer from the server
+ var errorFieldId = json[0];
+ //var errorField = $($("#" + errorFieldId)[0]);
+ var errorField = $("#"+ errorFieldId).eq(0);
+
+ // make sure we found the element
+ if (errorField.length == 1) {
+ var status = json[1];
+ // read the optional msg from the server
+ var msg = json[2];
+ if (!status) {
+ // Houston we got a problem - display an red prompt
+ options.ajaxValidCache[errorFieldId] = false;
+ options.isError = true;
+
+ // resolve the msg prompt
+ if(msg) {
+ if (options.allrules[msg]) {
+ var txt = options.allrules[msg].alertText;
+ if (txt) {
+ msg = txt;
+ }
+ }
+ }
+ else
+ msg = rule.alertText;
+
+ if (options.showPrompts) methods._showPrompt(errorField, msg, "", true, options);
+ } else {
+ options.ajaxValidCache[errorFieldId] = true;
+
+ // resolves the msg prompt
+ if(msg) {
+ if (options.allrules[msg]) {
+ var txt = options.allrules[msg].alertTextOk;
+ if (txt) {
+ msg = txt;
+ }
+ }
+ }
+ else
+ msg = rule.alertTextOk;
+
+ if (options.showPrompts) {
+ // see if we should display a green prompt
+ if (msg)
+ methods._showPrompt(errorField, msg, "pass", true, options);
+ else
+ methods._closePrompt(errorField);
+ }
+
+ // If a submit form triggered this, we want to re-submit the form
+ if (options.eventTrigger == "submit")
+ field.closest("form").submit();
+ }
+ }
+ errorField.trigger("jqv.field.result", [errorField, options.isError, msg]);
+ }
+ });
+
+ return rule.alertTextLoad;
+ }
+ },
+ /**
+ * Common method to handle ajax errors
+ *
+ * @param {Object} data
+ * @param {Object} transport
+ */
+ _ajaxError: function(data, transport) {
+ if(data.status == 0 && transport == null)
+ alert("The page is not served from a server! ajax call failed");
+ else if(typeof console != "undefined")
+ console.log("Ajax error: " + data.status + " " + transport);
+ },
+ /**
+ * date -> string
+ *
+ * @param {Object} date
+ */
+ _dateToString: function(date) {
+ return date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();
+ },
+ /**
+ * Parses an ISO date
+ * @param {String} d
+ */
+ _parseDate: function(d) {
+
+ var dateParts = d.split("-");
+ if(dateParts==d)
+ dateParts = d.split("/");
+ if(dateParts==d) {
+ dateParts = d.split(".");
+ return new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
+ }
+ return new Date(dateParts[0], (dateParts[1] - 1) ,dateParts[2]);
+ },
+ /**
+ * Builds or updates a prompt with the given information
+ *
+ * @param {jqObject} field
+ * @param {String} promptText html text to display type
+ * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
+ * @param {boolean} ajaxed - use to mark fields than being validated with ajax
+ * @param {Map} options user options
+ */
+ _showPrompt: function(field, promptText, type, ajaxed, options, ajaxform) {
+ var prompt = methods._getPrompt(field);
+ // The ajax submit errors are not see has an error in the form,
+ // When the form errors are returned, the engine see 2 bubbles, but those are ebing closed by the engine at the same time
+ // Because no error was found befor submitting
+ if(ajaxform) prompt = false;
+ // Check that there is indded text
+ if($.trim(promptText)){
+ if (prompt)
+ methods._updatePrompt(field, prompt, promptText, type, ajaxed, options);
+ else
+ methods._buildPrompt(field, promptText, type, ajaxed, options);
+ }
+ },
+ /**
+ * Builds and shades a prompt for the given field.
+ *
+ * @param {jqObject} field
+ * @param {String} promptText html text to display type
+ * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
+ * @param {boolean} ajaxed - use to mark fields than being validated with ajax
+ * @param {Map} options user options
+ */
+ _buildPrompt: function(field, promptText, type, ajaxed, options) {
+
+ // create the prompt
+ var prompt = $('');
+ prompt.addClass(methods._getClassName(field.attr("id")) + "formError");
+ // add a class name to identify the parent form of the prompt
+ prompt.addClass("parentForm"+methods._getClassName(field.closest('form, .validationEngineContainer').attr("id")));
+ prompt.addClass("formError");
+
+ switch (type) {
+ case "pass":
+ prompt.addClass("greenPopup");
+ break;
+ case "load":
+ prompt.addClass("blackPopup");
+ break;
+ default:
+ /* it has error */
+ //alert("unknown popup type:"+type);
+ }
+ if (ajaxed)
+ prompt.addClass("ajaxed");
+
+ // create the prompt content
+ var promptContent = $('
').addClass("formErrorContent").html(promptText).appendTo(prompt);
+
+ // determine position type
+ var positionType=field.data("promptPosition") || options.promptPosition;
+
+ // create the css arrow pointing at the field
+ // note that there is no triangle on max-checkbox and radio
+ if (options.showArrow) {
+ var arrow = $('
').addClass("formErrorArrow");
+
+ //prompt positioning adjustment support. Usage: positionType:Xshift,Yshift (for ex.: bottomLeft:+20 or bottomLeft:-20,+10)
+ if (typeof(positionType)=='string')
+ {
+ var pos=positionType.indexOf(":");
+ if(pos!=-1)
+ positionType=positionType.substring(0,pos);
+ }
+
+ switch (positionType) {
+ case "bottomLeft":
+ case "bottomRight":
+ prompt.find(".formErrorContent").before(arrow);
+ arrow.addClass("formErrorArrowBottom").html('
');
+ break;
+ case "topLeft":
+ case "topRight":
+ arrow.html('
');
+ prompt.append(arrow);
+ break;
+ }
+ }
+ // Add custom prompt class
+ if (options.addPromptClass)
+ prompt.addClass(options.addPromptClass);
+
+ // Add custom prompt class defined in element
+ var requiredOverride = field.attr('data-required-class');
+ if(requiredOverride !== undefined) {
+ prompt.addClass(requiredOverride);
+ } else {
+ if(options.prettySelect) {
+ if($('#' + field.attr('id')).next().is('select')) {
+ var prettyOverrideClass = $('#' + field.attr('id').substr(options.usePrefix.length).substring(options.useSuffix.length)).attr('data-required-class');
+ if(prettyOverrideClass !== undefined) {
+ prompt.addClass(prettyOverrideClass);
+ }
+ }
+ }
+ }
+
+ prompt.css({
+ "opacity": 0
+ });
+ if(positionType === 'inline') {
+ prompt.addClass("inline");
+ if(typeof field.attr('data-prompt-target') !== 'undefined' && $('#'+field.attr('data-prompt-target')).length > 0) {
+ prompt.appendTo($('#'+field.attr('data-prompt-target')));
+ } else {
+ field.after(prompt);
+ }
+ } else {
+ field.before(prompt);
+ }
+
+ var pos = methods._calculatePosition(field, prompt, options);
+ prompt.css({
+ 'position': positionType === 'inline' ? 'relative' : 'absolute',
+ "top": pos.callerTopPosition,
+ "left": pos.callerleftPosition,
+ "marginTop": pos.marginTopSize,
+ "opacity": 0
+ }).data("callerField", field);
+
+
+ if (options.autoHidePrompt) {
+ setTimeout(function(){
+ prompt.animate({
+ "opacity": 0
+ },function(){
+ prompt.closest('.formErrorOuter').remove();
+ prompt.remove();
+ });
+ }, options.autoHideDelay);
+ }
+ return prompt.animate({
+ "opacity": 0.87
+ });
+ },
+ /**
+ * Updates the prompt text field - the field for which the prompt
+ * @param {jqObject} field
+ * @param {String} promptText html text to display type
+ * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
+ * @param {boolean} ajaxed - use to mark fields than being validated with ajax
+ * @param {Map} options user options
+ */
+ _updatePrompt: function(field, prompt, promptText, type, ajaxed, options, noAnimation) {
+
+ if (prompt) {
+ if (typeof type !== "undefined") {
+ if (type == "pass")
+ prompt.addClass("greenPopup");
+ else
+ prompt.removeClass("greenPopup");
+
+ if (type == "load")
+ prompt.addClass("blackPopup");
+ else
+ prompt.removeClass("blackPopup");
+ }
+ if (ajaxed)
+ prompt.addClass("ajaxed");
+ else
+ prompt.removeClass("ajaxed");
+
+ prompt.find(".formErrorContent").html(promptText);
+
+ var pos = methods._calculatePosition(field, prompt, options);
+ var css = {"top": pos.callerTopPosition,
+ "left": pos.callerleftPosition,
+ "marginTop": pos.marginTopSize};
+
+ if (noAnimation)
+ prompt.css(css);
+ else
+ prompt.animate(css);
+ }
+ },
+ /**
+ * Closes the prompt associated with the given field
+ *
+ * @param {jqObject}
+ * field
+ */
+ _closePrompt: function(field) {
+ var prompt = methods._getPrompt(field);
+ if (prompt)
+ prompt.fadeTo("fast", 0, function() {
+ prompt.parent('.formErrorOuter').remove();
+ prompt.remove();
+ });
+ },
+ closePrompt: function(field) {
+ return methods._closePrompt(field);
+ },
+ /**
+ * Returns the error prompt matching the field if any
+ *
+ * @param {jqObject}
+ * field
+ * @return undefined or the error prompt (jqObject)
+ */
+ _getPrompt: function(field) {
+ var formId = $(field).closest('form, .validationEngineContainer').attr('id');
+ var className = methods._getClassName(field.attr("id")) + "formError";
+ var match = $("." + methods._escapeExpression(className) + '.parentForm' + formId)[0];
+ if (match)
+ return $(match);
+ },
+ /**
+ * Returns the escapade classname
+ *
+ * @param {selector}
+ * className
+ */
+ _escapeExpression: function (selector) {
+ return selector.replace(/([#;&,\.\+\*\~':"\!\^$\[\]\(\)=>\|])/g, "\\$1");
+ },
+ /**
+ * returns true if we are in a RTLed document
+ *
+ * @param {jqObject} field
+ */
+ isRTL: function(field)
+ {
+ var $document = $(document);
+ var $body = $('body');
+ var rtl =
+ (field && field.hasClass('rtl')) ||
+ (field && (field.attr('dir') || '').toLowerCase()==='rtl') ||
+ $document.hasClass('rtl') ||
+ ($document.attr('dir') || '').toLowerCase()==='rtl' ||
+ $body.hasClass('rtl') ||
+ ($body.attr('dir') || '').toLowerCase()==='rtl';
+ return Boolean(rtl);
+ },
+ /**
+ * Calculates prompt position
+ *
+ * @param {jqObject}
+ * field
+ * @param {jqObject}
+ * the prompt
+ * @param {Map}
+ * options
+ * @return positions
+ */
+ _calculatePosition: function (field, promptElmt, options) {
+
+ var promptTopPosition, promptleftPosition, marginTopSize;
+ var fieldWidth = field.width();
+ var fieldLeft = field.position().left;
+ var fieldTop = field.position().top;
+ var fieldHeight = field.height();
+ var promptHeight = promptElmt.height();
+
+
+ // is the form contained in an overflown container?
+ promptTopPosition = promptleftPosition = 0;
+ // compensation for the arrow
+ marginTopSize = -promptHeight;
+
+
+ //prompt positioning adjustment support
+ //now you can adjust prompt position
+ //usage: positionType:Xshift,Yshift
+ //for example:
+ // bottomLeft:+20 means bottomLeft position shifted by 20 pixels right horizontally
+ // topRight:20, -15 means topRight position shifted by 20 pixels to right and 15 pixels to top
+ //You can use +pixels, - pixels. If no sign is provided than + is default.
+ var positionType=field.data("promptPosition") || options.promptPosition;
+ var shift1="";
+ var shift2="";
+ var shiftX=0;
+ var shiftY=0;
+ if (typeof(positionType)=='string') {
+ //do we have any position adjustments ?
+ if (positionType.indexOf(":")!=-1) {
+ shift1=positionType.substring(positionType.indexOf(":")+1);
+ positionType=positionType.substring(0,positionType.indexOf(":"));
+
+ //if any advanced positioning will be needed (percents or something else) - parser should be added here
+ //for now we use simple parseInt()
+
+ //do we have second parameter?
+ if (shift1.indexOf(",") !=-1) {
+ shift2=shift1.substring(shift1.indexOf(",") +1);
+ shift1=shift1.substring(0,shift1.indexOf(","));
+ shiftY=parseInt(shift2);
+ if (isNaN(shiftY)) shiftY=0;
+ };
+
+ shiftX=parseInt(shift1);
+ if (isNaN(shift1)) shift1=0;
+
+ };
+ };
+
+
+ switch (positionType) {
+ default:
+ case "topRight":
+ promptleftPosition += fieldLeft + fieldWidth - 30;
+ promptTopPosition += fieldTop;
+ break;
+
+ case "topLeft":
+ promptTopPosition += fieldTop;
+ promptleftPosition += fieldLeft;
+ break;
+
+ case "centerRight":
+ promptTopPosition = fieldTop+4;
+ marginTopSize = 0;
+ promptleftPosition= fieldLeft + field.outerWidth(true)+5;
+ break;
+ case "centerLeft":
+ promptleftPosition = fieldLeft - (promptElmt.width() + 2);
+ promptTopPosition = fieldTop+4;
+ marginTopSize = 0;
+
+ break;
+
+ case "bottomLeft":
+ promptTopPosition = fieldTop + field.height() + 5;
+ marginTopSize = 0;
+ promptleftPosition = fieldLeft;
+ break;
+ case "bottomRight":
+ promptleftPosition = fieldLeft + fieldWidth - 30;
+ promptTopPosition = fieldTop + field.height() + 5;
+ marginTopSize = 0;
+ break;
+ case "inline":
+ promptleftPosition = 0;
+ promptTopPosition = 0;
+ marginTopSize = 0;
+ };
+
+
+
+ //apply adjusments if any
+ promptleftPosition += shiftX;
+ promptTopPosition += shiftY;
+
+ return {
+ "callerTopPosition": promptTopPosition + "px",
+ "callerleftPosition": promptleftPosition + "px",
+ "marginTopSize": marginTopSize + "px"
+ };
+ },
+ /**
+ * Saves the user options and variables in the form.data
+ *
+ * @param {jqObject}
+ * form - the form where the user option should be saved
+ * @param {Map}
+ * options - the user options
+ * @return the user options (extended from the defaults)
+ */
+ _saveOptions: function(form, options) {
+
+ // is there a language localisation ?
+ if ($.validationEngineLanguage)
+ var allRules = $.validationEngineLanguage.allRules;
+ else
+ $.error("jQuery.validationEngine rules are not loaded, plz add localization files to the page");
+ // --- Internals DO NOT TOUCH or OVERLOAD ---
+ // validation rules and i18
+ $.validationEngine.defaults.allrules = allRules;
+
+ var userOptions = $.extend(true,{},$.validationEngine.defaults,options);
+
+ form.data('jqv', userOptions);
+ return userOptions;
+ },
+
+ /**
+ * Removes forbidden characters from class name
+ * @param {String} className
+ */
+ _getClassName: function(className) {
+ if(className)
+ return className.replace(/:/g, "_").replace(/\./g, "_");
+ },
+ /**
+ * Escape special character for jQuery selector
+ * http://totaldev.com/content/escaping-characters-get-valid-jquery-id
+ * @param {String} selector
+ */
+ _jqSelector: function(str){
+ return str.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
+ },
+ /**
+ * Conditionally required field
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _condRequired: function(field, rules, i, options) {
+ var idx, dependingField;
+
+ for(idx = (i + 1); idx < rules.length; idx++) {
+ dependingField = jQuery("#" + rules[idx]).first();
+
+ /* Use _required for determining wether dependingField has a value.
+ * There is logic there for handling all field types, and default value; so we won't replicate that here
+ * Indicate this special use by setting the last parameter to true so we only validate the dependingField on chackboxes and radio buttons (#462)
+ */
+ if (dependingField.length && methods._required(dependingField, ["required"], 0, options, true) == undefined) {
+ /* We now know any of the depending fields has a value,
+ * so we can validate this field as per normal required code
+ */
+ return methods._required(field, ["required"], 0, options);
+ }
+ }
+ },
+
+ _submitButtonClick: function(event) {
+ var button = $(this);
+ var form = button.closest('form, .validationEngineContainer');
+ form.data("jqv_submitButton", button.attr("id"));
+ }
+ };
+
+ /**
+ * Plugin entry point.
+ * You may pass an action as a parameter or a list of options.
+ * if none, the init and attach methods are being called.
+ * Remember: if you pass options, the attached method is NOT called automatically
+ *
+ * @param {String}
+ * method (optional) action
+ */
+ $.fn.validationEngine = function(method) {
+
+ var form = $(this);
+ if(!form[0]) return form; // stop here if the form does not exist
+
+ if (typeof(method) == 'string' && method.charAt(0) != '_' && methods[method]) {
+
+ // make sure init is called once
+ if(method != "showPrompt" && method != "hide" && method != "hideAll")
+ methods.init.apply(form);
+
+ return methods[method].apply(form, Array.prototype.slice.call(arguments, 1));
+ } else if (typeof method == 'object' || !method) {
+
+ // default constructor with or without arguments
+ methods.init.apply(form, arguments);
+ return methods.attach.apply(form);
+ } else {
+ $.error('Method ' + method + ' does not exist in jQuery.validationEngine');
+ }
+ };
+
+
+
+ // LEAK GLOBAL OPTIONS
+ $.validationEngine= {fieldIdCounter: 0,defaults:{
+
+ // Name of the event triggering field validation
+ validationEventTrigger: "blur",
+ // Automatically scroll viewport to the first error
+ scroll: true,
+ // Focus on the first input
+ focusFirstField:true,
+ // Show prompts, set to false to disable prompts
+ showPrompts: true,
+ // Should we attempt to validate non-visible input fields contained in the form? (Useful in cases of tabbed containers, e.g. jQuery-UI tabs)
+ validateNonVisibleFields: false,
+ // Opening box position, possible locations are: topLeft,
+ // topRight, bottomLeft, centerRight, bottomRight, inline
+ // inline gets inserted after the validated field or into an element specified in data-prompt-target
+ promptPosition: "topRight",
+ bindMethod:"bind",
+ // internal, automatically set to true when it parse a _ajax rule
+ inlineAjax: false,
+ // if set to true, the form data is sent asynchronously via ajax to the form.action url (get)
+ ajaxFormValidation: false,
+ // The url to send the submit ajax validation (default to action)
+ ajaxFormValidationURL: false,
+ // HTTP method used for ajax validation
+ ajaxFormValidationMethod: 'get',
+ // Ajax form validation callback method: boolean onComplete(form, status, errors, options)
+ // retuns false if the form.submit event needs to be canceled.
+ onAjaxFormComplete: $.noop,
+ // called right before the ajax call, may return false to cancel
+ onBeforeAjaxFormValidation: $.noop,
+ // Stops form from submitting and execute function assiciated with it
+ onValidationComplete: false,
+
+ // Used when you have a form fields too close and the errors messages are on top of other disturbing viewing messages
+ doNotShowAllErrosOnSubmit: false,
+ // Object where you store custom messages to override the default error messages
+ custom_error_messages:{},
+ // true if you want to vind the input fields
+ binded: true,
+ // set to true, when the prompt arrow needs to be displayed
+ showArrow: true,
+ // did one of the validation fail ? kept global to stop further ajax validations
+ isError: false,
+ // Limit how many displayed errors a field can have
+ maxErrorsPerField: false,
+
+ // Caches field validation status, typically only bad status are created.
+ // the array is used during ajax form validation to detect issues early and prevent an expensive submit
+ ajaxValidCache: {},
+ // Auto update prompt position after window resize
+ autoPositionUpdate: false,
+
+ InvalidFields: [],
+ onFieldSuccess: false,
+ onFieldFailure: false,
+ onSuccess: false,
+ onFailure: false,
+ validateAttribute: "class",
+ addSuccessCssClassToField: "",
+ addFailureCssClassToField: "",
+
+ // Auto-hide prompt
+ autoHidePrompt: false,
+ // Delay before auto-hide
+ autoHideDelay: 10000,
+ // Fade out duration while hiding the validations
+ fadeDuration: 0.3,
+ // Use Prettify select library
+ prettySelect: false,
+ // Add css class on prompt
+ addPromptClass : "",
+ // Custom ID uses prefix
+ usePrefix: "",
+ // Custom ID uses suffix
+ useSuffix: "",
+ // Only show one message per error prompt
+ showOneMessage: false
+ }};
+ $(function(){$.validationEngine.defaults.promptPosition = methods.isRTL()?'topLeft':"topRight"});
+})(jQuery);
+
+
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/js/languages/jquery.validationEngine-en.js b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/js/languages/jquery.validationEngine-en.js
new file mode 100644
index 0000000..74268fe
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/js/languages/jquery.validationEngine-en.js
@@ -0,0 +1,192 @@
+(function($){
+ $.fn.validationEngineLanguage = function(){
+ };
+ $.validationEngineLanguage = {
+ newLang: function(){
+ $.validationEngineLanguage.allRules = {
+ "required": { // Add your regex rules here, you can take telephone as an example
+ "regex": "none",
+ "alertText": "* This field is required",
+ "alertTextCheckboxMultiple": "* Please select an option",
+ "alertTextCheckboxe": "* This checkbox is required",
+ "alertTextDateRange": "* Both date range fields are required"
+ },
+ "requiredInFunction": {
+ "func": function(field, rules, i, options){
+ return (field.val() == "test") ? true : false;
+ },
+ "alertText": "* Field must equal test"
+ },
+ "dateRange": {
+ "regex": "none",
+ "alertText": "* Invalid ",
+ "alertText2": "Date Range"
+ },
+ "dateTimeRange": {
+ "regex": "none",
+ "alertText": "* Invalid ",
+ "alertText2": "Date Time Range"
+ },
+ "minSize": {
+ "regex": "none",
+ "alertText": "* Minimum ",
+ "alertText2": " characters required"
+ },
+ "maxSize": {
+ "regex": "none",
+ "alertText": "* Maximum ",
+ "alertText2": " characters allowed"
+ },
+ "groupRequired": {
+ "regex": "none",
+ "alertText": "* You must fill one of the following fields"
+ },
+ "min": {
+ "regex": "none",
+ "alertText": "* Minimum value is "
+ },
+ "max": {
+ "regex": "none",
+ "alertText": "* Maximum value is "
+ },
+ "past": {
+ "regex": "none",
+ "alertText": "* Date prior to "
+ },
+ "future": {
+ "regex": "none",
+ "alertText": "* Date past "
+ },
+ "maxCheckbox": {
+ "regex": "none",
+ "alertText": "* Maximum ",
+ "alertText2": " options allowed"
+ },
+ "minCheckbox": {
+ "regex": "none",
+ "alertText": "* Please select ",
+ "alertText2": " options"
+ },
+ "equals": {
+ "regex": "none",
+ "alertText": "* Fields do not match"
+ },
+ "creditCard": {
+ "regex": "none",
+ "alertText": "* Invalid credit card number"
+ },
+ "phone": {
+ // credit: jquery.h5validate.js / orefalo
+ "regex": /^([\+][0-9]{1,3}[\ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9\ \.\-\/]{3,20})((x|ext|extension)[\ ]?[0-9]{1,4})?$/,
+ "alertText": "* Invalid phone number"
+ },
+ "email": {
+ // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html# e-mail-state-%28type=email%29 )
+ "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
+ "alertText": "* Invalid email address"
+ },
+ "integer": {
+ "regex": /^[\-\+]?\d+$/,
+ "alertText": "* Not a valid integer"
+ },
+ "number": {
+ // Number, including positive, negative, and floating decimal. credit: orefalo
+ "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/,
+ "alertText": "* Invalid floating decimal number"
+ },
+ "date": {
+ // Check if date is valid by leap year
+ "func": function (field) {
+ var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/);
+ var match = pattern.exec(field.val());
+ if (match == null)
+ return false;
+
+ var year = match[1];
+ var month = match[2]*1;
+ var day = match[3]*1;
+ var date = new Date(year, month - 1, day); // because months starts from 0.
+
+ return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day);
+ },
+ "alertText": "* Invalid date, must be in YYYY-MM-DD format"
+ },
+ "ipv4": {
+ "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,
+ "alertText": "* Invalid IP address"
+ },
+ "url": {
+ "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,
+ "alertText": "* Invalid URL"
+ },
+ "onlyNumberSp": {
+ "regex": /^[0-9\ ]+$/,
+ "alertText": "* Numbers only"
+ },
+ "onlyLetterSp": {
+ "regex": /^[a-zA-Z\ \']+$/,
+ "alertText": "* Letters only"
+ },
+ "onlyLetterNumber": {
+ "regex": /^[0-9a-zA-Z]+$/,
+ "alertText": "* No special characters allowed"
+ },
+ // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings
+ "ajaxUserCall": {
+ "url": "ajaxValidateFieldUser",
+ // you may want to pass extra data on the ajax call
+ "extraData": "name=eric",
+ "alertText": "* This user is already taken",
+ "alertTextLoad": "* Validating, please wait"
+ },
+ "ajaxUserCallPhp": {
+ "url": "phpajax/ajaxValidateFieldUser.php",
+ // you may want to pass extra data on the ajax call
+ "extraData": "name=eric",
+ // if you provide an "alertTextOk", it will show as a green prompt when the field validates
+ "alertTextOk": "* This username is available",
+ "alertText": "* This user is already taken",
+ "alertTextLoad": "* Validating, please wait"
+ },
+ "ajaxNameCall": {
+ // remote json service location
+ "url": "ajaxValidateFieldName",
+ // error
+ "alertText": "* This name is already taken",
+ // if you provide an "alertTextOk", it will show as a green prompt when the field validates
+ "alertTextOk": "* This name is available",
+ // speaks by itself
+ "alertTextLoad": "* Validating, please wait"
+ },
+ "ajaxNameCallPhp": {
+ // remote json service location
+ "url": "phpajax/ajaxValidateFieldName.php",
+ // error
+ "alertText": "* This name is already taken",
+ // speaks by itself
+ "alertTextLoad": "* Validating, please wait"
+ },
+ "validate2fields": {
+ "alertText": "* Please input HELLO"
+ },
+ //tls warning:homegrown not fielded
+ "dateFormat":{
+ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/,
+ "alertText": "* Invalid Date"
+ },
+ //tls warning:homegrown not fielded
+ "dateTimeFormat": {
+ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/,
+ "alertText": "* Invalid Date or Date Format",
+ "alertText2": "Expected Format: ",
+ "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM or ",
+ "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM"
+ }
+ };
+
+ }
+ };
+
+ $.validationEngineLanguage.newLang();
+
+})(jQuery);
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/js/languages/jquery.validationEngine-zh_CN.js b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/js/languages/jquery.validationEngine-zh_CN.js
new file mode 100644
index 0000000..a791843
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/js/languages/jquery.validationEngine-zh_CN.js
@@ -0,0 +1,177 @@
+(function($){
+ $.fn.validationEngineLanguage = function(){
+ };
+ $.validationEngineLanguage = {
+ newLang: function(){
+ $.validationEngineLanguage.allRules = {
+ "required": { // Add your regex rules here, you can take telephone as an example
+ "regex": "none",
+ "alertText": "* 此处不可空白",
+ "alertTextCheckboxMultiple": "* 请选择一个项目",
+ "alertTextCheckboxe": "* 您必须钩选此栏",
+ "alertTextDateRange": "* 日期范围不可空白"
+ },
+ "requiredInFunction": {
+ "func": function(field, rules, i, options){
+ return (field.val() == "test") ? true : false;
+ },
+ "alertText": "* Field must equal test"
+ },
+ "dateRange": {
+ "regex": "none",
+ "alertText": "* 无效的 ",
+ "alertText2": " 日期范围"
+ },
+ "dateTimeRange": {
+ "regex": "none",
+ "alertText": "* 无效的 ",
+ "alertText2": " 时间范围"
+ },
+ "minSize": {
+ "regex": "none",
+ "alertText": "* 最少 ",
+ "alertText2": " 个字符"
+ },
+ "maxSize": {
+ "regex": "none",
+ "alertText": "* 最多 ",
+ "alertText2": " 个字符"
+ },
+ "groupRequired": {
+ "regex": "none",
+ "alertText": "* 你必需选填其中一个栏位"
+ },
+ "min": {
+ "regex": "none",
+ "alertText": "* 最小值為 "
+ },
+ "max": {
+ "regex": "none",
+ "alertText": "* 最大值为 "
+ },
+ "past": {
+ "regex": "none",
+ "alertText": "* 日期必需早于 "
+ },
+ "future": {
+ "regex": "none",
+ "alertText": "* 日期必需晚于 "
+ },
+ "maxCheckbox": {
+ "regex": "none",
+ "alertText": "* 最多选取 ",
+ "alertText2": " 个项目"
+ },
+ "minCheckbox": {
+ "regex": "none",
+ "alertText": "* 请选择 ",
+ "alertText2": " 个项目"
+ },
+ "equals": {
+ "regex": "none",
+ "alertText": "* 请输入与上面相同的密码"
+ },
+ "creditCard": {
+ "regex": "none",
+ "alertText": "* 无效的信用卡号码"
+ },
+ "phone": {
+ // credit: jquery.h5validate.js / orefalo
+ "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/,
+ "alertText": "* 无效的电话号码"
+ },
+ "email": {
+ // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/
+ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,
+ "alertText": "* 邮件地址无效"
+ },
+ "integer": {
+ "regex": /^[\-\+]?\d+$/,
+ "alertText": "* 不是有效的整数"
+ },
+ "number": {
+ // Number, including positive, negative, and floating decimal. credit: orefalo
+ "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/,
+ "alertText": "* 无效的数字"
+ },
+ "date": {
+ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/,
+ "alertText": "* 无效的日期,格式必需为 YYYY-MM-DD"
+ },
+ "ipv4": {
+ "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,
+ "alertText": "* 无效的 IP 地址"
+ },
+ "url": {
+ "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,
+ "alertText": "* Invalid URL"
+ },
+ "onlyNumberSp": {
+ "regex": /^[0-9\ ]+$/,
+ "alertText": "* 只能填数字"
+ },
+ "onlyLetterSp": {
+ "regex": /^[a-zA-Z\ \']+$/,
+ "alertText": "* 只接受英文字母大小写"
+ },
+ "onlyLetterNumber": {
+ "regex": /^[0-9a-zA-Z]+$/,
+ "alertText": "* 不接受特殊字符"
+ },
+ // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings
+ "ajaxUserCall": {
+ "url": "ajaxValidateFieldUser",
+ // you may want to pass extra data on the ajax call
+ "extraData": "name=eric",
+ "alertText": "* 此名称已被其他人使用",
+ "alertTextLoad": "* 正在确认名称是否有其他人使用,请稍等。"
+ },
+ "ajaxUserCallPhp": {
+ "url": "phpajax/ajaxValidateFieldUser.php",
+ // you may want to pass extra data on the ajax call
+ "extraData": "name=eric",
+ // if you provide an "alertTextOk", it will show as a green prompt when the field validates
+ "alertTextOk": "* 此帐号名称可以使用",
+ "alertText": "* 此名称已被其他人使用",
+ "alertTextLoad": "* 正在确认帐号名称是否有其他人使用,请稍等。"
+ },
+ "ajaxNameCall": {
+ // remote json service location
+ "url": "ajaxValidateFieldName",
+ // error
+ "alertText": "* 此名称可以使用",
+ // if you provide an "alertTextOk", it will show as a green prompt when the field validates
+ "alertTextOk": "* 此名称已被其他人使用",
+ // speaks by itself
+ "alertTextLoad": "* 正在确认名称是否有其他人使用,请稍等。"
+ },
+ "ajaxNameCallPhp": {
+ // remote json service location
+ "url": "phpajax/ajaxValidateFieldName.php",
+ // error
+ "alertText": "* 此名称已被其他人使用",
+ // speaks by itself
+ "alertTextLoad": "* 正在确认名称是否有其他人使用,请稍等。"
+ },
+ "validate2fields": {
+ "alertText": "* 请输入 HELLO"
+ },
+ //tls warning:homegrown not fielded
+ "dateFormat":{
+ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/,
+ "alertText": "* 无效的日期格式"
+ },
+ //tls warning:homegrown not fielded
+ "dateTimeFormat": {
+ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/,
+ "alertText": "* 无效的日期或时间格式",
+ "alertText2": "可接受的格式: ",
+ "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM 或 ",
+ "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM"
+ }
+ };
+
+ }
+ };
+ $.validationEngineLanguage.newLang();
+})(jQuery);
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/js/languages/jquery.validationEngine-zh_TW.js b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/js/languages/jquery.validationEngine-zh_TW.js
new file mode 100644
index 0000000..4ed6664
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/js/languages/jquery.validationEngine-zh_TW.js
@@ -0,0 +1,177 @@
+(function($){
+ $.fn.validationEngineLanguage = function(){
+ };
+ $.validationEngineLanguage = {
+ newLang: function(){
+ $.validationEngineLanguage.allRules = {
+ "required": { // Add your regex rules here, you can take telephone as an example
+ "regex": "none",
+ "alertText": "* 此欄位不可空白",
+ "alertTextCheckboxMultiple": "* 請選擇一個項目",
+ "alertTextCheckboxe": "* 您必需勾選此欄位",
+ "alertTextDateRange": "* 日期範圍欄位都不可空白"
+ },
+ "requiredInFunction": {
+ "func": function(field, rules, i, options){
+ return (field.val() == "test") ? true : false;
+ },
+ "alertText": "* Field must equal test"
+ },
+ "dateRange": {
+ "regex": "none",
+ "alertText": "* 無效的 ",
+ "alertText2": " 日期範圍"
+ },
+ "dateTimeRange": {
+ "regex": "none",
+ "alertText": "* 無效的 ",
+ "alertText2": " 時間範圍"
+ },
+ "minSize": {
+ "regex": "none",
+ "alertText": "* 最少 ",
+ "alertText2": " 個字元"
+ },
+ "maxSize": {
+ "regex": "none",
+ "alertText": "* 最多 ",
+ "alertText2": " 個字元"
+ },
+ "groupRequired": {
+ "regex": "none",
+ "alertText": "* 你必需選填其中一個欄位"
+ },
+ "min": {
+ "regex": "none",
+ "alertText": "* 最小值為 "
+ },
+ "max": {
+ "regex": "none",
+ "alertText": "* 最大值為 "
+ },
+ "past": {
+ "regex": "none",
+ "alertText": "* 日期必需早於 "
+ },
+ "future": {
+ "regex": "none",
+ "alertText": "* 日期必需晚於 "
+ },
+ "maxCheckbox": {
+ "regex": "none",
+ "alertText": "* 最多選取 ",
+ "alertText2": " 個項目"
+ },
+ "minCheckbox": {
+ "regex": "none",
+ "alertText": "* 請選取 ",
+ "alertText2": " 個項目"
+ },
+ "equals": {
+ "regex": "none",
+ "alertText": "* 欄位內容不相符"
+ },
+ "creditCard": {
+ "regex": "none",
+ "alertText": "* 无效的信用卡号码"
+ },
+ "phone": {
+ // credit: jquery.h5validate.js / orefalo
+ "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/,
+ "alertText": "* 無效的電話號碼"
+ },
+ "email": {
+ // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/
+ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,
+ "alertText": "* Invalid email address"
+ },
+ "integer": {
+ "regex": /^[\-\+]?\d+$/,
+ "alertText": "* 不是有效的整數"
+ },
+ "number": {
+ // Number, including positive, negative, and floating decimal. credit: orefalo
+ "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/,
+ "alertText": "* 無效的數字"
+ },
+ "date": {
+ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/,
+ "alertText": "* 無效的日期,格式必需為 YYYY-MM-DD"
+ },
+ "ipv4": {
+ "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,
+ "alertText": "* 無效的 IP 位址"
+ },
+ "url": {
+ "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,
+ "alertText": "* Invalid URL"
+ },
+ "onlyNumberSp": {
+ "regex": /^[0-9\ ]+$/,
+ "alertText": "* 只能填數字"
+ },
+ "onlyLetterSp": {
+ "regex": /^[a-zA-Z\ \']+$/,
+ "alertText": "* 只接受英文字母大小寫"
+ },
+ "onlyLetterNumber": {
+ "regex": /^[0-9a-zA-Z]+$/,
+ "alertText": "* 不接受特殊字元"
+ },
+ // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings
+ "ajaxUserCall": {
+ "url": "ajaxValidateFieldUser",
+ // you may want to pass extra data on the ajax call
+ "extraData": "name=eric",
+ "alertText": "* 此名稱已經被其他人使用",
+ "alertTextLoad": "* 正在確認名稱是否有其他人使用,請稍等。"
+ },
+ "ajaxUserCallPhp": {
+ "url": "phpajax/ajaxValidateFieldUser.php",
+ // you may want to pass extra data on the ajax call
+ "extraData": "name=eric",
+ // if you provide an "alertTextOk", it will show as a green prompt when the field validates
+ "alertTextOk": "* 此帳號名稱可以使用",
+ "alertText": "* 此帳號名稱已經被其他人使用",
+ "alertTextLoad": "* 正在確認帳號名稱是否有其他人使用,請稍等。"
+ },
+ "ajaxNameCall": {
+ // remote json service location
+ "url": "ajaxValidateFieldName",
+ // error
+ "alertText": "* 此名稱可以使用",
+ // if you provide an "alertTextOk", it will show as a green prompt when the field validates
+ "alertTextOk": "* 此名稱已經被其他人使用",
+ // speaks by itself
+ "alertTextLoad": "* 正在確認名稱是否有其他人使用,請稍等。"
+ },
+ "ajaxNameCallPhp": {
+ // remote json service location
+ "url": "phpajax/ajaxValidateFieldName.php",
+ // error
+ "alertText": "* 此名稱已經被其他人使用",
+ // speaks by itself
+ "alertTextLoad": "* 正在確認名稱是否有其他人使用,請稍等。"
+ },
+ "validate2fields": {
+ "alertText": "* 請輸入 HELLO"
+ },
+ //tls warning:homegrown not fielded
+ "dateFormat":{
+ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/,
+ "alertText": "* 無效的日期格式"
+ },
+ //tls warning:homegrown not fielded
+ "dateTimeFormat": {
+ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/,
+ "alertText": "* 無效的日期或時間格式",
+ "alertText2": "可接受的格式: ",
+ "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM 或 ",
+ "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM"
+ }
+ };
+
+ }
+ };
+ $.validationEngineLanguage.newLang();
+})(jQuery);
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/readme b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/readme
new file mode 100644
index 0000000..46217fd
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/form/validationEngine/readme
@@ -0,0 +1,3 @@
+Version: 2.6.4
+Sources: https://github.com/posabsolute/jQuery-Validation-Engine
+Chinese Documention and Examples: http://code.ciaoca.com/jquery/validation_engine
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/checkbox-custom.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/checkbox-custom.html
new file mode 100644
index 0000000..a6809d0
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/checkbox-custom.html
@@ -0,0 +1,75 @@
+
+
+
+
+
Grid With Checkbox
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/checkbox-extend.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/checkbox-extend.html
new file mode 100644
index 0000000..99c0c85
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/checkbox-extend.html
@@ -0,0 +1,50 @@
+
+
+
+
+
Grid With Checkbox
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/dynamic-header.jsp b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/dynamic-header.jsp
new file mode 100644
index 0000000..684b521
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/dynamic-header.jsp
@@ -0,0 +1,38 @@
+<%@ page language="java" pageEncoding="UTF-8" %>
+<%
+ int curPage = Integer.parseInt(request.getParameter("curPage"));
+
+ StringBuilder jsonSb = new StringBuilder();
+ jsonSb.append("{");
+ jsonSb.append("\"success\": true");
+ jsonSb.append(", \"totalRows\": ").append(5);
+ jsonSb.append(", \"curPage\": ").append(curPage);
+ jsonSb.append(", \"data\": ");
+
+ if (curPage == 1) {
+ jsonSb.append("[");
+ jsonSb.append("{\"XH\": 1, \"ID\": 101, \"CHAR\": \"CHAR_1\"}");
+ jsonSb.append(",");
+ jsonSb.append("{\"XH\": 2, \"ID\": 102, \"CHAR\": \"CHAR_2\"}");
+ jsonSb.append("]");
+ jsonSb.append(",");
+ jsonSb.append("\"userdata\": {\"dynamic_columns\": [\"XH\", \"ID\", \"CHAR\"]}");
+ } else if (curPage == 2) {
+ jsonSb.append("[");
+ jsonSb.append("{\"XH\": 3, \"TEXT\": \"TEXT_3\"}");
+ jsonSb.append(",");
+ jsonSb.append("{\"XH\": 4, \"TEXT\": \"TEXT_4\"}");
+ jsonSb.append("]");
+ jsonSb.append(",");
+ jsonSb.append("\"userdata\": {\"dynamic_columns\": [\"XH\", \"TEXT\"]}");
+ } else if (curPage == 3) {
+ jsonSb.append("[");
+ jsonSb.append("{\"XH\": 5, \"ID\": 105, \"CHAR\": \"CHAR_5\", \"TEXT\": \"TEXT_5\"}");
+ jsonSb.append("]");
+ jsonSb.append(",");
+ jsonSb.append("\"userdata\": {\"dynamic_columns\": [\"XH\", \"ID\", \"CHAR\", \"TEXT\"]}");
+ }
+
+ jsonSb.append("}");
+ out.print(jsonSb.toString());
+%>
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/json.jsp b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/json.jsp
new file mode 100644
index 0000000..3c0dbca
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/json.jsp
@@ -0,0 +1,122 @@
+<%@ page language="java" pageEncoding="UTF-8" %>
+<%@ page import="java.util.*" %>
+<%
+ final String callback = request.getParameter("callback");
+
+ int pageSize = Integer.parseInt(request.getParameter("pageSize"));
+ int curPage = Integer.parseInt(request.getParameter("curPage"));
+
+ final String sortName = request.getParameter("sortName");
+ final String sortOrder = request.getParameter("sortOrder");
+
+ // only for load-time-test.html
+ final String load_time_test = request.getParameter("load_time_test");
+
+ // only for search.html
+ String xh = request.getParameter("xh");
+ if ("".equals(xh)) {
+ xh = null;
+ }
+
+ // data list
+ List
> data = new ArrayList>();
+ int totalRows = 26;
+ if ("true".equals(load_time_test)) {
+ totalRows = 2600;
+ }
+ for (int i = 0; i < totalRows; i++) {
+ Map map = new HashMap();
+ map.put("XH", i + 1);
+ map.put("ID", 100 - i);
+ map.put("CHAR", "char_" + i);
+ map.put("TEXT", "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_" + i);
+ map.put("DATE", "2012-12-12 15:01:01");
+ map.put("TIME", "15:01:01");
+ map.put("NUM", i * 10);
+ if (xh != null) {
+ if (Integer.toString(i + 1).equals(xh)) {
+ data.add(map);
+ }
+ } else {
+ data.add(map);
+ }
+ }
+
+ if (xh != null) {
+ totalRows = data.size();
+ }
+
+ // sort
+ if ("XH".equals(sortName) || "ID".equals(sortName)) {
+ if ("asc".equals(sortOrder)) {
+ Collections.sort(data, new Comparator>() {
+ public int compare(Map map1, Map map2) {
+ return Integer.parseInt(map1.get(sortName).toString()) - Integer.parseInt(map2.get(sortName).toString());
+ }
+ });
+ } else if ("desc".equals(sortOrder)) {
+ Collections.sort(data, new Comparator>() {
+ public int compare(Map map1, Map map2) {
+ return Integer.parseInt(map2.get(sortName).toString()) - Integer.parseInt(map1.get(sortName).toString());
+ }
+ });
+ }
+ } else if ("XH,ID".equals(sortName)) {
+ Collections.sort(data, new Comparator>() {
+ public int compare(Map map1, Map map2) {
+ int xhCp = Integer.parseInt(map1.get("XH").toString()) - Integer.parseInt(map2.get("XH").toString());
+ int idCp = Integer.parseInt(map1.get("ID").toString()) - Integer.parseInt(map2.get("ID").toString());
+ if (sortOrder.equals("asc,asc")) {
+ return xhCp == 0 ? idCp : xhCp;
+ } else if (sortOrder.equals("asc,desc")) {
+ return xhCp == 0 ? -idCp : xhCp;
+ } else if (sortOrder.equals("desc,asc")) {
+ return xhCp == 0 ? idCp : -xhCp;
+ } else if (sortOrder.equals("desc,desc")) {
+ return xhCp == 0 ? -idCp : -xhCp;
+ }
+ return 0;
+ }
+ });
+ }
+
+ StringBuilder jsonSb = new StringBuilder();
+ jsonSb.append("{");
+ jsonSb.append("\"success\": true");
+ jsonSb.append(", \"totalRows\": ").append(totalRows);
+ jsonSb.append(", \"curPage\": ").append(curPage);
+ jsonSb.append(", \"data\": ");
+ jsonSb.append("[");
+
+ int startRow = pageSize * (curPage - 1) + 1;
+ int endRow = startRow + pageSize - 1;
+ // if pageSize == 0, then return all
+ if (endRow > totalRows || pageSize == 0) {
+ endRow = totalRows;
+ }
+
+ for (int i = startRow - 1; i < endRow; i++) {
+ if (i != startRow - 1) {
+ jsonSb.append(",");
+ }
+ Map map = data.get(i);
+ jsonSb.append("{");
+ jsonSb.append("\"XH\": ").append(map.get("XH")).append(",");
+ jsonSb.append("\"ID\": ").append(map.get("ID")).append(",");
+ jsonSb.append("\"CHAR\": \"").append(map.get("CHAR")).append("\",");
+ jsonSb.append("\"TEXT\": \"").append(map.get("TEXT")).append("\",");
+ jsonSb.append("\"DATE\": \"").append(map.get("DATE")).append("\",");
+ jsonSb.append("\"TIME\": \"").append(map.get("TIME")).append("\",");
+ jsonSb.append("\"NUM\": ").append(map.get("NUM"));
+ jsonSb.append("}");
+ }
+
+ jsonSb.append("]");
+ jsonSb.append("}");
+
+ if (callback != null) {
+ jsonSb.insert(0, callback + "(");
+ jsonSb.append(");");
+ }
+ out.print(jsonSb.toString());
+%>
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/nested.json b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/nested.json
new file mode 100644
index 0000000..74eb8ab
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/nested.json
@@ -0,0 +1,70 @@
+{"success": true, "totalRows": 20, "curPage": 1, "data": [
+ {
+ "ID": 202,
+ "CHAR": "1",
+ "TEXT": {"TITLE": "TEXT_1"},
+ "NUM": 11.2,
+ "XH": 1
+ },
+ {
+ "ID": 201,
+ "CHAR": "111",
+ "TEXT": {"TITLE": "TEXT_2"},
+ "XH": 2
+ },
+ {
+ "ID": 200,
+ "CHAR": "200",
+ "TEXT": {"TITLE": "TEXT_3"},
+ "XH": 3
+ },
+ {
+ "ID": 199,
+ "CHAR": "199",
+ "XH": 4
+ },
+ {
+ "ID": 32,
+ "CHAR": "34",
+ "NUM": 12.1,
+ "XH": 5
+ },
+ {
+ "ID": 16,
+ "CHAR": "test",
+ "NUM": 16.1,
+ "XH": 6
+ },
+ {
+ "ID": 15,
+ "CHAR": "zifu15",
+ "DATE": "2012-05-15",
+ "TIME": "15:01:01",
+ "NUM": 1.15,
+ "XH": 7
+ },
+ {
+ "ID": 14,
+ "CHAR": "zifu14",
+ "DATE": "2012-05-14",
+ "TIME": "14:01:01",
+ "NUM": 1.14,
+ "XH": 8
+ },
+ {
+ "ID": 13,
+ "CHAR": "zifu13",
+ "DATE": "2012-05-13",
+ "TIME": "13:01:01",
+ "NUM": 1.13,
+ "XH": 9
+ },
+ {
+ "ID": 12,
+ "CHAR": "zifu12",
+ "DATE": "2012-05-12",
+ "TIME": "12:01:01",
+ "NUM": 1.12,
+ "XH": 10
+ }
+]}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/no-data.json b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/no-data.json
new file mode 100644
index 0000000..36ea857
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/no-data.json
@@ -0,0 +1 @@
+{"success": true, "totalRows": 0, "curPage": 1, "data": []}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/simple.json b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/simple.json
new file mode 100644
index 0000000..62f12da
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/simple.json
@@ -0,0 +1,138 @@
+{"success": true, "totalRows": 20, "curPage": 1, "data": [
+ {
+ "ID": 202,
+ "CHAR": "1",
+ "TEXT": "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_1",
+ "NUM": 11.2,
+ "XH": 1
+ },
+ {
+ "ID": 201,
+ "CHAR": "111",
+ "TEXT": "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_2",
+ "XH": 2
+ },
+ {
+ "ID": 200,
+ "CHAR": "200",
+ "TEXT": "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_3",
+ "XH": 3
+ },
+ {
+ "ID": 199,
+ "CHAR": "199",
+ "XH": 4
+ },
+ {
+ "ID": 32,
+ "CHAR": "34",
+ "NUM": 12.1,
+ "XH": 5
+ },
+ {
+ "ID": 16,
+ "CHAR": "test",
+ "NUM": 16.1,
+ "XH": 6
+ },
+ {
+ "ID": 15,
+ "CHAR": "zifu15",
+ "DATE": "2012-05-15",
+ "TIME": "15:01:01",
+ "NUM": 1.15,
+ "XH": 7
+ },
+ {
+ "ID": 14,
+ "CHAR": "zifu14",
+ "DATE": "2012-05-14",
+ "TIME": "14:01:01",
+ "NUM": 1.14,
+ "XH": 8
+ },
+ {
+ "ID": 13,
+ "CHAR": "zifu13",
+ "DATE": "2012-05-13",
+ "TIME": "13:01:01",
+ "NUM": 1.13,
+ "XH": 9
+ },
+ {
+ "ID": 12,
+ "CHAR": "zifu12",
+ "DATE": "2012-05-12",
+ "TIME": "12:01:01",
+ "NUM": 1.12,
+ "XH": 10
+ },
+ {
+ "ID": 2021,
+ "CHAR": "1",
+ "TEXT": "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_1",
+ "NUM": 11.2,
+ "XH": 11
+ },
+ {
+ "ID": 2011,
+ "CHAR": "111",
+ "TEXT": "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_2",
+ "XH": 12
+ },
+ {
+ "ID": 2000,
+ "CHAR": "200",
+ "TEXT": "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_3",
+ "XH": 13
+ },
+ {
+ "ID": 1991,
+ "CHAR": "199",
+ "XH": 14
+ },
+ {
+ "ID": 321,
+ "CHAR": "34",
+ "NUM": 12.1,
+ "XH": 15
+ },
+ {
+ "ID": 161,
+ "CHAR": "test",
+ "NUM": 16.1,
+ "XH": 16
+ },
+ {
+ "ID": 151,
+ "CHAR": "zifu15",
+ "DATE": "2012-05-15",
+ "TIME": "15:01:01",
+ "NUM": 1.15,
+ "XH": 17
+ },
+ {
+ "ID": 141,
+ "CHAR": "zifu14",
+ "DATE": "2012-05-14",
+ "TIME": "14:01:01",
+ "NUM": 1.14,
+ "XH": 18
+ },
+ {
+ "ID": 131,
+ "CHAR": "zifu13",
+ "DATE": "2012-05-13",
+ "TIME": "13:01:01",
+ "NUM": 1.13,
+ "XH": 19
+ },
+ {
+ "ID": 121,
+ "CHAR": "zifu12",
+ "DATE": "2012-05-12",
+ "TIME": "12:01:01",
+ "NUM": 1.12,
+ "XH": 20
+ }
+]}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/simple.xml b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/simple.xml
new file mode 100644
index 0000000..3944db6
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/simple.xml
@@ -0,0 +1,82 @@
+
+
+ true
+ 20
+ 1
+
+
+ 202
+ 1
+ TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_1
+ 11.2
+ 1
+
+
+ 201
+ 111
+ TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_2
+ 2
+
+
+ 200
+ 200
+ TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_3
+ 3
+
+
+ 199
+ 199
+ 4
+
+
+ 32
+ 34
+ 12.1
+ 5
+
+
+ 16
+ test
+ 16.1
+ 6
+
+
+ 16
+ test
+ 16.1
+ 6
+
+
+ 15
+ zifu15
+ 2012-05-15
+ 15:01:01
+ 1.15
+ 7
+
+
+ 14
+ zifu14
+ 2012-05-14
+ 14:01:01
+ 1.14
+ 8
+
+
+ 13
+ zifu13
+ 2012-05-13
+ 13:01:01
+ 1.13
+ 9
+
+
+ 12
+ zifu12
+ 2012-05-12
+ 12:01:01
+ 1.12
+ 10
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/userdata.json b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/userdata.json
new file mode 100644
index 0000000..83743d2
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/userdata.json
@@ -0,0 +1,35 @@
+{"success": true, "totalRows": 20, "curPage": 1, "data": [
+ {
+ "ID": 202,
+ "CHAR": "1",
+ "TEXT": "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_1",
+ "NUM": 11.2,
+ "XH": 1
+ },
+ {
+ "ID": 201,
+ "CHAR": "111",
+ "TEXT": "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_2",
+ "XH": 2
+ },
+ {
+ "ID": 200,
+ "CHAR": "200",
+ "TEXT": "TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_3",
+ "XH": 3
+ },
+ {
+ "ID": 199,
+ "CHAR": "199",
+ "XH": 4
+ },
+ {
+ "ID": 32,
+ "CHAR": "34",
+ "NUM": 12.1,
+ "XH": 5
+ }
+], "userdata": {
+ "description": "userdata can be a value, json Object or json Array"
+}
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/userdata.xml b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/userdata.xml
new file mode 100644
index 0000000..5f117bc
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/data/userdata.xml
@@ -0,0 +1,41 @@
+
+
+ true
+ 20
+ 1
+
+
+ 202
+ 1
+ TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_1
+ 11.2
+ 1
+
+
+ 201
+ 111
+ TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_2
+ 2
+
+
+ 200
+ 200
+ TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_3
+ 3
+
+
+ 199
+ 199
+ 4
+
+
+ 32
+ 34
+ 12.1
+ 5
+
+
+
+ userdata can be a value or xml string
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/dynamic-header.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/dynamic-header.html
new file mode 100644
index 0000000..177de83
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/dynamic-header.html
@@ -0,0 +1,41 @@
+
+
+
+
+ Dynamic Header Grid
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/edit-advanced.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/edit-advanced.html
new file mode 100644
index 0000000..0085819
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/edit-advanced.html
@@ -0,0 +1,115 @@
+
+
+
+
+ Advanced Edit Grid
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/edit.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/edit.html
new file mode 100644
index 0000000..d18ad7c
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/edit.html
@@ -0,0 +1,99 @@
+
+
+
+
+ Edit Grid
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/event.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/event.html
new file mode 100644
index 0000000..145aa2f
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/event.html
@@ -0,0 +1,66 @@
+
+
+
+
+ Grid Events
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/export.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/export.html
new file mode 100644
index 0000000..5269ec3
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/export.html
@@ -0,0 +1,84 @@
+
+
+
+
+ Export Grid
+
+
+
+
+
+
+
+
+ param1:
+
+ param2:
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+Documention:
+
+1, th properties:
+ w_index: index to export
+ w_align: align to export
+ w_export: "false" then not export it
+ width: "10%", "100px", "100PX", if not set then use $.bsgrid_export.doExport() third param's settings.colsProperties.width,
+ all above not set then use $.bsgrid_export.defaults.settings.colsProperties.width
+
+2, how to get column name:
+ $.trim($('th').eq(n).text())
+
+3, url request params names, global setting
+ to modify that: $.bsgrid_export.defaults.requestParamsName.X = '', X may exportFileName, colNames, colIndexs, colWidths, colAligns
+
+4, settings.colWidthPercentmultiplier
+ if set column width N%, then column width will reset N*colWidthPercentmultiplier.
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/extend.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/extend.html
new file mode 100644
index 0000000..faf59df
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/extend.html
@@ -0,0 +1,73 @@
+
+
+
+
+ Grid Extend
+
+
+
+
+
+
+
+
+
+ ID
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/fixed-header/fixed-header-custom.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/fixed-header/fixed-header-custom.html
new file mode 100644
index 0000000..e98a497
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/fixed-header/fixed-header-custom.html
@@ -0,0 +1,93 @@
+
+
+
+
+ Fixed Grid Custom
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/fixed-header/fixed-header-extend.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/fixed-header/fixed-header-extend.html
new file mode 100644
index 0000000..192da10
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/fixed-header/fixed-header-extend.html
@@ -0,0 +1,53 @@
+
+
+
+
+ Extend Fixed Grid
+
+
+
+
+
+
+
+
+
+ XH And ID
+ CONTENT
+ Operate
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/fixed-header/simple.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/fixed-header/simple.html
new file mode 100644
index 0000000..1103576
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/fixed-header/simple.html
@@ -0,0 +1,69 @@
+
+
+
+
+ Fixed Table Header
+
+
+
+
+
+
+
+ Column1
+ Column2
+ Column3
+ Column4
+ Column5
+ Column6
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/foot.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/foot.html
new file mode 100644
index 0000000..49ab014
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/foot.html
@@ -0,0 +1,74 @@
+
+
+
+
+ Grid With Footer
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+ Count:
+
+ Count(XH*ID):
+
+ Max(NUM):
+
+ Sum(NUM):
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/jsonp.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/jsonp.html
new file mode 100644
index 0000000..ded9d26
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/jsonp.html
@@ -0,0 +1,43 @@
+
+
+
+
+ Jsonp data
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/load-time-test.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/load-time-test.html
new file mode 100644
index 0000000..e768714
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/load-time-test.html
@@ -0,0 +1,53 @@
+
+
+
+
+ Grid Load Time Test
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/local/json.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/local/json.html
new file mode 100644
index 0000000..9da6b66
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/local/json.html
@@ -0,0 +1,72 @@
+
+
+
+
+ Local JSON Data Grid
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/local/xml.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/local/xml.html
new file mode 100644
index 0000000..593ee5e
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/local/xml.html
@@ -0,0 +1,72 @@
+
+
+
+
+ Local XML Data Grid
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/move-column-custom.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/move-column-custom.html
new file mode 100644
index 0000000..c2e3faa
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/move-column-custom.html
@@ -0,0 +1,123 @@
+
+
+
+
+ Grid Move Column
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/move-column-extend.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/move-column-extend.html
new file mode 100644
index 0000000..bd52c92
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/move-column-extend.html
@@ -0,0 +1,55 @@
+
+
+
+
+ Grid Move Column
+
+
+
+
+
+
+
+Note: Multi row header not support move column width.
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/multi-extend.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/multi-extend.html
new file mode 100644
index 0000000..4c1659e
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/multi-extend.html
@@ -0,0 +1,95 @@
+
+
+
+
+ Multi Grid
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID
+ CHAR
+
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/multi-header.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/multi-header.html
new file mode 100644
index 0000000..ced5779
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/multi-header.html
@@ -0,0 +1,48 @@
+
+
+
+
+ Multi Header Grid
+
+
+
+
+
+
+
+Note: Multi row header not support move column width.
+
+
+ XH And ID
+ CONTENT
+ Operate
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/multi-sort.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/multi-sort.html
new file mode 100644
index 0000000..7ee4294
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/multi-sort.html
@@ -0,0 +1,43 @@
+
+
+
+
+ Multi Sort Grid
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/multi.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/multi.html
new file mode 100644
index 0000000..e9fb970
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/multi.html
@@ -0,0 +1,80 @@
+
+
+
+
+ Multi Grid
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+ XH
+ ID
+ CHAR
+
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/nested-json.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/nested-json.html
new file mode 100644
index 0000000..4d76d82
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/nested-json.html
@@ -0,0 +1,51 @@
+
+
+
+
+ Nested Json Data Grid
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/no-data.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/no-data.html
new file mode 100644
index 0000000..f0663c6
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/no-data.html
@@ -0,0 +1,46 @@
+
+
+
+
+ No Data
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/no-display-blank-rows.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/no-display-blank-rows.html
new file mode 100644
index 0000000..7d0ffaf
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/no-display-blank-rows.html
@@ -0,0 +1,45 @@
+
+
+
+
+ No Display Blank Rows
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/no-pagation.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/no-pagation.html
new file mode 100644
index 0000000..f6da37b
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/no-pagation.html
@@ -0,0 +1,45 @@
+
+
+
+
+ No Pagation
+
+
+
+
+
+
+
+Refresh page
+ Note: If set pageAll true, only refreshPage method could work, method firstPage, prevPage, nextPage, lastPage, gotoPage not work.
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/paging.button.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/paging.button.html
new file mode 100644
index 0000000..091cc74
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/paging.button.html
@@ -0,0 +1,92 @@
+
+
+
+
+ Grid With Paging Additional Button
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/paging.little.button.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/paging.little.button.html
new file mode 100644
index 0000000..f528c79
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/paging.little.button.html
@@ -0,0 +1,96 @@
+
+
+
+
+ Grid With Little Paging Additional Button
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/paging.little.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/paging.little.html
new file mode 100644
index 0000000..bc74011
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/paging.little.html
@@ -0,0 +1,42 @@
+
+
+
+
+ Grid With Little Paging
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/row-hover.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/row-hover.html
new file mode 100644
index 0000000..7e9b346
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/row-hover.html
@@ -0,0 +1,43 @@
+
+
+
+
+ Row Hover
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/search.en.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/search.en.html
new file mode 100644
index 0000000..ffe1c47
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/search.en.html
@@ -0,0 +1,73 @@
+
+
+
+
+ Grid With Search
+
+
+
+
+
+
+
+
+
+ XH:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/search.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/search.html
new file mode 100644
index 0000000..aa18a98
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/search.html
@@ -0,0 +1,73 @@
+
+
+
+
+ Grid With Search
+
+
+
+
+
+
+
+
+
+ XH:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/select-row-event.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/select-row-event.html
new file mode 100644
index 0000000..0781704
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/select-row-event.html
@@ -0,0 +1,50 @@
+
+
+
+
+ Select Row Event
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple-conditions.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple-conditions.html
new file mode 100644
index 0000000..45b2fc0
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple-conditions.html
@@ -0,0 +1,48 @@
+
+
+
+
+ Simple Conditions
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple-fixed-width.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple-fixed-width.html
new file mode 100644
index 0000000..4139604
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple-fixed-width.html
@@ -0,0 +1,42 @@
+
+
+
+
+ Fixed Grid Width
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple-with-images.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple-with-images.html
new file mode 100644
index 0000000..6341369
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple-with-images.html
@@ -0,0 +1,48 @@
+
+
+
+
+ Simple Grid With Images
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ IMAGES
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple-xml.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple-xml.html
new file mode 100644
index 0000000..62d5262
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple-xml.html
@@ -0,0 +1,45 @@
+
+
+
+
+ Simple XML Data Grid
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple.en.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple.en.html
new file mode 100644
index 0000000..6f03f11
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple.en.html
@@ -0,0 +1,42 @@
+
+
+
+
+ Simple en Grid
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple.html
new file mode 100644
index 0000000..f3617f9
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/simple.html
@@ -0,0 +1,42 @@
+
+
+
+
+ Simple Grid
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/sort.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/sort.html
new file mode 100644
index 0000000..ac56382
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/sort.html
@@ -0,0 +1,42 @@
+
+
+
+
+ Sort Grid
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/standard.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/standard.html
new file mode 100644
index 0000000..90488b3
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/standard.html
@@ -0,0 +1,137 @@
+
+
+
+
+ Standard Grid
+
+
+
+
+
+
+
+
+ param1:
+ param2:
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/standard.zh-CN.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/standard.zh-CN.html
new file mode 100644
index 0000000..9c87564
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/standard.zh-CN.html
@@ -0,0 +1,137 @@
+
+
+
+
+ 方法演示
+
+
+
+
+
+
+
+
+ 参数1:
+ 参数2:
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/stripe-row.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/stripe-row.html
new file mode 100644
index 0000000..ae50acc
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/stripe-row.html
@@ -0,0 +1,43 @@
+
+
+
+
+ Stripe Row
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/access.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/access.html
new file mode 100644
index 0000000..eae32d8
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/access.html
@@ -0,0 +1,44 @@
+
+
+
+
+ ExtJS Access Style Grid
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/blue.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/blue.html
new file mode 100644
index 0000000..795e268
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/blue.html
@@ -0,0 +1,44 @@
+
+
+
+
+ ExtJS Blue Style Grid
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/bootstrap.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/bootstrap.html
new file mode 100644
index 0000000..6181619
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/bootstrap.html
@@ -0,0 +1,45 @@
+
+
+
+
+
+ Bootstrap Style Grid
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/custom.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/custom.html
new file mode 100644
index 0000000..35db81e
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/custom.html
@@ -0,0 +1,92 @@
+
+
+
+
+ Custom Blue Style Grid
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/easyui.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/easyui.html
new file mode 100644
index 0000000..3312ca3
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/easyui.html
@@ -0,0 +1,45 @@
+
+
+
+
+ EasyUI Style Grid
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/flexigrid.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/flexigrid.html
new file mode 100644
index 0000000..64280b1
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/flexigrid.html
@@ -0,0 +1,44 @@
+
+
+
+
+ FlexiGrid Gray Style Grid
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/gray.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/gray.html
new file mode 100644
index 0000000..f07ba94
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/gray.html
@@ -0,0 +1,44 @@
+
+
+
+
+ ExtJS Gray Style Grid
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/jqgrid.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/jqgrid.html
new file mode 100644
index 0000000..7adf748
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/jqgrid.html
@@ -0,0 +1,45 @@
+
+
+
+
+ jqGrid Style Grid
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/pure_gray.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/pure_gray.html
new file mode 100644
index 0000000..b6d7f6c
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/pure_gray.html
@@ -0,0 +1,44 @@
+
+
+
+
+ Pure Gray Style Grid
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/sky_blue.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/sky_blue.html
new file mode 100644
index 0000000..66411cd
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/themes/sky_blue.html
@@ -0,0 +1,44 @@
+
+
+
+
+ Dhtmlx Sky Blue Style Grid
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/userdata-xml.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/userdata-xml.html
new file mode 100644
index 0000000..d84cb59
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/userdata-xml.html
@@ -0,0 +1,46 @@
+
+
+
+
+ Grid Userdata(XML Data)
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/grid/userdata.html b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/userdata.html
new file mode 100644
index 0000000..9ebb625
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/grid/userdata.html
@@ -0,0 +1,45 @@
+
+
+
+
+ Grid Userdata
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/html5/grid.html b/public/static/admin_static/lib/jquery.bsgrid/examples/html5/grid.html
new file mode 100644
index 0000000..5de9519
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/html5/grid.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+ Html5 bsgrid Test
+
+
+
+
+
+
+
+
+
+
+ XH
+ CHAR
+ TEXT
+ DATE
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/images/1.jpg b/public/static/admin_static/lib/jquery.bsgrid/examples/images/1.jpg
new file mode 100644
index 0000000..78078c7
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/images/1.jpg differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/images/2.jpg b/public/static/admin_static/lib/jquery.bsgrid/examples/images/2.jpg
new file mode 100644
index 0000000..dd3ce50
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/images/2.jpg differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/images/3.jpg b/public/static/admin_static/lib/jquery.bsgrid/examples/images/3.jpg
new file mode 100644
index 0000000..b9238c8
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/images/3.jpg differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/images/image_loop-baidu_baijia-_prev_btn.png b/public/static/admin_static/lib/jquery.bsgrid/examples/images/image_loop-baidu_baijia-_prev_btn.png
new file mode 100644
index 0000000..824abc2
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/images/image_loop-baidu_baijia-_prev_btn.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/images/image_loop-baidu_baijia-next_btn.png b/public/static/admin_static/lib/jquery.bsgrid/examples/images/image_loop-baidu_baijia-next_btn.png
new file mode 100644
index 0000000..04816b2
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/images/image_loop-baidu_baijia-next_btn.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/images/image_loop-baidu_news.png b/public/static/admin_static/lib/jquery.bsgrid/examples/images/image_loop-baidu_news.png
new file mode 100644
index 0000000..1affe05
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/images/image_loop-baidu_news.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/layui/laydate.html b/public/static/admin_static/lib/jquery.bsgrid/examples/layui/laydate.html
new file mode 100644
index 0000000..cecd7b2
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/layui/laydate.html
@@ -0,0 +1,94 @@
+
+
+
+
+ Edit Grid Use Laydate
+
+
+
+
+
+
+
+
+
+
+Note:
+ 1, Laydate v1.1 may not render display none input;
+ 2, Laydate v1.1 may prevent input date change event;
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/layui/layer.html b/public/static/admin_static/lib/jquery.bsgrid/examples/layui/layer.html
new file mode 100644
index 0000000..0c492c2
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/layui/layer.html
@@ -0,0 +1,207 @@
+
+
+
+
+ Grid And Form with Layer
+
+
+
+
+
+
+
+
+
+
+ XH:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/layui/laypage-adapter.js b/public/static/admin_static/lib/jquery.bsgrid/examples/layui/laypage-adapter.js
new file mode 100644
index 0000000..e01872c
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/layui/laypage-adapter.js
@@ -0,0 +1,114 @@
+/**
+ * laypage adapter for bsgrid.leer
+ *
+ * jQuery.bsgrid v1.37 by @Baishui2004
+ * Copyright 2014 Apache v2 License
+ * https://github.com/baishui2004/jquery.bsgrid
+ */
+/**
+ * require common.js, grid.js.
+ *
+ * @author Baishui2004
+ * @Date June 16, 2015
+ */
+$.fn.bsgrid.defaults.pageIncorrectTurnAlert = false;
+
+$.fn.bsgrid.getCurPage = function (options) {
+ return options.curPage;
+};
+
+$.fn.bsgrid.refreshPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page($.fn.bsgrid.getCurPage(options));
+};
+
+$.fn.bsgrid.firstPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page(1);
+};
+
+$.fn.bsgrid.prevPage = function (options) {
+ var curPage = $.fn.bsgrid.getCurPage(options);
+ if (curPage <= 1) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.isFirstPage);
+ }
+ return;
+ }
+ $.fn.bsgrid.getGridObj(options.gridId).page(options.curPage - 1);
+};
+
+$.fn.bsgrid.nextPage = function (options) {
+ var curPage = $.fn.bsgrid.getCurPage(options);
+ if (curPage >= options.totalPages) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.isLastPage);
+ }
+ return;
+ }
+ $.fn.bsgrid.getGridObj(options.gridId).page(options.curPage + 1);
+};
+
+$.fn.bsgrid.lastPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page(options.totalPages);
+};
+
+$.fn.bsgrid.gotoPage = function (options, goPage) {
+ if (goPage == undefined) {
+ return;
+ }
+ if ($.trim(goPage) == '' || isNaN(goPage)) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.needInteger);
+ }
+ } else if (parseInt(goPage) < 1 || parseInt(goPage) > options.totalPages) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.needRange(1, options.totalPages));
+ }
+ } else {
+ $.fn.bsgrid.getGridObj(options.gridId).page(goPage);
+ }
+};
+
+$.fn.bsgrid.initPaging = function (options) {
+ $('#' + options.pagingOutTabId + ' td').append('
');
+ $('#' + options.pagingOutTabId).css('border-width', '0');
+};
+
+$.fn.bsgrid.setPagingValues = function (options) {
+ laypage({
+ cont: options.pagingId,
+ pages: options.totalPages,
+ curr: options.curPage,
+ skip: true,
+ first: '首页',
+ last: '尾页',
+ jump: function (e, first) {
+ if (!first) {
+ $.fn.bsgrid.getGridObj(options.gridId).page(e.curr);
+ }
+ }
+ });
+ $.bsgrid.adaptAttrOrProp($('#' + options.pagingId + ' div span.laypage_total input.laypage_skip'), 'max', options.totalPages);
+
+ // page size select
+ if (options.settings.pageSizeSelect) {
+ $('#' + options.pagingId + '_pageSize').remove();
+ $('#' + options.pagingId + '>div').prepend('每页显示: ');
+ var optionsSb = new StringBuilder();
+ for (var i = 0; i < options.settings.pageSizeForGrid.length; i++) {
+ var pageVal = options.settings.pageSizeForGrid[i];
+ optionsSb.append('' + pageVal + ' ');
+ }
+ $('#' + options.pagingId + '_pageSize').html(optionsSb.toString()).val(options.settings.pageSize);
+ // select change event
+ $('#' + options.pagingId + '_pageSize').change(function () {
+ options.settings.pageSize = parseInt($(this).val());
+ $(this).trigger('blur');
+ // if change pageSize, then page first
+ if (options.curPage == 1) {
+ $.fn.bsgrid.refreshPage(options);
+ } else {
+ $.fn.bsgrid.gotoPage(options, 1);
+ }
+ });
+ }
+};
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/layui/laypage.html b/public/static/admin_static/lib/jquery.bsgrid/examples/layui/laypage.html
new file mode 100644
index 0000000..b3db84c
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/layui/laypage.html
@@ -0,0 +1,56 @@
+
+
+
+
+ Grid With Laypage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/loading2.gif b/public/static/admin_static/lib/jquery.bsgrid/examples/loading2.gif
new file mode 100644
index 0000000..d2947d7
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/loading2.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/adapter.js b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/adapter.js
new file mode 100644
index 0000000..a6fcbdd
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/adapter.js
@@ -0,0 +1,121 @@
+/**
+ * jPages adapter for bsgrid.
+ *
+ * jQuery.bsgrid v1.37 by @Baishui2004
+ * Copyright 2014 Apache v2 License
+ * https://github.com/baishui2004/jquery.bsgrid
+ */
+/**
+ * require common.js, grid.js.
+ *
+ * @author Baishui2004
+ * @Date September 1, 2014
+ */
+$.fn.bsgrid.getCurPage = function (options) {
+ return options.curPage;
+};
+
+$.fn.bsgrid.refreshPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page($.fn.bsgrid.getCurPage(options));
+};
+
+$.fn.bsgrid.firstPage = function (options) {
+ $('#' + options.pagingId).jPages(1);
+};
+
+$.fn.bsgrid.prevPage = function (options) {
+ var curPage = $.fn.bsgrid.getCurPage(options);
+ if (curPage <= 1) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.isFirstPage);
+ }
+ return;
+ }
+ $('#' + options.pagingId).jPages(curPage - 1);
+};
+
+$.fn.bsgrid.nextPage = function (options) {
+ var curPage = $.fn.bsgrid.getCurPage(options);
+ if (curPage >= options.totalPages) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.isLastPage);
+ }
+ return;
+ }
+ $('#' + options.pagingId).jPages(curPage + 1);
+};
+
+$.fn.bsgrid.lastPage = function (options) {
+ $('#' + options.pagingId).jPages(options.totalPages);
+};
+
+$.fn.bsgrid.gotoPage = function (options, goPage) {
+ if (goPage == undefined) {
+ return;
+ }
+ if ($.trim(goPage) == '' || isNaN(goPage)) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.needInteger);
+ }
+ } else if (parseInt(goPage) < 1 || parseInt(goPage) > options.totalPages) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.needRange(1, options.totalPages));
+ }
+ } else {
+ $('#' + options.pagingId).jPages(goPage);
+ }
+};
+
+$.fn.bsgrid.initPaging = function (options) {
+ $('#' + options.pagingOutTabId).after('');
+ $('#' + options.pagingOutTabId + ' td').append('
');
+};
+
+$.fn.bsgrid.setPagingValues = function (options) {
+ var ulInnerHtml = new StringBuilder();
+ for (var i = 0; i < options.totalRows; i++) {
+ ulInnerHtml.append(' ');
+ }
+ $('#' + options.pagingId + '-ul').html(ulInnerHtml.toString());
+ $('#' + options.pagingId).data('bsgrid-curPage', options.curPage);
+ $('#' + options.pagingId).jPages({
+ containerID: options.pagingId + '-ul',
+ perPage: options.settings.pageSize,
+ startPage: options.curPage,
+ first: $.bsgridLanguage.pagingToolbar.firstPage, // false
+ previous: $.bsgridLanguage.pagingToolbar.prevPage, // "← previous"
+ next: $.bsgridLanguage.pagingToolbar.nextPage, // "next →"
+ last: $.bsgridLanguage.pagingToolbar.lastPage, // false
+ midRange: 6,
+ startRange: 2,
+ endRange: 2,
+ callback: function (pages, items) { // function(pages, items) { }
+ if (parseInt($.trim($('#' + options.pagingId).data('bsgrid-curPage'))) != pages.current) {
+ $.fn.bsgrid.getGridObj(options.gridId).page(pages.current);
+ }
+ }
+ });
+
+ // page size select
+ if (options.settings.pageSizeSelect) {
+ $('#' + options.pagingId + '_pageSize').remove();
+ $('#' + options.pagingId).prepend(' ');
+ var optionsSb = new StringBuilder();
+ for (var i = 0; i < options.settings.pageSizeForGrid.length; i++) {
+ var pageVal = options.settings.pageSizeForGrid[i];
+ optionsSb.append('' + pageVal + ' ');
+ }
+ $('#' + options.pagingId + '_pageSize').html(optionsSb.toString()).val(options.settings.pageSize);
+ // select change event
+ $('#' + options.pagingId + '_pageSize').change(function () {
+ options.settings.pageSize = parseInt($(this).val());
+ $(this).trigger('blur');
+ // if change pageSize, then page first
+ if (options.curPage == 1) {
+ $.fn.bsgrid.refreshPage(options);
+ } else {
+ $.fn.bsgrid.gotoPage(options, 1);
+ }
+ });
+ }
+};
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/css/jPages.css b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/css/jPages.css
new file mode 100644
index 0000000..826481f
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/css/jPages.css
@@ -0,0 +1,35 @@
+.holder {
+ margin: 15px 0;
+}
+
+.holder a {
+ font-size: 12px;
+ cursor: pointer;
+ margin: 0 5px;
+ color: #333;
+}
+
+.holder a:hover {
+ background-color: #222;
+ color: #fff;
+}
+
+.holder a.jp-previous { margin-right: 15px; }
+.holder a.jp-next { margin-left: 15px; }
+
+.holder a.jp-current, a.jp-current:hover {
+ color: #FF4242;
+ font-weight: bold;
+}
+
+.holder a.jp-disabled, a.jp-disabled:hover {
+ color: #bbb;
+}
+
+.holder a.jp-current, a.jp-current:hover,
+.holder a.jp-disabled, a.jp-disabled:hover {
+ cursor: default;
+ background: none;
+}
+
+.holder span { margin: 0 5px; }
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/js/jPages.min.js b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/js/jPages.min.js
new file mode 100644
index 0000000..5d739be
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/js/jPages.min.js
@@ -0,0 +1,13 @@
+/**
+ * jQuery jPages v0.7
+ * Client side pagination with jQuery
+ * http://luis-almeida.github.com/jPages
+ *
+ * Licensed under the MIT license.
+ * Copyright 2012 Luís Almeida
+ * https://github.com/luis-almeida
+ */
+
+ ;(function($,window,document,undefined){var name="jPages",instance=null,defaults={containerID:"",first:false,previous:"← previous",next:"next →",last:false,links:"numeric",startPage:1,perPage:10,midRange:5,startRange:1,endRange:1,keyBrowse:false,scrollBrowse:false,pause:0,clickStop:false,delay:50,direction:"forward",animation:"",fallback:400,minHeight:true,callback:undefined};function Plugin(element,options){this.options=$.extend({},defaults,options);this._container=$("#"+this.options.containerID);if(!this._container.length)return;this.jQwindow=$(window);this.jQdocument=$(document);this._holder=$(element);this._nav={};this._first=$(this.options.first);this._previous=$(this.options.previous);this._next=$(this.options.next);this._last=$(this.options.last);this._items=this._container.children(":visible");this._itemsShowing=$([]);this._itemsHiding=$([]);this._numPages=Math.ceil(this._items.length/this.options.perPage);this._currentPageNum=this.options.startPage;this._clicked=false;this._cssAnimSupport=this.getCSSAnimationSupport();this.init();}Plugin.prototype={constructor:Plugin,getCSSAnimationSupport:function(){var animation=false,animationstring='animation',keyframeprefix='',domPrefixes='Webkit Moz O ms Khtml'.split(' '),pfx='',elm=this._container.get(0);if(elm.style.animationName)animation=true;if(animation===false){for(var i=0;i";$(requiredStyles).appendTo("head");if(this._cssAnimSupport&&this.options.animation.length)this._items.addClass("animated jp-hidden");else this._items.hide();},setNav:function(){var navhtml=this.writeNav();this._holder.each(this.bind(function(index,element){var holder=$(element);holder.html(navhtml);this.cacheNavElements(holder,index);this.bindNavHandlers(index);this.disableNavSelection(element);},this));if(this.options.keyBrowse)this.bindNavKeyBrowse();if(this.options.scrollBrowse)this.bindNavScrollBrowse();},writeNav:function(){var i=1,navhtml;navhtml=this.writeBtn("first")+this.writeBtn("previous");for(;i<=this._numPages;i++){if(i===1&&this.options.startRange===0)navhtml+="... ";if(i>this.options.startRange&&i<=this._numPages-this.options.endRange)navhtml+="";else
+navhtml+=" ";switch(this.options.links){case"numeric":navhtml+=i;break;case"blank":break;case"title":var title=this._items.eq(i-1).attr("data-title");navhtml+=title!==undefined?title:"";break;}navhtml+=" ";if(i===this.options.startRange||i===this._numPages-this.options.endRange)navhtml+="... ";}navhtml+=this.writeBtn("next")+this.writeBtn("last")+" ";return navhtml;},writeBtn:function(which){return this.options[which]!==false&&!$(this["_"+which]).length?"
"+this.options[which]+" ":"";},cacheNavElements:function(holder,index){this._nav[index]={};this._nav[index].holder=holder;this._nav[index].first=this._first.length?this._first:this._nav[index].holder.find("a.jp-first");this._nav[index].previous=this._previous.length?this._previous:this._nav[index].holder.find("a.jp-previous");this._nav[index].next=this._next.length?this._next:this._nav[index].holder.find("a.jp-next");this._nav[index].last=this._last.length?this._last:this._nav[index].holder.find("a.jp-last");this._nav[index].fstBreak=this._nav[index].holder.find("span:first");this._nav[index].lstBreak=this._nav[index].holder.find("span:last");this._nav[index].pages=this._nav[index].holder.find("a").not(".jp-first, .jp-previous, .jp-next, .jp-last");this._nav[index].permPages=this._nav[index].pages.slice(0,this.options.startRange).add(this._nav[index].pages.slice(this._numPages-this.options.endRange,this._numPages));this._nav[index].pagesShowing=$([]);this._nav[index].currentPage=$([]);},bindNavHandlers:function(index){var nav=this._nav[index];nav.holder.bind("click.jPages",this.bind(function(evt){var newPage=this.getNewPage(nav,$(evt.target));if(this.validNewPage(newPage)){this._clicked=true;this.paginate(newPage);}evt.preventDefault();},this));if(this._first.length){this._first.bind("click.jPages",this.bind(function(){if(this.validNewPage(1)){this._clicked=true;this.paginate(1);}},this));}if(this._previous.length){this._previous.bind("click.jPages",this.bind(function(){var newPage=this._currentPageNum-1;if(this.validNewPage(newPage)){this._clicked=true;this.paginate(newPage);}},this));}if(this._next.length){this._next.bind("click.jPages",this.bind(function(){var newPage=this._currentPageNum+1;if(this.validNewPage(newPage)){this._clicked=true;this.paginate(newPage);}},this));}if(this._last.length){this._last.bind("click.jPages",this.bind(function(){if(this.validNewPage(this._numPages)){this._clicked=true;this.paginate(this._numPages);}},this));}},disableNavSelection:function(element){if(typeof element.onselectstart!="undefined")element.onselectstart=function(){return false;};else if(typeof element.style.MozUserSelect!="undefined")element.style.MozUserSelect="none";else
+element.onmousedown=function(){return false;};},bindNavKeyBrowse:function(){this.jQdocument.bind("keydown.jPages",this.bind(function(evt){var target=evt.target.nodeName.toLowerCase();if(this.elemScrolledIntoView()&&target!=="input"&&target!="textarea"){var newPage=this._currentPageNum;if(evt.which==37)newPage=this._currentPageNum-1;if(evt.which==39)newPage=this._currentPageNum+1;if(this.validNewPage(newPage)){this._clicked=true;this.paginate(newPage);}}},this));},elemScrolledIntoView:function(){var docViewTop,docViewBottom,elemTop,elemBottom;docViewTop=this.jQwindow.scrollTop();docViewBottom=docViewTop+this.jQwindow.height();elemTop=this._container.offset().top;elemBottom=elemTop+this._container.height();return((elemBottom>=docViewTop)&&(elemTop<=docViewBottom));},bindNavScrollBrowse:function(){this._container.bind("mousewheel.jPages DOMMouseScroll.jPages",this.bind(function(evt){var newPage=(evt.originalEvent.wheelDelta||-evt.originalEvent.detail)>0?(this._currentPageNum-1):(this._currentPageNum+1);if(this.validNewPage(newPage)){this._clicked=true;this.paginate(newPage);}evt.preventDefault();return false;},this));},getNewPage:function(nav,target){if(target.is(nav.currentPage))return this._currentPageNum;if(target.is(nav.pages))return nav.pages.index(target)+1;if(target.is(nav.first))return 1;if(target.is(nav.last))return this._numPages;if(target.is(nav.previous))return nav.pages.index(nav.currentPage);if(target.is(nav.next))return nav.pages.index(nav.currentPage)+2;},validNewPage:function(newPage){return newPage!==this._currentPageNum&&newPage>0&&newPage<=this._numPages;},paginate:function(page){var itemRange,pageInterval;itemRange=this.updateItems(page);pageInterval=this.updatePages(page);this._currentPageNum=page;if($.isFunction(this.options.callback))this.callback(page,itemRange,pageInterval);this.updatePause();},updateItems:function(page){var range=this.getItemRange(page);this._itemsHiding=this._itemsShowing;this._itemsShowing=this._items.slice(range.start,range.end);if(this._cssAnimSupport&&this.options.animation.length)this.cssAnimations(page);else this.jQAnimations(page);return range;},getItemRange:function(page){var range={};range.start=(page-1)*this.options.perPage;range.end=range.start+this.options.perPage;if(range.end>this._items.length)range.end=this._items.length;return range;},cssAnimations:function(page){clearInterval(this._delay);this._itemsHiding.removeClass(this.options.animation+" jp-invisible").addClass("jp-hidden");this._itemsShowing.removeClass("jp-hidden").addClass("jp-invisible");this._itemsOriented=this.getDirectedItems(page);this._index=0;this._delay=setInterval(this.bind(function(){if(this._index===this._itemsOriented.length)clearInterval(this._delay);else{this._itemsOriented.eq(this._index).removeClass("jp-invisible").addClass(this.options.animation);}this._index=this._index+1;},this),this.options.delay);},jQAnimations:function(page){clearInterval(this._delay);this._itemsHiding.addClass("jp-hidden");this._itemsShowing.fadeTo(0,0).removeClass("jp-hidden");this._itemsOriented=this.getDirectedItems(page);this._index=0;this._delay=setInterval(this.bind(function(){if(this._index===this._itemsOriented.length)clearInterval(this._delay);else{this._itemsOriented.eq(this._index).fadeTo(this.options.fallback,1);}this._index=this._index+1;},this),this.options.delay);},getDirectedItems:function(page){var itemsToShow;switch(this.options.direction){case"backwards":itemsToShow=$(this._itemsShowing.get().reverse());break;case"random":itemsToShow=$(this._itemsShowing.get().sort(function(){return(Math.round(Math.random())-0.5);}));break;case"auto":itemsToShow=page>=this._currentPageNum?this._itemsShowing:$(this._itemsShowing.get().reverse());break;default:itemsToShow=this._itemsShowing;}return itemsToShow;},updatePages:function(page){var interval,index,nav;interval=this.getInterval(page);for(index in this._nav){if(this._nav.hasOwnProperty(index)){nav=this._nav[index];this.updateBtns(nav,page);this.updateCurrentPage(nav,page);this.updatePagesShowing(nav,interval);this.updateBreaks(nav,interval);}}return interval;},getInterval:function(page){var neHalf,upperLimit,start,end;neHalf=Math.ceil(this.options.midRange/2);upperLimit=this._numPages-this.options.midRange;start=page>neHalf?Math.max(Math.min(page-neHalf,upperLimit),0):0;end=page>neHalf?Math.min(page+neHalf-(this.options.midRange%2>0?1:0),this._numPages):Math.min(this.options.midRange,this._numPages);return{start:start,end:end};},updateBtns:function(nav,page){if(page===1){nav.first.addClass("jp-disabled");nav.previous.addClass("jp-disabled");}if(page===this._numPages){nav.next.addClass("jp-disabled");nav.last.addClass("jp-disabled");}if(this._currentPageNum===1&&page>1){nav.first.removeClass("jp-disabled");nav.previous.removeClass("jp-disabled");}if(this._currentPageNum===this._numPages&&page
this.options.startRange||(this.options.startRange===0&&interval.start>0))nav.fstBreak.removeClass("jp-hidden");else nav.fstBreak.addClass("jp-hidden");if(interval.end1){clearTimeout(this._pause);if(this.options.clickStop&&this._clicked)return;else{this._pause=setTimeout(this.bind(function(){this.paginate(this._currentPageNum!==this._numPages?this._currentPageNum+1:1);},this),this.options.pause);}}},setMinHeight:function(){if(this.options.minHeight&&!this._container.is("table, tbody")){setTimeout(this.bind(function(){this._container.css({"min-height":this._container.css("height")});},this),1000);}},bind:function(fn,me){return function(){return fn.apply(me,arguments);};},destroy:function(){this.jQdocument.unbind("keydown.jPages");this._container.unbind("mousewheel.jPages DOMMouseScroll.jPages");if(this.options.minHeight)this._container.css("min-height","");if(this._cssAnimSupport&&this.options.animation.length)this._items.removeClass("animated jp-hidden jp-invisible "+this.options.animation);else this._items.removeClass("jp-hidden").fadeTo(0,1);this._holder.unbind("click.jPages").empty();}};$.fn[name]=function(arg){var type=$.type(arg);if(type==="object"){if(this.length&&!$.data(this,name)){instance=new Plugin(this,arg);this.each(function(){$.data(this,name,instance);});}return this;}if(type==="string"&&arg==="destroy"){instance.destroy();this.each(function(){$.removeData(this,name);});return this;}if(type==='number'&&arg%1===0){if(instance.validNewPage(arg))instance.paginate(arg);return this;}return this;};})(jQuery,window,document);
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/sample-adapter.html b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/sample-adapter.html
new file mode 100644
index 0000000..b925f13
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/sample-adapter.html
@@ -0,0 +1,45 @@
+
+
+
+
+ Grid With jPages (Adapter)
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/sample.html b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/sample.html
new file mode 100644
index 0000000..4c2285c
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPages/sample.html
@@ -0,0 +1,76 @@
+
+
+
+
+ Grid With jPages
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/adapter.js b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/adapter.js
new file mode 100644
index 0000000..ffc47d6
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/adapter.js
@@ -0,0 +1,108 @@
+/**
+ * jPaginate adapter for bsgrid.
+ *
+ * jQuery.bsgrid v1.37 by @Baishui2004
+ * Copyright 2014 Apache v2 License
+ * https://github.com/baishui2004/jquery.bsgrid
+ */
+/**
+ * require common.js, grid.js.
+ *
+ * @author Baishui2004
+ * @Date September 1, 2014
+ */
+$.fn.bsgrid.getCurPage = function (options) {
+ return options.curPage;
+};
+
+$.fn.bsgrid.refreshPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page($.fn.bsgrid.getCurPage(options));
+};
+
+$.fn.bsgrid.firstPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page(1);
+};
+
+$.fn.bsgrid.prevPage = function (options) {
+ var curPage = $.fn.bsgrid.getCurPage(options);
+ if (curPage <= 1) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.isFirstPage);
+ }
+ return;
+ }
+ $.fn.bsgrid.getGridObj(options.gridId).page(curPage - 1);
+};
+
+$.fn.bsgrid.nextPage = function (options) {
+ var curPage = $.fn.bsgrid.getCurPage(options);
+ if (curPage >= options.totalPages) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.isLastPage);
+ }
+ return;
+ }
+ $.fn.bsgrid.getGridObj(options.gridId).page(curPage + 1);
+};
+
+$.fn.bsgrid.lastPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page(options.totalPages);
+};
+
+$.fn.bsgrid.gotoPage = function (options, goPage) {
+ if (goPage == undefined) {
+ return;
+ }
+ if ($.trim(goPage) == '' || isNaN(goPage)) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.needInteger);
+ }
+ } else if (parseInt(goPage) < 1 || parseInt(goPage) > options.totalPages) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.needRange(1, options.totalPages));
+ }
+ } else {
+ $.fn.bsgrid.getGridObj(options.gridId).page(goPage);
+ }
+};
+
+$.fn.bsgrid.initPaging = function (options) {
+ $('#' + options.pagingOutTabId).remove();
+ $('#' + options.gridId).after('
');
+};
+
+$.fn.bsgrid.setPagingValues = function (options) {
+ $('#' + options.pagingId).paginate({
+ count: options.totalPages,
+ start: options.curPage,
+ display: 6,
+ onChange: function (page) {
+ $('._current', '#' + options.pagingId).removeClass('_current').hide();
+ $('#p' + page).addClass('_current').show();
+ $.fn.bsgrid.getGridObj(options.gridId).page(page);
+ }
+ });
+
+ // page size select
+ if (options.settings.pageSizeSelect) {
+ $('#' + options.pagingId + '_pageSize').remove();
+ $('#' + options.pagingId + ' .jPag-control-front').append(' ');
+ var optionsSb = new StringBuilder();
+ for (var i = 0; i < options.settings.pageSizeForGrid.length; i++) {
+ var pageVal = options.settings.pageSizeForGrid[i];
+ optionsSb.append('' + pageVal + ' ');
+ }
+ $('#' + options.pagingId + '_pageSize').html(optionsSb.toString()).val(options.settings.pageSize);
+ // select change event
+ $('#' + options.pagingId + '_pageSize').change(function () {
+ options.settings.pageSize = parseInt($(this).val());
+ $(this).trigger('blur');
+ // if change pageSize, then page first
+ if (options.curPage == 1) {
+ $.fn.bsgrid.refreshPage(options);
+ } else {
+ $.fn.bsgrid.gotoPage(options, 1);
+ }
+ });
+ }
+};
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/css/style.css b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/css/style.css
new file mode 100644
index 0000000..d0497a9
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/css/style.css
@@ -0,0 +1,108 @@
+.jPaginate{
+ height:34px;
+ position:relative;
+ color:#a5a5a5;
+ font-size:small;
+ width:100%;
+}
+.jPaginate a{
+ line-height:15px;
+ height:18px;
+ cursor:pointer;
+ padding:2px 5px;
+ margin:2px;
+ float:left;
+}
+.jPag-control-back{
+ position:absolute;
+ left:0px;
+}
+.jPag-control-front{
+ position:absolute;
+ top:0px;
+}
+.jPaginate span{
+ cursor:pointer;
+}
+ul.jPag-pages{
+ float:left;
+ list-style-type:none;
+ margin:0px 0px 0px 0px;
+ padding:0px;
+}
+ul.jPag-pages li{
+ display:inline;
+ float:left;
+ padding:0px;
+ margin:0px;
+}
+ul.jPag-pages li a{
+ float:left;
+ padding:2px 5px;
+}
+span.jPag-current{
+ cursor:default;
+ font-weight:normal;
+ line-height:15px;
+ height:18px;
+ padding:2px 5px;
+ margin:2px;
+ float:left;
+}
+ul.jPag-pages li span.jPag-previous,
+ul.jPag-pages li span.jPag-next,
+span.jPag-sprevious,
+span.jPag-snext,
+ul.jPag-pages li span.jPag-previous-img,
+ul.jPag-pages li span.jPag-next-img,
+span.jPag-sprevious-img,
+span.jPag-snext-img{
+ height:22px;
+ margin:2px;
+ float:left;
+ line-height:18px;
+}
+
+ul.jPag-pages li span.jPag-previous,
+ul.jPag-pages li span.jPag-previous-img{
+ margin:2px 0px 2px 2px;
+ font-size:12px;
+ font-weight:bold;
+ width:10px;
+
+}
+ul.jPag-pages li span.jPag-next,
+ul.jPag-pages li span.jPag-next-img{
+ margin:2px 2px 2px 0px;
+ font-size:12px;
+ font-weight:bold;
+ width:10px;
+}
+span.jPag-sprevious,
+span.jPag-sprevious-img{
+ margin:2px 0px 2px 2px;
+ font-size:18px;
+ width:15px;
+ text-align:right;
+}
+span.jPag-snext,
+span.jPag-snext-img{
+ margin:2px 2px 2px 0px;
+ font-size:18px;
+ width:15px;
+ text-align:right;
+}
+ul.jPag-pages li span.jPag-previous-img{
+ background:transparent url(../images/previous.png) no-repeat center right;
+ }
+ul.jPag-pages li span.jPag-next-img{
+ background:transparent url(../images/next.png) no-repeat center left;
+ }
+span.jPag-sprevious-img{
+ background:transparent url(../images/sprevious.png) no-repeat center right;
+ }
+span.jPag-snext-img{
+ background:transparent url(../images/snext.png) no-repeat center left;
+ }
+
+
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/images/next.png b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/images/next.png
new file mode 100644
index 0000000..931aee5
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/images/next.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/images/previous.png b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/images/previous.png
new file mode 100644
index 0000000..806ae8d
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/images/previous.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/images/snext.png b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/images/snext.png
new file mode 100644
index 0000000..95ffba3
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/images/snext.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/images/sprevious.png b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/images/sprevious.png
new file mode 100644
index 0000000..31e64c9
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/images/sprevious.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/js/jquery.paginate.js b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/js/jquery.paginate.js
new file mode 100644
index 0000000..20b76ad
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/js/jquery.paginate.js
@@ -0,0 +1,249 @@
+(function($) {
+ $.fn.paginate = function(options) {
+ var opts = $.extend({}, $.fn.paginate.defaults, options);
+ return this.each(function() {
+ $this = $(this);
+ var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
+ var selectedpage = o.start;
+ $.fn.draw(o,$this,selectedpage);
+ });
+ };
+ var outsidewidth_tmp = 0;
+ var insidewidth = 0;
+ var bName = navigator.appName;
+ var bVer = navigator.appVersion;
+ if(bVer.indexOf('MSIE 7.0') > 0)
+ var ver = "ie7";
+ $.fn.paginate.defaults = {
+ count : 5,
+ start : 12,
+ display : 5,
+ border : true,
+ border_color : '#fff',
+ text_color : '#8cc59d',
+ background_color : 'black',
+ border_hover_color : '#fff',
+ text_hover_color : '#fff',
+ background_hover_color : '#fff',
+ rotate : true,
+ images : true,
+ mouse : 'slide',
+ onChange : function(){return false;}
+ };
+ $.fn.draw = function(o,obj,selectedpage){
+ if(o.display > o.count)
+ o.display = o.count;
+ $this.empty();
+ if(o.images){
+ var spreviousclass = 'jPag-sprevious-img';
+ var previousclass = 'jPag-previous-img';
+ var snextclass = 'jPag-snext-img';
+ var nextclass = 'jPag-next-img';
+ }
+ else{
+ var spreviousclass = 'jPag-sprevious';
+ var previousclass = 'jPag-previous';
+ var snextclass = 'jPag-snext';
+ var nextclass = 'jPag-next';
+ }
+ var _first = $(document.createElement('a')).addClass('jPag-first').html('First');
+
+ if(o.rotate){
+ if(o.images) var _rotleft = $(document.createElement('span')).addClass(spreviousclass);
+ else var _rotleft = $(document.createElement('span')).addClass(spreviousclass).html('«');
+ }
+
+ var _divwrapleft = $(document.createElement('div')).addClass('jPag-control-back');
+ _divwrapleft.append(_first).append(_rotleft);
+
+ var _ulwrapdiv = $(document.createElement('div')).css('overflow','hidden');
+ var _ul = $(document.createElement('ul')).addClass('jPag-pages')
+ var c = (o.display - 1) / 2;
+ var first = selectedpage - c;
+ var selobj;
+ for(var i = 0; i < o.count; i++){
+ var val = i+1;
+ if(val == selectedpage){
+ var _obj = $(document.createElement('li')).html(''+val+' ');
+ selobj = _obj;
+ _ul.append(_obj);
+ }
+ else{
+ var _obj = $(document.createElement('li')).html(''+ val +' ');
+ _ul.append(_obj);
+ }
+ }
+ _ulwrapdiv.append(_ul);
+
+ if(o.rotate){
+ if(o.images) var _rotright = $(document.createElement('span')).addClass(snextclass);
+ else var _rotright = $(document.createElement('span')).addClass(snextclass).html('»');
+ }
+
+ var _last = $(document.createElement('a')).addClass('jPag-last').html('Last');
+ var _divwrapright = $(document.createElement('div')).addClass('jPag-control-front');
+ _divwrapright.append(_rotright).append(_last);
+
+ //append all:
+ $this.addClass('jPaginate').append(_divwrapleft).append(_ulwrapdiv).append(_divwrapright);
+
+ if(!o.border){
+ if(o.background_color == 'none') var a_css = {'color':o.text_color};
+ else var a_css = {'color':o.text_color,'background-color':o.background_color};
+ if(o.background_hover_color == 'none') var hover_css = {'color':o.text_hover_color};
+ else var hover_css = {'color':o.text_hover_color,'background-color':o.background_hover_color};
+ }
+ else{
+ if(o.background_color == 'none') var a_css = {'color':o.text_color,'border':'1px solid '+o.border_color};
+ else var a_css = {'color':o.text_color,'background-color':o.background_color,'border':'1px solid '+o.border_color};
+ if(o.background_hover_color == 'none') var hover_css = {'color':o.text_hover_color,'border':'1px solid '+o.border_hover_color};
+ else var hover_css = {'color':o.text_hover_color,'background-color':o.background_hover_color,'border':'1px solid '+o.border_hover_color};
+ }
+
+ $.fn.applystyle(o,$this,a_css,hover_css,_first,_ul,_ulwrapdiv,_divwrapright);
+ //calculate width of the ones displayed:
+ var outsidewidth = outsidewidth_tmp - _first.parent().width() -3;
+ if(ver == 'ie7'){
+ _ulwrapdiv.css('width',outsidewidth+72+'px');
+ _divwrapright.css('left',outsidewidth_tmp+6+72+'px');
+ }
+ else{
+ _ulwrapdiv.css('width',outsidewidth+'px');
+ _divwrapright.css('left',outsidewidth_tmp+6+'px');
+ }
+
+ if(o.rotate){
+ _rotright.hover(
+ function() {
+ thumbs_scroll_interval = setInterval(
+ function() {
+ var left = _ulwrapdiv.scrollLeft() + 1;
+ _ulwrapdiv.scrollLeft(left);
+ },
+ 20
+ );
+ },
+ function() {
+ clearInterval(thumbs_scroll_interval);
+ }
+ );
+ _rotleft.hover(
+ function() {
+ thumbs_scroll_interval = setInterval(
+ function() {
+ var left = _ulwrapdiv.scrollLeft() - 1;
+ _ulwrapdiv.scrollLeft(left);
+ },
+ 20
+ );
+ },
+ function() {
+ clearInterval(thumbs_scroll_interval);
+ }
+ );
+ if(o.mouse == 'press'){
+ _rotright.mousedown(
+ function() {
+ thumbs_mouse_interval = setInterval(
+ function() {
+ var left = _ulwrapdiv.scrollLeft() + 5;
+ _ulwrapdiv.scrollLeft(left);
+ },
+ 20
+ );
+ }
+ ).mouseup(
+ function() {
+ clearInterval(thumbs_mouse_interval);
+ }
+ );
+ _rotleft.mousedown(
+ function() {
+ thumbs_mouse_interval = setInterval(
+ function() {
+ var left = _ulwrapdiv.scrollLeft() - 5;
+ _ulwrapdiv.scrollLeft(left);
+ },
+ 20
+ );
+ }
+ ).mouseup(
+ function() {
+ clearInterval(thumbs_mouse_interval);
+ }
+ );
+ }
+ else{
+ _rotleft.click(function(e){
+ var width = outsidewidth - 10;
+ var left = _ulwrapdiv.scrollLeft() - width;
+ _ulwrapdiv.animate({scrollLeft: left +'px'});
+ });
+
+ _rotright.click(function(e){
+ var width = outsidewidth - 10;
+ var left = _ulwrapdiv.scrollLeft() + width;
+ _ulwrapdiv.animate({scrollLeft: left +'px'});
+ });
+ }
+ }
+
+ //first and last:
+ _first.click(function(e){
+ _ulwrapdiv.animate({scrollLeft: '0px'});
+ _ulwrapdiv.find('li').eq(0).click();
+ });
+ _last.click(function(e){
+ _ulwrapdiv.animate({scrollLeft: insidewidth +'px'});
+ _ulwrapdiv.find('li').eq(o.count - 1).click();
+ });
+
+ //click a page
+ _ulwrapdiv.find('li').click(function(e){
+ selobj.html(''+selobj.find('.jPag-current').html()+' ');
+ var currval = $(this).find('a').html();
+ $(this).html(''+currval+' ');
+ selobj = $(this);
+ $.fn.applystyle(o,$(this).parent().parent().parent(),a_css,hover_css,_first,_ul,_ulwrapdiv,_divwrapright);
+ var left = (this.offsetLeft) / 2;
+ var left2 = _ulwrapdiv.scrollLeft() + left;
+ var tmp = left - (outsidewidth / 2);
+ if(ver == 'ie7')
+ _ulwrapdiv.animate({scrollLeft: left + tmp - _first.parent().width() + 52 + 'px'});
+ else
+ _ulwrapdiv.animate({scrollLeft: left + tmp - _first.parent().width() + 'px'});
+ o.onChange(currval);
+ });
+
+ var last = _ulwrapdiv.find('li').eq(o.start-1);
+ last.attr('id','tmp');
+ var left = document.getElementById('tmp').offsetLeft / 2;
+ last.removeAttr('id');
+ var tmp = left - (outsidewidth / 2);
+ if(ver == 'ie7') _ulwrapdiv.animate({scrollLeft: left + tmp - _first.parent().width() + 52 + 'px'});
+ else _ulwrapdiv.animate({scrollLeft: left + tmp - _first.parent().width() + 'px'});
+ }
+
+ $.fn.applystyle = function(o,obj,a_css,hover_css,_first,_ul,_ulwrapdiv,_divwrapright){
+ obj.find('a').css(a_css);
+ obj.find('span.jPag-current').css(hover_css);
+ obj.find('a').hover(
+ function(){
+ $(this).css(hover_css);
+ },
+ function(){
+ $(this).css(a_css);
+ }
+ );
+ obj.css('padding-left',_first.parent().width() + 5 +'px');
+ insidewidth = 0;
+
+ obj.find('li').each(function(i,n){
+ if(i == (o.display-1)){
+ outsidewidth_tmp = this.offsetLeft + this.offsetWidth ;
+ }
+ insidewidth += this.offsetWidth;
+ })
+ _ul.css('width',insidewidth+'px');
+ }
+})(jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/sample-adapter.html b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/sample-adapter.html
new file mode 100644
index 0000000..dc2c6a5
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/sample-adapter.html
@@ -0,0 +1,45 @@
+
+
+
+
+ Grid With jPaginate (Adapter)
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/sample.html b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/sample.html
new file mode 100644
index 0000000..8438705
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginate/sample.html
@@ -0,0 +1,62 @@
+
+
+
+
+ Grid With jPaginate
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/adapter.js b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/adapter.js
new file mode 100644
index 0000000..86804a7
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/adapter.js
@@ -0,0 +1,98 @@
+/**
+ * jPaginator adapter for bsgrid.
+ *
+ * jQuery.bsgrid v1.37 by @Baishui2004
+ * Copyright 2014 Apache v2 License
+ * https://github.com/baishui2004/jquery.bsgrid
+ */
+/**
+ * require common.js, grid.js.
+ *
+ * @author Baishui2004
+ * @Date September 2, 2014
+ */
+$.fn.bsgrid.getCurPage = function (options) {
+ return options.curPage;
+};
+
+$.fn.bsgrid.refreshPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page($.fn.bsgrid.getCurPage(options));
+};
+
+$.fn.bsgrid.firstPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page(1);
+};
+
+$.fn.bsgrid.prevPage = function (options) {
+ var curPage = $.fn.bsgrid.getCurPage(options);
+ if (curPage <= 1) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.isFirstPage);
+ }
+ return;
+ }
+ $.fn.bsgrid.getGridObj(options.gridId).page(curPage - 1);
+};
+
+$.fn.bsgrid.nextPage = function (options) {
+ var curPage = $.fn.bsgrid.getCurPage(options);
+ if (curPage >= options.totalPages) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.isLastPage);
+ }
+ return;
+ }
+ $.fn.bsgrid.getGridObj(options.gridId).page(curPage + 1);
+};
+
+$.fn.bsgrid.lastPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page(options.totalPages);
+};
+
+$.fn.bsgrid.gotoPage = function (options, goPage) {
+ if (goPage == undefined) {
+ return;
+ }
+ if ($.trim(goPage) == '' || isNaN(goPage)) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.needInteger);
+ }
+ } else if (parseInt(goPage) < 1 || parseInt(goPage) > options.totalPages) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.needRange(1, options.totalPages));
+ }
+ } else {
+ $.fn.bsgrid.getGridObj(options.gridId).page(goPage);
+ }
+};
+
+$.fn.bsgrid.initPaging = function (options) {
+ var pagingSb = new StringBuilder();
+ pagingSb.append('');
+ pagingSb.append('
');
+ pagingSb.append('
');
+ pagingSb.append('
');
+ pagingSb.append('
');
+ pagingSb.append('
');
+
+ $('#' + options.pagingOutTabId).remove();
+ $('#' + options.gridId).after(pagingSb.toString());
+};
+
+$.fn.bsgrid.setPagingValues = function (options) {
+ $('#' + options.pagingId).jPaginator({
+ nbPages: options.totalPages,
+ selectedPage: options.curPage,
+ overBtnLeft: '#' + options.pagingId + ' .o_left',
+ overBtnRight: '#' + options.pagingId + ' .o_right',
+ maxBtnLeft: '#' + options.pagingId + ' .m_left',
+ maxBtnRight: '#' + options.pagingId + ' .m_right',
+ minSlidesForSlider: 0,
+ speed: 1,
+ onPageClicked: function (a, num) {
+ $.fn.bsgrid.getGridObj(options.gridId).page(num);
+ }
+ });
+};
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/css/jPaginator.css b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/css/jPaginator.css
new file mode 100644
index 0000000..4edbd41
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/css/jPaginator.css
@@ -0,0 +1,47 @@
+ /* must set border width with px */
+ .paginator_p {
+ text-align:center;
+ float:left;
+ color:white;
+ background-color:#B7B7B7;
+ cursor:pointer;
+ padding:2px 0 0 0;
+ }
+ .paginator_p_bloc {
+ position:relative;
+ width:3000px;
+ }
+ .paginator_p.over {
+ background-color:#8B8B8B;
+ }
+ .paginator_p.selected {
+ background-color:#CAFF3A;
+ color:white;
+ background-color:black;
+ }
+ .paginator_p_wrap {
+ position:relative;
+ overflow:hidden;
+ float:left;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -o-user-select: none;
+ user-select: none;
+ }
+ .paginator_slider {
+ clear:left;
+ height: 4px;
+ top: 4px;
+ background: white;
+ border: solid 1px black;
+ position:relative;
+ }
+
+ .paginator_slider .ui-slider-handle {
+ width: 8px;
+ height: 12px;
+ position: absolute;
+ top: -4px;
+ background-color:black;
+ }
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/img/btn_precedent.bmp b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/img/btn_precedent.bmp
new file mode 100644
index 0000000..9b110f5
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/img/btn_precedent.bmp differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/img/btn_precedent_max.bmp b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/img/btn_precedent_max.bmp
new file mode 100644
index 0000000..ef803ad
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/img/btn_precedent_max.bmp differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/img/btn_suivant.bmp b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/img/btn_suivant.bmp
new file mode 100644
index 0000000..f7ae3e2
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/img/btn_suivant.bmp differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/img/btn_suivant_max.bmp b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/img/btn_suivant_max.bmp
new file mode 100644
index 0000000..aeecae1
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/img/btn_suivant_max.bmp differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/js/jPaginator-min.js b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/js/jPaginator-min.js
new file mode 100644
index 0000000..066a6bb
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/js/jPaginator-min.js
@@ -0,0 +1,10 @@
+(function(b){b.fn.jPaginator=function(y){var f,n,m,h,j,g,k,s,t,l;1!=this.size()&&b.error("You must use this plugin with a unique element");var a={selectedPage:null,nbPages:100,nbVisible:10,widthPx:30,marginPx:1,overBtnLeft:null,overBtnRight:null,maxBtnLeft:null,maxBtnRight:null,withSlider:!0,withAcceleration:!0,speed:2,coeffAcceleration:2,minSlidesForSlider:3,onPageClicked:null};f=0;n=1;g=j=h=m=0;t=s=k=!1;l=!0;return this.each(function(){function B(d){d=1*d.html();c.find(".paginator_p.selected").removeClass("selected");
+a.selectedPage=d;b(c.find(".paginator_p_bloc .paginator_p").get(a.selectedPage-n+1)).addClass("selected");a.onPageClicked&&a.onPageClicked.call(this,c,a.selectedPage)}function p(d){c.find(".paginator_p.selected").removeClass("selected");var d=Math.min(a.nbPages-a.nbVisible+1,d),d=Math.max(1,d),e=d-2;c.find(".paginator_p_bloc .paginator_p").each(function(){e+=1;b(this).html(e);a.selectedPage==e&&b(this).addClass("selected")});c.find(".paginator_p_bloc").css("left","-"+f+"px");n=d;j=(d-1)*f;m=0}function q(a){c.find(".paginator_slider").slider();
+var a=Math.round(100*(a/h)),e=c.find(".paginator_slider").slider("option","value");"number"==typeof a&&!isNaN(a)&&a!=e&&c.find(".paginator_slider").slider("option","value",a)}function z(d,e){if(l&&!k){var b=e.value,b=Math.min(100,b),b=Math.max(0,b),c=Math.round(h*b/100)-j;100==b?p(a.nbPages-a.nbVisible+1):0==b?p(1):v(c)}}function v(d){var b=Math.abs(d)/d,u=m+d,b=b*Math.floor(Math.abs(u)/f);m=u%=f;var r=(n-1)*f+m,l=n+b;1>l&&(r=-1);l>a.nbPages&&(r=h+1);0>r?(p(1),m=j=0,q(0),s=!0,g=0,k=!1):r>h?(p(a.nbPages),
+j=h,m=0,q(h),t=!0,g=0,k=!1):(t=s=!1,j=r,0!=d&&(0!=b&&p(l),q(j),c.find(".paginator_p_bloc").css("left",-1*u-f+"px")))}function w(a){if(!(t&&"right"==a)&&!(s&&"left"==a)){var b=Math.round(h/10);"left"==a&&(b*=-1);v(b);setTimeout(function(){g+=1;w(a)},20)}}function x(b){if(k){var c=Math.min(Math.abs(a.speed),5),f=Math.min(Math.abs(a.coeffAcceleration),5);a.withAcceleration&&(c=Math.round(c+Math.round(f*g*g/8E4)));"left"==b&&(c*=-1);v(c);setTimeout(function(){g+=1;x(b)},10)}}function A(){var d,e;a.nbVisible=
+Math.min(a.nbVisible,a.nbPages);c.find(".paginator_p_bloc > .paginator_p").remove();for(i=1;i<=a.nbVisible+2;i++)c.find(".paginator_p_bloc").append(b(" "));d=a.nbVisible=0)&&i(t,!n)}}),e(function(){var t=document.body,i=t.appendChild(i=document.createElement("div"));i.offsetHeight,e.extend(i.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),e.support.minHeight=100===i.offsetHeight,e.support.selectstart="onselectstart"in i,t.removeChild(i).style.display="none"}),e("").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function n(t,i,s,n){return e.each(a,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),n&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var a="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,n(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,n(this,t,!0,i)+"px")})}}),e(" ").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),function(){var t=/msie ([\w.]+)/.exec(navigator.userAgent.toLowerCase())||[];e.ui.ie=t.length?!0:!1,e.ui.ie6=6===parseFloat(t[1],10)}(),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i){var s,n=e.plugins[t];if(n&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;n.length>s;s++)e.options[n[s][0]]&&n[s][1].apply(e.element,i)}},contains:e.contains,hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},isOverAxis:function(e,t,i){return e>t&&t+i>e},isOver:function(t,i,s,n,a,r){return e.ui.isOverAxis(t,s,a)&&e.ui.isOverAxis(i,n,r)}}))})(jQuery);(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,o,r,h,l=i.split(".")[0];i=i.split(".")[1],a=l+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[l]=e[l]||{},o=e[l][i],r=e[l][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new r(e,i)},e.extend(r,o,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(t,i){e.isFunction(i)&&(n[t]=function(){var e=function(){return s.prototype[t].apply(this,arguments)},n=function(e){return s.prototype[t].apply(this,e)};return function(){var t,s=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=i.apply(this,arguments),this._super=s,this._superApply=a,t}}())}),r.prototype=e.widget.extend(h,{widgetEventPrefix:o?h.widgetEventPrefix:i},n,{constructor:r,namespace:l,widgetName:i,widgetBaseClass:a,widgetFullName:a}),o?(e.each(o._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,r,i._proto)}),delete o._childConstructors):s._childConstructors.push(r),e.widget.bridge(i,r)},e.widget.extend=function(i){for(var n,a,o=s.call(arguments,1),r=0,h=o.length;h>r;r++)for(n in o[r])a=o[r][n],o[r].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(o){var r="string"==typeof o,h=s.call(arguments,1),l=this;return o=!r&&h.length?e.widget.extend.apply(null,[o].concat(h)):o,r?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[o])&&"_"!==o.charAt(0)?(s=n[o].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+o+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+o+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(o||{})._init():e.data(this,a,new n(o,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetName,this),e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,o,r=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(r={},n=i.split("."),i=n.shift(),n.length){for(a=r[i]=e.widget.extend({},this.options[i]),o=0;n.length-1>o;o++)a[n[o]]=a[n[o]]||{},a=a[n[o]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];r[i]=s}return this._setOptions(r),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,o=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,r){function h(){return i||o.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof r?o[r]:r).apply(o,arguments):t}"string"!=typeof r&&(h.guid=r.guid=r.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+o.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&(e.effects.effect[r]||e.uiBackCompat!==!1&&e.effects[r])?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.uiBackCompat!==!1&&(e.Widget.prototype._getCreateOptions=function(){return e.metadata&&e.metadata.get(this.element[0])[this.widgetName]})})(jQuery);(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.9.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return!e.ui.ie||document.documentMode>=9||t.button?this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted):this._mouseUp(t)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(e){e.widget("ui.draggable",e.ui.mouse,{version:"1.9.2",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){"original"!=this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var i=this.options;return this.helper||i.disabled||e(t.target).is(".ui-resizable-handle")?!1:(this.handle=this._getHandle(t),this.handle?(e(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){e('
').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),i.containment&&this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.options.axis&&"y"==this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"==this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=!1;e.ui.ddmanager&&!this.options.dropBehaviour&&(i=e.ui.ddmanager.drop(this,t)),this.dropped&&(i=this.dropped,this.dropped=!1);for(var s=this.element[0],n=!1;s&&(s=s.parentNode);)s==document&&(n=!0);if(!n&&"original"===this.options.helper)return!1;if("invalid"==this.options.revert&&!i||"valid"==this.options.revert&&i||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,i)){var a=this;e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){a._trigger("stop",t)!==!1&&a._clear()})}else this._trigger("stop",t)!==!1&&this._clear();return!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){var i=this.options.handle&&e(this.options.handle,this.element).length?!1:!0;return e(this.options.handle,this.element).find("*").andSelf().each(function(){this==t.target&&(i=!0)}),i},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"==i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"==i.appendTo?this.element[0].parentNode:i.appendTo),s[0]==this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"==this.cssPosition&&this.scrollParent[0]!=document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&"html"==this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"==this.cssPosition){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t=this.options;if("parent"==t.containment&&(t.containment=this.helper[0].parentNode),("document"==t.containment||"window"==t.containment)&&(this.containment=["document"==t.containment?0:e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,"document"==t.containment?0:e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,("document"==t.containment?0:e(window).scrollLeft())+e("document"==t.containment?document:window).width()-this.helperProportions.width-this.margins.left,("document"==t.containment?0:e(window).scrollTop())+(e("document"==t.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(t.containment)||t.containment.constructor==Array)t.containment.constructor==Array&&(this.containment=t.containment);else{var i=e(t.containment),s=i[0];if(!s)return;i.offset();var n="hidden"!=e(s).css("overflow");this.containment=[(parseInt(e(s).css("borderLeftWidth"),10)||0)+(parseInt(e(s).css("paddingLeft"),10)||0),(parseInt(e(s).css("borderTopWidth"),10)||0)+(parseInt(e(s).css("paddingTop"),10)||0),(n?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(e(s).css("borderLeftWidth"),10)||0)-(parseInt(e(s).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(n?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(e(s).css("borderTopWidth"),10)||0)-(parseInt(e(s).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i}},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"==t?1:-1,n=(this.options,"absolute"!=this.cssPosition||this.scrollParent[0]!=document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent),a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"==this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"==this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i=this.options,s="absolute"!=this.cssPosition||this.scrollParent[0]!=document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,n=/(html|body)/i.test(s[0].tagName),a=t.pageX,r=t.pageY;if(this.originalPosition){var o;if(this.containment){if(this.relative_container){var h=this.relative_container.offset();o=[this.containment[0]+h.left,this.containment[1]+h.top,this.containment[2]+h.left,this.containment[3]+h.top]}else o=this.containment;t.pageX-this.offset.click.left
o[2]&&(a=o[2]+this.offset.click.left),t.pageY-this.offset.click.top>o[3]&&(r=o[3]+this.offset.click.top)}if(i.grid){var l=i.grid[1]?this.originalPageY+Math.round((r-this.originalPageY)/i.grid[1])*i.grid[1]:this.originalPageY;r=o?l-this.offset.click.topo[3]?l-this.offset.click.topo[2]?u-this.offset.click.left=0;u--){var d=s.snapElements[u].left,c=d+s.snapElements[u].width,p=s.snapElements[u].top,f=p+s.snapElements[u].height;if(r>d-a&&c+a>r&&h>p-a&&f+a>h||r>d-a&&c+a>r&&l>p-a&&f+a>l||o>d-a&&c+a>o&&h>p-a&&f+a>h||o>d-a&&c+a>o&&l>p-a&&f+a>l){if("inner"!=n.snapMode){var m=a>=Math.abs(p-l),g=a>=Math.abs(f-h),v=a>=Math.abs(d-o),y=a>=Math.abs(c-r);m&&(i.position.top=s._convertPositionTo("relative",{top:p-s.helperProportions.height,left:0}).top-s.margins.top),g&&(i.position.top=s._convertPositionTo("relative",{top:f,left:0}).top-s.margins.top),v&&(i.position.left=s._convertPositionTo("relative",{top:0,left:d-s.helperProportions.width}).left-s.margins.left),y&&(i.position.left=s._convertPositionTo("relative",{top:0,left:c}).left-s.margins.left)}var b=m||g||v||y;if("outer"!=n.snapMode){var m=a>=Math.abs(p-h),g=a>=Math.abs(f-l),v=a>=Math.abs(d-r),y=a>=Math.abs(c-o);m&&(i.position.top=s._convertPositionTo("relative",{top:p,left:0}).top-s.margins.top),g&&(i.position.top=s._convertPositionTo("relative",{top:f-s.helperProportions.height,left:0}).top-s.margins.top),v&&(i.position.left=s._convertPositionTo("relative",{top:0,left:d}).left-s.margins.left),y&&(i.position.left=s._convertPositionTo("relative",{top:0,left:c-s.helperProportions.width}).left-s.margins.left)}!s.snapElements[u].snapping&&(m||g||v||y||b)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[u].item})),s.snapElements[u].snapping=m||g||v||y||b}else s.snapElements[u].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[u].item})),s.snapElements[u].snapping=!1}}}),e.ui.plugin.add("draggable","stack",{start:function(){var t=e(this).data("draggable").options,i=e.makeArray(e(t.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});if(i.length){var s=parseInt(i[0].style.zIndex)||0;e(i).each(function(e){this.style.zIndex=s+e}),this[0].style.zIndex=s+i.length}}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i){var s=e(i.helper),n=e(this).data("draggable").options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(t,i){var s=e(this).data("draggable").options;s._zIndex&&e(i.helper).css("zIndex",s._zIndex)}})})(jQuery);(function(e){var t=5;e.widget("ui.slider",e.ui.mouse,{version:"1.9.2",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var i,s,n=this.options,a=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),o=" ",r=[];for(this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(n.disabled?" ui-slider-disabled ui-disabled":"")),this.range=e([]),n.range&&(n.range===!0&&(n.values||(n.values=[this._valueMin(),this._valueMin()]),n.values.length&&2!==n.values.length&&(n.values=[n.values[0],n.values[0]])),this.range=e("
").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+("min"===n.range||"max"===n.range?" ui-slider-range-"+n.range:""))),s=n.values&&n.values.length||1,i=a.length;s>i;i++)r.push(o);this.handles=a.add(e(r.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(e){e.preventDefault()}).mouseenter(function(){n.disabled||e(this).addClass("ui-state-hover")}).mouseleave(function(){e(this).removeClass("ui-state-hover")}).focus(function(){n.disabled?e(this).blur():(e(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),e(this).addClass("ui-state-focus"))}).blur(function(){e(this).removeClass("ui-state-focus")}),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)}),this._on(this.handles,{keydown:function(i){var s,n,a,o,r=e(i.target).data("ui-slider-handle-index");switch(i.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case e.ui.keyCode.HOME:a=this._valueMin();break;case e.ui.keyCode.END:a=this._valueMax();break;case e.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/t);break;case e.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/t);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}),this._refreshValue(),this._animateOff=!1},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));n>i&&(n=i,a=e(this),o=t)}),d.range===!0&&this.values(1)===d.min&&(o+=1,a=e(this.handles[o])),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i,!0))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),undefined;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch(e.isArray(this.options.values)&&(n=this.options.values.length),e.Widget.prototype._setOption.apply(this,arguments),t){case"disabled":i?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.prop("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.prop("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))}})})(jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/sample-adapter.html b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/sample-adapter.html
new file mode 100644
index 0000000..266f168
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/sample-adapter.html
@@ -0,0 +1,46 @@
+
+
+
+
+ Grid With jPaginator (Adapter)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/sample.css b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/sample.css
new file mode 100644
index 0000000..182440d
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/sample.css
@@ -0,0 +1,60 @@
+.jPaginator-adapter {
+ height:40px;
+}
+.jPaginator-adapter .o_left {
+ width:22px; height:15px;
+ float:left;
+ background:url(img/btn_precedent.bmp);
+ margin:4px 4px 0 0;
+}
+.jPaginator-adapter .o_right {
+ width:22px; height:15px;
+ float:left;
+ background:url(img/btn_suivant.bmp);
+ margin:4px 0 0 4px;
+}
+.jPaginator-adapter .m_left {
+ cursor:pointer;
+ width:22px; height:15px;
+ float:left;
+ background:url(img/btn_precedent_max.bmp);
+ margin:4px 2px 0 0;
+}
+.jPaginator-adapter .m_right {
+ cursor:pointer;
+ width:22px; height:15px;
+ float:left;
+ background:url(img/btn_suivant_max.bmp);
+ margin:4px 0 0 2px;
+}
+/* must set border width with px */
+.jPaginator-adapter .paginator_p {
+ width:25px;
+ height:18px;
+ font-weight:bold;
+ color: #007edf;
+ background-color:transparent;
+ border:none;
+ line-height:20px;
+}
+.jPaginator-adapter .paginator_p_bloc {
+}
+.jPaginator-adapter .paginator_p:hover {
+ color:white;
+ background-color:#25a29e;
+}
+.jPaginator-adapter .paginator_p.selected {
+ color:white;
+ background-color:#dd5c78;
+}
+.jPaginator-adapter .paginator_slider {
+ background-color:#f2d21b;
+ left:50px;
+}
+.jPaginator-adapter .paginator_slider .ui-slider-handle {
+ width: 4px;
+ height: 9px;
+ top: -4px;
+ background-color:#f18fa8;
+ border: solid 1px black ;
+}
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/sample.html b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/sample.html
new file mode 100644
index 0000000..1ca05b1
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jPaginator/sample.html
@@ -0,0 +1,86 @@
+
+
+
+
+ Grid With jPaginator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/adapter.js b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/adapter.js
new file mode 100644
index 0000000..4385e73
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/adapter.js
@@ -0,0 +1,116 @@
+/**
+ * jqPagination adapter for bsgrid.
+ *
+ * jQuery.bsgrid v1.37 by @Baishui2004
+ * Copyright 2014 Apache v2 License
+ * https://github.com/baishui2004/jquery.bsgrid
+ */
+/**
+ * require common.js, grid.js.
+ *
+ * @author Baishui2004
+ * @Date August 31, 2014
+ */
+$.fn.bsgrid.getCurPage = function (options) {
+ return $('#' + options.pagingId + ' input').data('current-page');
+};
+
+$.fn.bsgrid.refreshPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page($.fn.bsgrid.getCurPage(options));
+};
+
+$.fn.bsgrid.firstPage = function (options) {
+ $('#' + options.pagingId + ' a.first').click();
+};
+
+$.fn.bsgrid.prevPage = function (options) {
+ $('#' + options.pagingId + ' a.previous').click();
+};
+
+$.fn.bsgrid.nextPage = function (options) {
+ $('#' + options.pagingId + ' a.next').click();
+};
+
+$.fn.bsgrid.lastPage = function (options) {
+ $('#' + options.pagingId + ' a.last').click();
+};
+
+$.fn.bsgrid.gotoPage = function (options, goPage) {
+ if (goPage == undefined) {
+ return;
+ }
+ if ($.trim(goPage) == '' || isNaN(goPage)) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.needInteger);
+ }
+ } else if (parseInt(goPage) < 1 || parseInt(goPage) > options.totalPages) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.needRange(1, options.totalPages));
+ }
+ } else {
+ $.fn.bsgrid.getGridObj(options.gridId).page(parseInt(goPage));
+ }
+};
+
+$.fn.bsgrid.initPaging = function (options) {
+ var pagingSb = new StringBuilder();
+ pagingSb.append('');
+ $('#' + options.pagingOutTabId + ' td').append(pagingSb.toString());
+
+ $('#' + options.pagingId).jqPagination({
+ current_page: 1,
+ link_string: '#',
+ // max_page: null,
+ // page_string: 'Page {current_page} of {max_page}',
+ /**
+ * The paged callback is called when a valid page request has been made, the page variable simply contains the page requested.
+ */
+ paged: function (page) {
+ // do something with the page variable
+ $.fn.bsgrid.getGridObj(options.gridId).page(parseInt(page));
+ }
+ });
+};
+
+$.fn.bsgrid.setPagingValues = function (options) {
+ var curPage = options.curPage;
+ var totalRows = options.totalRows;
+ var totalPages = parseInt(totalRows / options.settings.pageSize);
+ totalPages = parseInt((totalRows % options.settings.pageSize == 0) ? totalPages : totalPages + 1);
+
+ $('#' + options.pagingId).data('jqPagination').options.current_page = curPage;
+ $('#' + options.pagingId).data('jqPagination').options.max_page = totalPages;
+ var page_string = $('#' + options.pagingId).data('jqPagination').options.page_string;
+ page_string = page_string.replace('{current_page}', curPage).replace('{max_page}', totalPages + '');
+ $('#' + options.pagingId + ' input').data('current-page', curPage).data('max-page', totalPages).val(page_string);
+ $('#' + options.pagingId).data('jqPagination').setLinks(curPage);
+
+ // page size select
+ if (options.settings.pageSizeSelect) {
+ $('#' + options.pagingId + '_pageSize').remove();
+ $('#' + options.pagingId).prepend(' ');
+ var optionsSb = new StringBuilder();
+ for (var i = 0; i < options.settings.pageSizeForGrid.length; i++) {
+ var pageVal = options.settings.pageSizeForGrid[i];
+ optionsSb.append('' + pageVal + ' ');
+ }
+ $('#' + options.pagingId + '_pageSize').html(optionsSb.toString()).val(options.settings.pageSize);
+ // select change event
+ $('#' + options.pagingId + '_pageSize').change(function () {
+ options.settings.pageSize = parseInt($(this).val());
+ $(this).trigger('blur');
+ // if change pageSize, then page first
+ if (options.curPage == 1) {
+ $.fn.bsgrid.refreshPage(options);
+ } else {
+ $.fn.bsgrid.gotoPage(options, 1);
+ }
+ });
+ }
+};
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/css/jqpagination.css b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/css/jqpagination.css
new file mode 100644
index 0000000..86f0bd8
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/css/jqpagination.css
@@ -0,0 +1,86 @@
+.pagination {
+ display: inline-block;
+ border: 1px solid #CDCDCD;
+ border-radius: 3px; }
+
+.pagination a {
+ display: block;
+ float: left;
+ width: 20px;
+ height: 20px;
+ outline: none;
+ border-right: 1px solid #CDCDCD;
+ border-left: 1px solid #CDCDCD;
+ color: #555555;
+ vertical-align: middle;
+ text-align: center;
+ text-decoration: none;
+ font-weight: bold;
+ font-size: 16px;
+ font-family: Times, 'Times New Roman', Georgia, Palatino;
+ /* ATTN: need a better font stack */
+ background-color: #f3f3f3;
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f3f3f3), color-stop(100%, lightgrey));
+ background-image: -webkit-linear-gradient(#f3f3f3, lightgrey);
+ background-image: linear-gradient(#f3f3f3, lightgrey); }
+ .pagination a:hover, .pagination a:focus, .pagination a:active {
+ background-color: #cecece;
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e4e4e4), color-stop(100%, #cecece));
+ background-image: -webkit-linear-gradient(#e4e4e4, #cecece);
+ background-image: linear-gradient(#e4e4e4, #cecece); }
+ .pagination a.disabled, .pagination a.disabled:hover, .pagination a.disabled:focus, .pagination a.disabled:active {
+ background-color: #f3f3f3;
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f3f3f3), color-stop(100%, lightgrey));
+ background-image: -webkit-linear-gradient(#f3f3f3, lightgrey);
+ background-image: linear-gradient(#f3f3f3, lightgrey);
+ color: #A8A8A8;
+ cursor: default; }
+
+.pagination a:first-child {
+ border: none;
+ border-radius: 2px 0 0 2px; }
+
+.pagination a:last-child {
+ border: none;
+ border-radius: 0 2px 2px 0; }
+
+.pagination input {
+ float: left;
+ margin: 0;
+ padding: 0;
+ width: 120px;
+ height: 20px;
+ outline: none;
+ border: none;
+ vertical-align: middle;
+ text-align: center; }
+
+/* gigantic class for demo purposes */
+.gigantic.pagination {
+ margin: 30px 0; }
+
+.gigantic.pagination a {
+ height: 60px;
+ width: 60px;
+ font-size: 50px;
+ line-height: 50px; }
+
+.gigantic.pagination input {
+ width: 300px;
+ height: 60px;
+ font-size: 30px; }
+
+/* log element for demo purposes */
+.log {
+ display: none;
+ background-color: #EDEDED;
+ border: 1px solid #B4B4B4;
+ height: 300px;
+ width: 524px;
+ overflow: auto;
+ margin-left: 0;
+ list-style: none;
+ padding: 10px; }
+ .log li {
+ margin-top: 0;
+ margin-bottom: 5px; }
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/js/jquery.jqpagination.min.js b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/js/jquery.jqpagination.min.js
new file mode 100644
index 0000000..639a4fb
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/js/jquery.jqpagination.min.js
@@ -0,0 +1,22 @@
+/*!
+ * jqPagination, a jQuery pagination plugin (obviously)
+ * Version: 1.4 (26th July 2013)
+ *
+ * Copyright (C) 2013 Ben Everard
+ *
+ * http://beneverard.github.com/jqPagination
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */(function(e){"use strict";e.jqPagination=function(t,n){var r=this;r.$el=e(t);r.el=t;r.$input=r.$el.find("input");r.$el.data("jqPagination",r);r.init=function(){r.options=e.extend({},e.jqPagination.defaultOptions,n);r.options.max_page===null&&(r.$input.data("max-page")!==undefined?r.options.max_page=r.$input.data("max-page"):r.options.max_page=1);r.$input.data("current-page")!==undefined&&r.isNumber(r.$input.data("current-page"))&&(r.options.current_page=r.$input.data("current-page"));r.$input.removeAttr("readonly");r.updateInput(!0);r.$input.on("focus.jqPagination mouseup.jqPagination",function(t){if(t.type==="focus"){var n=parseInt(r.options.current_page,10);e(this).val(n).select()}if(t.type==="mouseup")return!1});r.$input.on("blur.jqPagination keydown.jqPagination",function(t){var n=e(this),i=parseInt(r.options.current_page,10);if(t.keyCode===27){n.val(i);n.blur()}t.keyCode===13&&n.blur();t.type==="blur"&&r.setPage(n.val())});r.$el.on("click.jqPagination","a",function(t){var n=e(this);if(n.hasClass("disabled"))return!1;if(!t.metaKey&&!t.ctrlKey){t.preventDefault();r.setPage(n.data("action"))}})};r.setPage=function(e,t){if(e===undefined)return r.options.current_page;var n=parseInt(r.options.current_page,10),i=parseInt(r.options.max_page,10);if(isNaN(parseInt(e,10)))switch(e){case"first":e=1;break;case"prev":case"previous":e=n-1;break;case"next":e=n+1;break;case"last":e=i}e=parseInt(e,10);if(isNaN(e)||e<1||e>i){r.setInputValue(n);return!1}r.options.current_page=e;r.$input.data("current-page",e);r.updateInput(t)};r.setMaxPage=function(e,t){if(e===undefined)return r.options.max_page;if(!r.isNumber(e)){console.error("jqPagination: max_page is not a number");return!1}if(ei&&(o=i);r.$el.find("a.first").attr("href",t.replace("{page_number}","1"));r.$el.find("a.prev, a.previous").attr("href",t.replace("{page_number}",s));r.$el.find("a.next").attr("href",t.replace("{page_number}",o));r.$el.find("a.last").attr("href",t.replace("{page_number}",i))}r.$el.find("a").removeClass("disabled");n===i&&r.$el.find(".next, .last").addClass("disabled");n===1&&r.$el.find(".previous, .first").addClass("disabled")};r.callMethod=function(t,n,i){switch(t.toLowerCase()){case"option":if(i===undefined&&typeof n!="object")return r.options[n];var s={trigger:!0},o=!1;e.isPlainObject(n)&&!i?e.extend(s,n):s[n]=i;var u=s.trigger===!1;s.current_page!==undefined&&(o=r.setPage(s.current_page,u));s.max_page!==undefined&&(o=r.setMaxPage(s.max_page,u));o===!1&&console.error("jqPagination: cannot get / set option "+n);return o;case"destroy":r.$el.off(".jqPagination").find("*").off(".jqPagination");break;default:console.error('jqPagination: method "'+t+'" does not exist');return!1}};r.init()};e.jqPagination.defaultOptions={current_page:1,link_string:"",max_page:null,page_string:"Page {current_page} of {max_page}",paged:function(){}};e.fn.jqPagination=function(){var t=this,n=e(t),r=Array.prototype.slice.call(arguments),i=!1;if(typeof r[0]=="string"){r[2]===undefined?i=n.first().data("jqPagination").callMethod(r[0],r[1]):n.each(function(){i=e(this).data("jqPagination").callMethod(r[0],r[1],r[2])});return i}t.each(function(){new e.jqPagination(this,r[0])})}})(jQuery);if(!console){var console={},func=function(){return!1};console.log=func;console.info=func;console.warn=func;console.error=func};
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/sample-adapter.html b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/sample-adapter.html
new file mode 100644
index 0000000..2d1756d
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/sample-adapter.html
@@ -0,0 +1,45 @@
+
+
+
+
+ Grid With jqPagination (Adapter)
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/sample.html b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/sample.html
new file mode 100644
index 0000000..6eac1b8
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jqPagination/sample.html
@@ -0,0 +1,79 @@
+
+
+
+
+ Grid With jqPagination
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jquery-1.6.4.min.js b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jquery-1.6.4.min.js
new file mode 100644
index 0000000..628ed9b
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jquery-1.6.4.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
+(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;ca ",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j =0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c ",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=" ",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="
";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,""," "],thead:[1,""],tr:[2,""],td:[3,""],col:[2,""],area:[1,""," "],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>$2>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jquery_pagination/sample.html b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jquery_pagination/sample.html
new file mode 100644
index 0000000..8217ea3
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/jquery_pagination/sample.html
@@ -0,0 +1,70 @@
+
+
+
+
+ Grid With jquery_pagination
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/readme b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/readme
new file mode 100644
index 0000000..2cb0467
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/readme
@@ -0,0 +1,64 @@
+1, jqPagination Require jQuery 1.7.2+
+Website: http://beneverard.github.io/jqPagination/
+Source: https://github.com/beneverard/jqPagination/
+License: GPL v3
+Version: Version bump (1.4) Commit: 33b19cb
+
+With bsgrid(use adapter.js), Not Support properties: pagingBtnClass
+ Multi Pagination Support: Yes
+
+
+
+2, jquery_pagination Require jQuery 1.4.2+
+Source: https://github.com/gbirke/jquery_pagination/
+License: GPL v2
+Version: v2.2.1
+
+With bsgrid(use adapter.js), Not Support properties: pagingToolbarAlign, pagingBtnClass
+ Multi Pagination Support: Yes
+
+
+
+3, jPaginate Require jQuery 1.3.2+
+Website: http://tympanus.net/codrops/2009/11/17/jpaginate-a-fancy-jquery-pagination-plugin/
+Demo: http://tympanus.net/jPaginate/
+Source: http://tympanus.net/jPaginate/jPaginate.zip
+License: None
+Version: 2009-12-09 15:40
+
+With bsgrid(use adapter.js), Not Support properties: pagingToolbarAlign, pagingBtnClass
+ Multi Pagination Support: Yes
+
+
+
+4, jPages Require jQuery 1.8+, Client side pagination with jQuery and CSS3
+Website: http://luis-almeida.github.io/jPages/
+Source: https://github.com/luis-almeida/jPages/
+License: MIT
+Version: v0.7 (21.10.2012) Commit: b6a51c9
+
+With bsgrid(use adapter.js), Not Support properties: pagingBtnClass
+ Multi Pagination Support: Yes
+
+
+
+5, smartpaginator Require jQuery 1.4.4+
+Website: http://www.egrappler.com/jquery-pagination-plugin-smart-paginator/
+Demo: http://www.egrappler.com/contents/smartpaginator/demo/smartpaginator.htm
+Source: http://www.egrappler.com/contents/smartpaginator/source/smartpaginator.zip
+License: GPL
+Version: 2012-02-23
+
+With bsgrid(use adapter.js), Not Support properties: pagingBtnClass
+ Multi Pagination Support: Yes
+
+
+
+6, jPaginator Require jQuery 1.6+ , jQuery UI 1.9.1+
+Website: http://remylab.github.io/jpaginator/
+Source: https://github.com/remylab/jpaginator/
+License: MIT
+Version: Sep 14, 2013 Commit: 81685b0
+
+With bsgrid(use adapter.js), Not Support properties: pageSizeSelect, pageSizeForGrid, pagingToolbarAlign, pagingBtnClass
+ Multi Pagination Support: Yes
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/adapter.js b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/adapter.js
new file mode 100644
index 0000000..72c693c
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/adapter.js
@@ -0,0 +1,114 @@
+/**
+ * smartpaginator adapter for bsgrid.
+ *
+ * jQuery.bsgrid v1.37 by @Baishui2004
+ * Copyright 2014 Apache v2 License
+ * https://github.com/baishui2004/jquery.bsgrid
+ */
+/**
+ * require common.js, grid.js.
+ *
+ * @author Baishui2004
+ * @Date September 1, 2014
+ */
+$.fn.bsgrid.getCurPage = function (options) {
+ return options.curPage;
+};
+
+$.fn.bsgrid.refreshPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page($.fn.bsgrid.getCurPage(options));
+};
+
+$.fn.bsgrid.firstPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page(1);
+};
+
+$.fn.bsgrid.prevPage = function (options) {
+ var curPage = $.fn.bsgrid.getCurPage(options);
+ if (curPage <= 1) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.isFirstPage);
+ }
+ return;
+ }
+ $.fn.bsgrid.getGridObj(options.gridId).page(curPage - 1);
+};
+
+$.fn.bsgrid.nextPage = function (options) {
+ var curPage = $.fn.bsgrid.getCurPage(options);
+ if (curPage >= options.totalPages) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.isLastPage);
+ }
+ return;
+ }
+ $.fn.bsgrid.getGridObj(options.gridId).page(curPage + 1);
+};
+
+$.fn.bsgrid.lastPage = function (options) {
+ $.fn.bsgrid.getGridObj(options.gridId).page(options.totalPages);
+};
+
+$.fn.bsgrid.gotoPage = function (options, goPage) {
+ if (goPage == undefined) {
+ return;
+ }
+ if ($.trim(goPage) == '' || isNaN(goPage)) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.needInteger);
+ }
+ } else if (parseInt(goPage) < 1 || parseInt(goPage) > options.totalPages) {
+ if (options.settings.pageIncorrectTurnAlert) {
+ alert($.bsgridLanguage.needRange(1, options.totalPages));
+ }
+ } else {
+ $.fn.bsgrid.getGridObj(options.gridId).page(goPage);
+ }
+};
+
+$.fn.bsgrid.initPaging = function (options) {
+ $('#' + options.pagingOutTabId + ' td').append('
');
+};
+
+$.fn.bsgrid.setPagingValues = function (options) {
+ $('#' + options.pagingId).smartpaginator({
+ totalrecords: options.totalRows,
+ recordsperpage: options.settings.pageSize,
+ initval: options.curPage,
+ // length: 10, // display page number length
+ theme: 'green', // 'red', 'green', 'black'
+ controlsalways: true,
+ // display: 'double', // 'double', display page input and goto page button; 'single', hide page input and goto page button
+ first: $.bsgridLanguage.pagingToolbar.firstPage, // 'First'
+ prev: $.bsgridLanguage.pagingToolbar.prevPage, // 'Prev'
+ next: $.bsgridLanguage.pagingToolbar.nextPage, // 'Next'
+ last: $.bsgridLanguage.pagingToolbar.lastPage, // 'Last'
+ go: $.bsgridLanguage.pagingToolbar.gotoPage, //'Go'
+ onchange: function (newPage) {
+ $.fn.bsgrid.getGridObj(options.gridId).page(newPage);
+ }
+ });
+
+ // page size select
+ if (options.settings.pageSizeSelect) {
+ $('#' + options.pagingId + '_pageSize').remove();
+ $('#' + options.pagingId).prepend(' ');
+ var optionsSb = new StringBuilder();
+ for (var i = 0; i < options.settings.pageSizeForGrid.length; i++) {
+ var pageVal = options.settings.pageSizeForGrid[i];
+ optionsSb.append('' + pageVal + ' ');
+ }
+ $('#' + options.pagingId + '_pageSize').html(optionsSb.toString()).val(options.settings.pageSize);
+ // select change event
+ $('#' + options.pagingId + '_pageSize').change(function () {
+ options.settings.pageSize = parseInt($(this).val());
+ $(this).trigger('blur');
+ // if change pageSize, then page first
+ if (options.curPage == 1) {
+ $.fn.bsgrid.refreshPage(options);
+ } else {
+ $.fn.bsgrid.gotoPage(options, 1);
+ }
+ });
+ }
+};
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/css/smartpaginator.css b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/css/smartpaginator.css
new file mode 100644
index 0000000..e7b4641
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/css/smartpaginator.css
@@ -0,0 +1,146 @@
+.pager
+{
+ width: 720px;
+ height: 30px;
+ padding: 0;
+ margin: 0;
+ padding-top: 10px;
+ padding-left: 10px; /*border-radius: 8px; -moz-border-radius: 8px;*/
+}
+.pager div.short
+{
+ float: right;
+ margin: 0;
+ padding: 0;
+ margin-right: 10px;
+ width: 74px;
+}
+.pager div.short input
+{
+ width: 28px;
+ height: 18px;
+ border: none;
+ margin-left: 8px;
+ float: left;
+}
+.pager ul
+{
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ float: left;
+ margin-right: 4px;
+}
+.pager ul li
+{
+ display: inline;
+ margin-left: 2px;
+}
+.pager ul li a
+{
+ text-decoration: none;
+ display: inline-table;
+ width: 20px;
+ height: 20px;
+ text-align: center;
+ border-radius: 4px;
+ -moz-border-radius: 4px;
+}
+
+.pager span
+{
+ margin-left: 4px;
+ color: White;
+ float: left;
+}
+.pager .btn
+{
+ display: block;
+ width: 40px;
+ text-align: center;
+ float: left;
+ padding: 0;
+ margin: 0;
+ margin-left: 4px;
+ cursor: pointer;
+ border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -o-user-select: none;
+ user-select: none;
+}
+.pager .disabled
+{
+ color: #A0A0A0 !important;
+ text-shadow: 1px 1px 1px #FFFFFF;
+}
+/*green*/.green
+{
+ background-color: #4f7305;
+}
+.green.normal
+{
+ background-color: #588500;
+ color: White;
+ border: solid 1px #5f9000;
+}
+.green.active
+{
+ background-color: #344C00;
+ color: #F8EB00;
+ border: solid 1px #5f9000;
+}
+.pager.green .btn
+{
+ background-color: #588500;
+ color: White;
+ border: solid 1px #5f9000;
+}
+/*black*/.black
+{
+ background-color: #202020;
+}
+.black.normal
+{
+ background-color: #1d1d1d;
+ color: #B0D551;
+ border: solid 1px #000;
+}
+.black.active
+{
+ background-color: #333333;
+ color: White;
+ border: solid 1px #000;
+}
+.pager.black .btn
+{
+ background-color: #1d1d1d;
+ color: White;
+ border: solid 1px #000;
+}
+/*red*/.red
+{
+ background-color: #D50B07;
+}
+.red.normal
+{
+ background-color: #E71C18;
+ color: White;
+ border: solid 1px #F82723;
+}
+.red.active
+{
+ background-color: #C00D09;
+ color: White;
+ border: solid 1px #A90B08;
+}
+.pager.red .btn
+{
+ background-color: #E71C18;
+ color: White;
+ border: solid 1px #F82723;
+}
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/js/smartpaginator.js b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/js/smartpaginator.js
new file mode 100644
index 0000000..04fd762
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/js/smartpaginator.js
@@ -0,0 +1,235 @@
+(function ($) {
+ $.fn.extend({
+ smartpaginator: function (options) {
+ var settings = $.extend({
+ totalrecords: 0,
+ recordsperpage: 0,
+ length: 10,
+ next: 'Next',
+ prev: 'Prev',
+ first: 'First',
+ last: 'Last',
+ go: 'Go',
+ theme: 'green',
+ display: 'double',
+ initval: 1,
+ datacontainer: '', //data container id
+ dataelement: '', //children elements to be filtered e.g. tr or div
+ onchange: null,
+ controlsalways: false
+ }, options);
+ return this.each(function () {
+ var currentPage = 0;
+ var startPage = 0;
+ var totalpages = parseInt(settings.totalrecords / settings.recordsperpage);
+ if (settings.totalrecords % settings.recordsperpage > 0) totalpages++;
+ var initialized = false;
+ var container = $(this).addClass('pager').addClass(settings.theme);
+ container.find('ul').remove();
+ container.find('div').remove();
+ container.find('span').remove();
+ var dataContainer;
+ var dataElements;
+ if (settings.datacontainer != '') {
+ dataContainer = $('#' + settings.datacontainer);
+ dataElements = $('' + settings.dataelement + '', dataContainer);
+ }
+ var list = $('');
+ var btnPrev = $('
').text(settings.prev).click(function () { if ($(this).hasClass('disabled')) return false; currentPage = parseInt(list.find('li a.active').text()) - 1; navigate(--currentPage); }).addClass('btn');
+ var btnNext = $('
').text(settings.next).click(function () { if ($(this).hasClass('disabled')) return false; currentPage = parseInt(list.find('li a.active').text()); navigate(currentPage); }).addClass('btn');
+ var btnFirst = $('
').text(settings.first).click(function () { if ($(this).hasClass('disabled')) return false; currentPage = 0; navigate(0); }).addClass('btn');
+ var btnLast = $('
').text(settings.last).click(function () { if ($(this).hasClass('disabled')) return false; currentPage = totalpages - 1; navigate(currentPage); }).addClass('btn');
+ var inputPage = $(' ').attr('type', 'text').keydown(function (e) {
+ if (isTextSelected(inputPage)) inputPage.val('');
+ if (e.which >= 48 && e.which < 58) {
+ var value = parseInt(inputPage.val() + (e.which - 48));
+ if (!(value > 0 && value <= totalpages)) e.preventDefault();
+ } else if (!(e.which == 8 || e.which == 46)) e.preventDefault();
+ });
+ var btnGo = $(' ').attr('type', 'button').attr('value', settings.go).addClass('btn').click(function () { if (inputPage.val() == '') return false; else { currentPage = parseInt(inputPage.val()) - 1; navigate(currentPage); } });
+ container.append(btnFirst).append(btnPrev).append(list).append(btnNext).append(btnLast).append($('
').addClass('short').append(inputPage).append(btnGo));
+ if (settings.display == 'single') {
+ btnGo.css('display', 'none');
+ inputPage.css('display', 'none');
+ }
+ buildNavigation(startPage);
+ if (settings.initval == 0) settings.initval = 1;
+ currentPage = settings.initval - 1;
+ navigate(currentPage);
+ initialized = true;
+ function showLabels(pageIndex) {
+ container.find('span').remove();
+ var upper = (pageIndex + 1) * settings.recordsperpage;
+ if (upper > settings.totalrecords) upper = settings.totalrecords;
+ container.append($(' ').append($(' ').text(pageIndex * settings.recordsperpage + 1)))
+ .append($(' ').text('-'))
+ .append($(' ').append($(' ').text(upper)))
+ .append($(' ').text('of'))
+ .append($(' ').append($(' ').text(settings.totalrecords)));
+ }
+ function buildNavigation(startPage) {
+ list.find('li').remove();
+ if (settings.totalrecords <= settings.recordsperpage) return;
+ for (var i = startPage; i < startPage + settings.length; i++) {
+ if (i == totalpages) break;
+ list.append($(' ')
+ .append($('').attr('id', (i + 1)).addClass(settings.theme).addClass('normal')
+ .attr('href', 'javascript:void(0)')
+ .text(i + 1))
+ .click(function () {
+ currentPage = startPage + $(this).closest('li').prevAll().length;
+ navigate(currentPage);
+ }));
+ }
+ showLabels(startPage);
+ inputPage.val((startPage + 1));
+ list.find('li a').addClass(settings.theme).removeClass('active');
+ list.find('li:eq(0) a').addClass(settings.theme).addClass('active');
+ //set width of paginator
+ var sW = list.find('li:eq(0) a').outerWidth() + (parseInt(list.find('li:eq(0)').css('margin-left')) * 2);
+ var width = sW * list.find('li').length;
+ list.css({ width: width });
+ showRequiredButtons(startPage);
+ }
+ function navigate(topage) {
+ //make sure the page in between min and max page count
+ var index = topage;
+ var mid = settings.length / 2;
+ if (settings.length % 2 > 0) mid = (settings.length + 1) / 2;
+ var startIndex = 0;
+ if (topage >= 0 && topage < totalpages) {
+ if (topage >= mid) {
+ if (totalpages - topage > mid)
+ startIndex = topage - (mid - 1);
+ else if (totalpages > settings.length)
+ startIndex = totalpages - settings.length;
+ }
+ buildNavigation(startIndex); showLabels(currentPage);
+ list.find('li a').removeClass('active');
+ inputPage.val(currentPage + 1);
+ list.find('li a[id="' + (index + 1) + '"]').addClass('active');
+ var recordStartIndex = currentPage * settings.recordsperpage;
+ var recordsEndIndex = recordStartIndex + settings.recordsperpage;
+ if (recordsEndIndex > settings.totalrecords)
+ recordsEndIndex = settings.totalrecords % recordsEndIndex;
+ if (initialized) {
+ if (settings.onchange != null) {
+ settings.onchange((currentPage + 1), recordStartIndex, recordsEndIndex);
+ }
+ }
+ if (dataContainer != null) {
+ if (dataContainer.length > 0) {
+ //hide all elements first
+ dataElements.css('display', 'none');
+ //display elements that need to be displayed
+ if ($(dataElements[0]).find('th').length > 0) { //if there is a header, keep it visible always
+ $(dataElements[0]).css('display', '');
+ recordStartIndex++;
+ recordsEndIndex++;
+ }
+ for (var i = recordStartIndex; i < recordsEndIndex; i++)
+ $(dataElements[i]).css('display', '');
+ }
+ }
+
+ showRequiredButtons();
+ }
+ }
+ function showRequiredButtons() {
+ if (totalpages > settings.length) {
+ if (currentPage > 0) {
+ if (!settings.controlsalways) {
+ btnPrev.css('display', '');
+ }
+ else {
+ btnPrev.css('display', '').removeClass('disabled');
+ }
+ }
+ else {
+ if (!settings.controlsalways) {
+ btnPrev.css('display', 'none');
+ }
+ else {
+ btnPrev.css('display', '').addClass('disabled');
+ }
+ }
+ if (currentPage > settings.length / 2 - 1) {
+ if (!settings.controlsalways) {
+ btnFirst.css('display', '');
+ }
+ else {
+ btnFirst.css('display', '').removeClass('disabled');
+ }
+ }
+ else {
+ if (!settings.controlsalways) {
+ btnFirst.css('display', 'none');
+ }
+ else {
+ btnFirst.css('display', '').addClass('disabled');
+ }
+ }
+
+ if (currentPage == totalpages - 1) {
+ if (!settings.controlsalways) {
+ btnNext.css('display', 'none');
+ }
+ else {
+ btnNext.css('display', '').addClass('disabled');
+ }
+ }
+ else {
+ if (!settings.controlsalways) {
+ btnNext.css('display', '');
+ }
+ else {
+ btnNext.css('display', '').removeClass('disabled');
+ }
+ }
+ if (totalpages > settings.length && currentPage < (totalpages - (settings.length / 2)) - 1) {
+ if (!settings.controlsalways) {
+ btnLast.css('display', '');
+ }
+ else {
+ btnLast.css('display', '').removeClass('disabled');
+ }
+ }
+ else {
+ if (!settings.controlsalways) {
+ btnLast.css('display', 'none');
+ }
+ else {
+ btnLast.css('display', '').addClass('disabled');
+ }
+ };
+ }
+ else {
+ if (!settings.controlsalways) {
+ btnFirst.css('display', 'none');
+ btnPrev.css('display', 'none');
+ btnNext.css('display', 'none');
+ btnLast.css('display', 'none');
+ }
+ else {
+ btnFirst.css('display', '').addClass('disabled');
+ btnPrev.css('display', '').addClass('disabled');
+ btnNext.css('display', '').addClass('disabled');
+ btnLast.css('display', '').addClass('disabled');
+ }
+ }
+ }
+ function isTextSelected(el) {
+ var startPos = el.get(0).selectionStart;
+ var endPos = el.get(0).selectionEnd;
+ var doc = document.selection;
+ if (doc && doc.createRange().text.length != 0) {
+ return true;
+ } else if (!doc && el.val().substring(startPos, endPos).length != 0) {
+ return true;
+ }
+ return false;
+ }
+ });
+ }
+ });
+})(jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/sample-adapter.html b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/sample-adapter.html
new file mode 100644
index 0000000..4d3ba36
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/sample-adapter.html
@@ -0,0 +1,45 @@
+
+
+
+
+ Grid With smartpaginator (Adapter)
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/sample.html b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/sample.html
new file mode 100644
index 0000000..d7e3039
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/pagination/smartpaginator/sample.html
@@ -0,0 +1,69 @@
+
+
+
+
+ Grid With smartpaginator
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/paging/image_loop-baidu_baijia.html b/public/static/admin_static/lib/jquery.bsgrid/examples/paging/image_loop-baidu_baijia.html
new file mode 100644
index 0000000..2aa369d
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/paging/image_loop-baidu_baijia.html
@@ -0,0 +1,171 @@
+
+
+
+
+ Image Loop (Baidu Baijia)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/paging/image_loop-baidu_news.html b/public/static/admin_static/lib/jquery.bsgrid/examples/paging/image_loop-baidu_news.html
new file mode 100644
index 0000000..dec2bc8
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/paging/image_loop-baidu_news.html
@@ -0,0 +1,139 @@
+
+
+
+
+ Image Loop (Baidu News)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/paging/least.html b/public/static/admin_static/lib/jquery.bsgrid/examples/paging/least.html
new file mode 100644
index 0000000..6ad33a8
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/paging/least.html
@@ -0,0 +1,70 @@
+
+
+
+
+ Least Paging
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <--
+
+
+ -->
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/paging/simple.html b/public/static/admin_static/lib/jquery.bsgrid/examples/paging/simple.html
new file mode 100644
index 0000000..6b1a561
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/paging/simple.html
@@ -0,0 +1,45 @@
+
+
+
+
+ Simple Paging
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/paging/simple.little.html b/public/static/admin_static/lib/jquery.bsgrid/examples/paging/simple.little.html
new file mode 100644
index 0000000..2acd77b
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/paging/simple.little.html
@@ -0,0 +1,46 @@
+
+
+
+
+ Simple Little Paging
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/test/dom-load.html b/public/static/admin_static/lib/jquery.bsgrid/examples/test/dom-load.html
new file mode 100644
index 0000000..e288273
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/test/dom-load.html
@@ -0,0 +1,129 @@
+
+
+
+
+ Dom Load Test
+
+
+
+
+times:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XH
+ ID
+ CHAR
+ TEXT
+ DATE
+ TIME
+ NUM
+ Operate
+
+
+
+
+ 2600
+ -2499
+ char_2599
+ TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TEXT_TE...
+ 2012-12-12 15:01:01
+ 15:01:01
+ 25990
+ Operate
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/util/util.html b/public/static/admin_static/lib/jquery.bsgrid/examples/util/util.html
new file mode 100644
index 0000000..d6d4021
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/util/util.html
@@ -0,0 +1,63 @@
+
+
+
+
+ Util
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/static/admin_static/lib/jquery.bsgrid/examples/zh-CN.html b/public/static/admin_static/lib/jquery.bsgrid/examples/zh-CN.html
new file mode 100644
index 0000000..cffc0cd
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/examples/zh-CN.html
@@ -0,0 +1,270 @@
+
+
+
+
+示例索引 - jQuery.bsgrid
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/index.html b/public/static/admin_static/lib/jquery.bsgrid/index.html
new file mode 100644
index 0000000..d63d5a7
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/index.html
@@ -0,0 +1,311 @@
+
+
+
+
+ jQuery.bsgrid - 简单实用、功能丰富、易扩展的jQuery Grid插件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Menu
+
+
jQuery.bsgrid
+
+
+ 支持json、xml数据格式,皮肤丰富并且容易定制,支持表格编辑、本地数据、导出参数构建等实用便捷的功能,容易扩展,更拥有丰富的示例以及问题反馈的及时响应。
+
+
+
+
+
+ 协议:Apache Licence 2
+
+
+ 依赖:jQuery 1.4.4 ~~ jQuery 1.12.2
+
+
+ 支持:IE6+、Chrome、Firefox等
+
+
+
+
+ QQ群交流:254754154
+
+
+ 捐助:支持长远发展,感谢您的认可!
+
+
+
+
+
+
+
+
引用文件
+ 引用文件:builds/merged/bsgrid.all.min.css CSS样式(包含默认皮肤样式)
+
+ builds/js/lang/grid.zh-CN.min.js JS本地化脚本(builds/js/lang/grid.*.min.js)
+
+ builds/merged/bsgrid.all.min.js JS脚本
+
+ 可选皮肤:builds/css/skins/grid_*.min.css CSS皮肤(需引用于bsgrid.all.min.css之后)
+
+ 图标资源:builds/images/
+
+ 其他说明:builds目录下未列出的文件无需引入项目中
+
+
+
+
+
+引用文件:
+ <link rel="stylesheet" href="../../builds/merged/bsgrid.all.min.css"/>
+ <script type="text/javascript" src="../../plugins/jquery-1.4.4.min.js"></script>
+ <script type="text/javascript" src="../../builds/js/lang/grid.zh-CN.min.js"></script>
+ <script type="text/javascript" src="../../builds/merged/bsgrid.all.min.js"></script>
+实现代码:
+ <table id="searchTable">
+ <tr>
+ <th w_index="XH" width="5%;">XH</th>
+ <th w_index="ID" width="5%;">ID</th>
+ <th w_index="CHAR" w_align="left" width="15%;">CHAR</th>
+ <th w_index="TEXT" w_align="left" width="30%;">TEXT</th>
+ <th w_index="DATE" width="15%;">DATE</th>
+ <th w_index="TIME" width="15%;">TIME</th>
+ <th w_index="NUM" width="5%;">NUM</th>
+ <th w_render="operate" width="10%;">Operate</th>
+ </tr>
+ </table>
+ <script type="text/javascript">
+ var gridObj;
+ $(function () {
+ gridObj = $.fn.bsgrid.init('searchTable', {
+ url: 'data/json.jsp',
+ // autoLoad: false,
+ pageSizeSelect: true,
+ pageSize: 10
+ });
+ });
+
+ function operate(record, rowIndex, colIndex, options) {
+ return '<a href="#" onclick="alert(\'ID=' + gridObj.getRecordIndexValue(record, 'ID') + '\');">Operate</a>';
+ }
+ </script>
+数据格式参考:simple.json
+
+
带参数查询
+
+ function doSearch() {
+ // 提供以下三种带参数方式,可任选其中任意一种
+ var searchParames = $('#searchForm').serializeArray(); // jQuery推荐方式
+ // searchParames = 'param1=val1¶m2=val2';
+ // searchParames = {'param1': 'val1', 'param2': 'val2'};
+ gridObj.search(searchParames);
+ }
+示例:带参数查询表格
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/artDialog.plugins.min.js b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/artDialog.plugins.min.js
new file mode 100644
index 0000000..fe1e2e8
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/artDialog.plugins.min.js
@@ -0,0 +1 @@
+(function(c){c.alert=c.dialog.alert=function(b,a){return c.dialog({id:"Alert",fixed:!0,lock:!0,content:b,ok:!0,beforeunload:a})};c.confirm=c.dialog.confirm=function(b,a,m){return c.dialog({id:"Confirm",fixed:!0,lock:!0,content:b,ok:a,cancel:m})};c.prompt=c.dialog.prompt=function(b,a,m){var d;return c.dialog({id:"Prompt",fixed:!0,lock:!0,content:['',b,'
'].join(""),initialize:function(){d=this.dom.content.find(".d-input-text")[0];d.select();d.focus()},ok:function(){return a&&a.call(this,d.value)},cancel:function(){}})};c.dialog.prototype.shake=function(){var b=function(a,b,c){var h=+new Date,e=setInterval(function(){var f=(+new Date-h)/c;1<=f?(clearInterval(e),b(f)):a(f)},13)},a=function(c,d,g,h){var e=h;void 0===e&&(e=6,g/=e);var f=parseInt(c.style.marginLeft)||0;b(function(a){c.style.marginLeft=f+(d-f)*a+"px"},function(){0!==e&&a(c,1===e?0:1.3*(d/e-d),g,--e)},g)};return function(){a(this.dom.wrap[0],40,600);return this}}();var o=function(){var b=this,a=function(a){var c=b[a];b[a]=function(){return c.apply(b,arguments)}};a("start");a("over");a("end")};o.prototype={start:function(b){c(document).bind("mousemove",this.over).bind("mouseup",this.end);this._sClientX=b.clientX;this._sClientY=b.clientY;this.onstart(b.clientX,b.clientY);return!1},over:function(b){this._mClientX=b.clientX;this._mClientY=b.clientY;this.onover(b.clientX-this._sClientX,b.clientY-this._sClientY);return!1},end:function(b){c(document).unbind("mousemove",this.over).unbind("mouseup",this.end);this.onend(b.clientX,b.clientY);return!1}};var j=c(window),k=c(document),i=document.documentElement,p=!!("minWidth"in i.style)&&"onlosecapture"in i,q="setCapture"in i,r=function(){return!1},n=function(b){var a=new o,c=artDialog.focus,d=c.dom,g=d.wrap,h=d.title,e=g[0],f=h[0],i=d.main[0],l=e.style,s=i.style,t=b.target===d.se[0]?!0:!1,u=(d="fixed"===e.style.position)?0:k.scrollLeft(),v=d?0:k.scrollTop(),n=j.width()-e.offsetWidth+u,A=j.height()-e.offsetHeight+v,w,x,y,z;a.onstart=function(){t?(w=i.offsetWidth,x=i.offsetHeight):(y=e.offsetLeft,z=e.offsetTop);k.bind("dblclick",a.end).bind("dragstart",r);p?h.bind("losecapture",a.end):j.bind("blur",a.end);q&&f.setCapture();g.addClass("d-state-drag");c.focus()};a.onover=function(a,b){if(t){var c=a+w,d=b+x;l.width="auto";s.width=Math.max(0,c)+"px";l.width=e.offsetWidth+"px";s.height=Math.max(0,d)+"px"}else c=Math.max(u,Math.min(n,a+y)),d=Math.max(v,Math.min(A,b+z)),l.left=c+"px",l.top=d+"px"};a.onend=function(){k.unbind("dblclick",a.end).unbind("dragstart",r);p?h.unbind("losecapture",a.end):j.unbind("blur",a.end);q&&f.releaseCapture();g.removeClass("d-state-drag")};a.start(b)};c(document).bind("mousedown",function(b){var a=artDialog.focus;if(a){var c=b.target,d=a.config,a=a.dom;if(!1!==d.drag&&c===a.title[0]||!1!==d.resize&&c===a.se[0])return n(b),!1}})})(this.art||this.jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/jquery.artDialog.min.js b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/jquery.artDialog.min.js
new file mode 100644
index 0000000..542a44b
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/jquery.artDialog.min.js
@@ -0,0 +1,9 @@
+/*!
+* artDialog 5.0.4
+* Date: 2013-07-31
+* https://github.com/aui/artDialog
+* (c) 2009-2013 TangBin, http://www.planeArt.cn
+*
+* This is licensed under the GNU LGPL, version 2.1 or later.
+* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
+*/!function(a,b,c){function n(a){var b=m.focus;b&&b._isLock&&!b.dom.wrap[0].contains(a.target)&&(a.stopPropagation(),b.dom.outer[0].focus())}if("BackCompat"===document.compatMode)throw new Error("artDialog: Document types require more than xhtml1.0");var d,e=0,g=(a(document.getElementsByTagName("html")[0]),"artDialog"+ +new Date),h=b.VBArray&&!b.XMLHttpRequest,i="createTouch"in document&&!("onmousemove"in document)||/(iPhone|iPad|iPod)/i.test(navigator.userAgent),j=!h&&!i,k=function(){try{return document.activeElement}catch(a){}},l=k(),m=function(a,b,f){a=a||{},("string"==typeof a||1===a.nodeType)&&(a={content:a,fixed:!i});var h,k=m.defaults,l=a.follow=1===this.nodeType&&this||a.follow;for(var n in k)a[n]===c&&(a[n]=k[n]);return a.id=l&&l[g+"follow"]||a.id||g+e,(h=m.list[a.id])?(l&&h.follow(l),h.zIndex().focus(),h):(j||(a.fixed=!1),a.button&&a.button.push||(a.button=[]),b!==c&&(a.ok=b),a.ok&&a.button.push({id:"ok",value:a.okValue,callback:a.ok,focus:!0}),f!==c&&(a.cancel=f),a.cancel&&a.button.push({id:"cancel",value:a.cancelValue,callback:a.cancel}),m.defaults.zIndex=a.zIndex,e++,m.list[a.id]=d?d._create(a):new m.fn._create(a))};m.version="5.0.4",m.fn=m.prototype={_create:function(a){var b;return this.closed=!1,this.config=a,this.dom=b=this.dom||this._innerHTML(a),a.skin&&b.wrap.addClass(a.skin),b.wrap.css("position",a.fixed?"fixed":"absolute"),b.close[a.cancel===!1?"hide":"show"](),b.content.css("padding",a.padding),this.button.apply(this,a.button),this.title(a.title).content(a.content).size(a.width,a.height).time(a.time),this._reset(),this.zIndex(),a.lock&&this.lock(),this._addEvent(),this[a.visible?"visible":"hidden"]().focus(),d=null,a.initialize&&a.initialize.call(this),this},content:function(b){var c,d,e,f,g=this,h=this.dom.content,i=h[0];return this._elemBack&&(this._elemBack(),delete this._elemBack),"string"==typeof b?h.html(b):b&&1===b.nodeType&&(f=b.style.display,c=b.previousSibling,d=b.nextSibling,e=b.parentNode,this._elemBack=function(){c&&c.parentNode?c.parentNode.insertBefore(b,c.nextSibling):d&&d.parentNode?d.parentNode.insertBefore(b,d):e&&e.appendChild(b),b.style.display=f,g._elemBack=null},h.html(""),i.appendChild(b),a(b).show()),this._reset(),this},title:function(a){var b=this.dom,c=b.outer,d=b.title,e="d-state-noTitle";return a===!1?(d.hide().html(""),c.addClass(e)):(d.show().html(a),c.removeClass(e)),this},position:function(){var a=this.dom,b=a.wrap[0],c=a.window,d=a.document,e=this.config.fixed,f=e?0:d.scrollLeft(),h=e?0:d.scrollTop(),i=c.width(),j=c.height(),k=b.offsetWidth,l=b.offsetHeight,m=(i-k)/2+f,n=382*(j-l)/1e3+h,o=b.style;return o.left=Math.max(parseInt(m),f)+"px",o.top=Math.max(parseInt(n),h)+"px",this._follow&&(this._follow.removeAttribute(g+"follow"),this._follow=null),this},size:function(a,b){var c=this.dom.main[0].style;return"number"==typeof a&&(a+="px"),"number"==typeof b&&(b+="px"),c.width=a,c.height=b,this},follow:function(b){var c=a(b),d=this.config;if(!b||!b.offsetWidth&&!b.offsetHeight)return this.position(this._left,this._top);var e=d.fixed,f=g+"follow",h=this.dom,i=h.window,j=h.document,k=i.width(),l=i.height(),m=j.scrollLeft(),n=j.scrollTop(),o=c.offset(),p=b.offsetWidth,q=b.offsetHeight,r=e?o.left-m:o.left,s=e?o.top-n:o.top,t=this.dom.wrap[0],u=t.style,v=t.offsetWidth,w=t.offsetHeight,x=r-(v-p)/2,y=s+q,z=e?0:m,A=e?0:n;return x=z>x?r:x+v>k&&r-v>z?r-v+p:x,y=y+w>l+A&&s-w>A?s-w:y,u.left=parseInt(x)+"px",u.top=parseInt(y)+"px",this._follow&&this._follow.removeAttribute(f),this._follow=b,b[f]=d.id,this},button:function(){for(var j,k,l,m,n,b=this.dom,c=b.buttons,d=c[0],e="d-state-highlight",f=this._listeners=this._listeners||{},h=[].slice.call(arguments),i=0;ig;g++)f=i[g].className.split("d-")[1],f&&(h[f]=a(i[g]));return h.window=a(b),h.document=a(document),h.wrap=a(e),h},_click:function(a){var b=this._listeners[a]&&this._listeners[a].callback;return"function"!=typeof b||b.call(this)!==!1?this.close():this},_reset:function(){var a=this.config.follow||this._follow;a?this.follow(a):this.position()},_addEvent:function(){var a=this,b=this.dom;b.wrap.bind("click",function(c){var e,d=c.target;return d.disabled?!1:d===b.close[0]?(a._click("cancel"),!1):(e=d[g+"callback"],e&&a._click(e),void 0)}).bind("mousedown",function(){a.zIndex()})},_removeEvent:function(){this.dom.wrap.unbind()}},m.fn._create.prototype=m.fn,a.fn.dialog=a.fn.artDialog=function(){var a=arguments;return this[this.live?"live":"bind"]("click",function(){return m.apply(this,a),!1}),this},m.focus=null,m.get=function(a){return a===c?m.list:m.list[a]},m.list={},a(document).bind("keydown",function(a){var b=a.target,c=b.nodeName,d=/^input|textarea$/i,e=m.focus,f=a.keyCode;!e||d.test(c)&&"button"!==b.type||27===f&&e._click("cancel")}),a.fn.live?a("body").live("focus",n):document.addEventListener?document.addEventListener("focus",n,!0):a(document).bind("focusin",n),a(b).bind("resize",function(){var a=m.list;for(var b in a)a[b]._reset()}),m._templates='',m.defaults={content:'loading..
',title:"message",button:null,ok:null,cancel:null,initialize:null,beforeunload:null,okValue:"ok",cancelValue:"cancel",width:"auto",height:"auto",padding:"20px 25px",skin:null,time:null,visible:!0,follow:null,lock:!1,fixed:!1,zIndex:1987},this.artDialog=a.dialog=a.artDialog=m}(this.art||this.jQuery,this);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/readme b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/readme
new file mode 100644
index 0000000..6c2b10a
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/readme
@@ -0,0 +1 @@
+artDialog Version: 5.0.4
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue.css b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue.css
new file mode 100644
index 0000000..824aa6b
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue.css
@@ -0,0 +1,78 @@
+@charset "utf-8";
+/*
+ * artDialog skin
+ * https://github.com/aui/artDialog
+ * (c) 2009-2013 TangBin, http://www.planeArt.cn
+ *
+ * This is licensed under the GNU LGPL, version 2.1 or later.
+ * For details, see: http://creativecommons.org/licenses/LGPL/2.1/
+ */
+
+/* common start */
+body { _margin:0; _height:100%; }/*IE6 BUG*/
+.d-outer { text-align:left; outline:none 0; }
+.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; }
+.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; }
+.d-header, .d-button { font: 12px/1.11 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; }
+.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; }
+.d-state-noTitle .d-title { display:none; }
+.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; }
+.d-close:hover { text-decoration:none; }
+.d-main { text-align:center; vertical-align:middle; min-width:9em; }
+.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; }
+.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; }
+.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; }
+.d-buttons { padding:8px; text-align:right; white-space:nowrap; }
+.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, .5);; box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; }
+.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; }
+.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); }
+.d-button:hover { color:#000; border-color:#666; }
+.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 1em rgba(0, 0, 0, .6), inset 0 1px 1em rgba(0, 0, 0, .3); }
+.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; }
+.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; }
+.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; }
+.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); }
+.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; }
+/* common end */
+
+.d-inner { background:#f7f7f7; }
+.d-titleBar { width:100%; height:0; position:relative; bottom:30px; _bottom:0; _margin-top:-30px; }
+.d-title { height:29px; line-height:29px; padding:0 25px 0 0; _padding:0; text-indent:5px; color:#FFF; font-weight:700; text-shadow:-1px -1px 0 rgba(33, 79, 183, .7); }
+.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(blue/bg.png); background-repeat:no-repeat; }
+.d-nw { width:15px; height:38px; background-position: 0 0;}
+.d-ne { width:15px; height:38px; background-position: -15px 0; }
+.d-sw { width:15px; height:18px; background-position: 0 -38px; }
+.d-se { width:15px; height:18px; background-position: -15px -38px; }
+.d-close { top:4px; right:4px; _z-index:1; width:20px; height:20px; _font-size:0; _line-height:0; text-indent:-9999em; background-position:0 -112px; }
+.d-close:hover { background-position:0 -132px; }
+.d-n, .d-s { background-repeat:repeat-x; }
+.d-n { background-position: 0 -56px; }
+.d-s { background-position: 0 -94px; }
+.d-w, .d-e { background-image:url(blue/bg2.png); background-repeat:repeat-y; }
+.d-w { background-position:left top; }
+.d-e { background-position: right bottom; }
+.d-main { padding-top:3px; }
+@media screen and (min-width:0) {/* css3 */
+ .d-outer { border-radius:8px; box-shadow:0 5px 15px rgba(2, 37, 69, .4); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; }
+ .d-state-drag { box-shadow:none; }
+ .d-state-lock { box-shadow:0 3px 26px rgba(0, 0, 0, .9); }
+ .d-outer:active { box-shadow:0 0 5px rgba(2, 37, 69, .1)!important; }
+ .d-state-drag { box-shadow:none!important; }
+ .d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(blue/bg_css3.png); }
+ .d-nw { width:5px; height:31px; }
+ .d-ne { width:5px; height:31px; background-position: -5px 0; }
+ .d-sw { width:5px; height:5px;background-position: 0 -31px; }
+ .d-se { width:5px; height:5px; background-position: -5px -31px; }
+ .d-close { background-position:0 -72px; }
+ .d-close:hover { background-position:0 -92px; }
+ .d-n { background-position: 0 -36px; }
+ .d-s { background-position: 0 -67px; }
+ .d-w, .d-e { background-image:url(blue/bg_css3_2.png); }
+}
+.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; }
+.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; }
+.d-state-noTitle { box-shadow:none; }
+.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; }
+.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; }
+.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; }
+.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; }
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue/bg.png b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue/bg.png
new file mode 100644
index 0000000..52c1c01
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue/bg.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue/bg2.png b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue/bg2.png
new file mode 100644
index 0000000..834c17a
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue/bg2.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue/bg_css3.png b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue/bg_css3.png
new file mode 100644
index 0000000..8f55b85
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue/bg_css3.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue/bg_css3_2.png b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue/bg_css3_2.png
new file mode 100644
index 0000000..b8f66eb
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/blue/bg_css3_2.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/loading.gif b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/loading.gif
new file mode 100644
index 0000000..e8c2892
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/plugins/artDialog/skins/loading.gif differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/css/bootstrap-responsive.min.css b/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/css/bootstrap-responsive.min.css
new file mode 100644
index 0000000..96a435b
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/css/bootstrap-responsive.min.css
@@ -0,0 +1,9 @@
+/*!
+ * Bootstrap Responsive v2.3.2
+ *
+ * Copyright 2013 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world by @mdo and @fat.
+ */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/css/bootstrap.min.css b/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/css/bootstrap.min.css
new file mode 100644
index 0000000..df96c86
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/css/bootstrap.min.css
@@ -0,0 +1,9 @@
+/*!
+ * Bootstrap v2.3.2
+ *
+ * Copyright 2013 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world by @mdo and @fat.
+ */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-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;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(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;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(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;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(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;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(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;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(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;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(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;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(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;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(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));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:-moz-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);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));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:-moz-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-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));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:-moz-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-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));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:-moz-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-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));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:-moz-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)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/img/glyphicons-halflings-white.png b/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/img/glyphicons-halflings-white.png
new file mode 100644
index 0000000..3bf6484
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/img/glyphicons-halflings-white.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/img/glyphicons-halflings.png b/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/img/glyphicons-halflings.png
new file mode 100644
index 0000000..a996999
Binary files /dev/null and b/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/img/glyphicons-halflings.png differ
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/js/bootstrap.min.js b/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/js/bootstrap.min.js
new file mode 100644
index 0000000..848258d
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/js/bootstrap.min.js
@@ -0,0 +1,6 @@
+/*!
+* Bootstrap.js by @fat & @mdo
+* Copyright 2013 Twitter, Inc.
+* http://www.apache.org/licenses/LICENSE-2.0.txt
+*/
+!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(".dropdown-backdrop").remove(),e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||("ontouchstart"in document.documentElement&&e('
').insertBefore(e(this)).on("click",r),s.toggleClass("open")),n.focus(),!1},keydown:function(n){var r,s,o,u,a,f;if(!/(38|40|27)/.test(n.keyCode))return;r=e(this),n.preventDefault(),n.stopPropagation();if(r.is(".disabled, :disabled"))return;u=i(r),a=u.hasClass("open");if(!a||a&&n.keyCode==27)return n.which==27&&u.find(t).focus(),r.click();s=e("[role=menu] li:not(.divider):visible a",u);if(!s.length)return;f=s.index(s.filter(":focus")),n.keyCode==38&&f>0&&f--,n.keyCode==40&&f ').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?e.proxy(this.$element[0].focus,this.$element[0]):e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,t):t()):t&&t()}};var n=e.fn.modal;e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s,o,u,a;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,o=this.options.trigger.split(" ");for(a=o.length;a--;)u=o[a],u=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):u!="manual"&&(i=u=="hover"?"mouseenter":"focus",s=u=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this)));this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e.fn[this.type].defaults,r={},i;this._options&&e.each(this._options,function(e,t){n[e]!=t&&(r[e]=t)},this),i=e(t.currentTarget)[this.type](r).data(this.type);if(!i.options.delay||!i.options.delay.show)return i.show();clearTimeout(this.timeout),i.hoverState="in",this.timeout=setTimeout(function(){i.hoverState=="in"&&i.show()},i.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var t,n,r,i,s,o,u=e.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(u);if(u.isDefaultPrevented())return;t=this.tip(),this.setContent(),this.options.animation&&t.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,t[0],this.$element[0]):this.options.placement,t.detach().css({top:0,left:0,display:"block"}),this.options.container?t.appendTo(this.options.container):t.insertAfter(this.$element),n=this.getPosition(),r=t[0].offsetWidth,i=t[0].offsetHeight;switch(s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}this.applyPlacement(o,s),this.$element.trigger("shown")}},applyPlacement:function(e,t){var n=this.tip(),r=n[0].offsetWidth,i=n[0].offsetHeight,s,o,u,a;n.offset(e).addClass(t).addClass("in"),s=n[0].offsetWidth,o=n[0].offsetHeight,t=="top"&&o!=i&&(e.top=e.top+i-o,a=!0),t=="bottom"||t=="top"?(u=0,e.left<0&&(u=e.left*-2,e.left=0,n.offset(e),s=n[0].offsetWidth,o=n[0].offsetHeight),this.replaceArrow(u-r+s,s,"left")):this.replaceArrow(o-i,o,"top"),a&&n.offset(e)},replaceArrow:function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function i(){var t=setTimeout(function(){n.off(e.support.transition.end).detach()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.detach()})}var t=this,n=this.tip(),r=e.Event("hide");this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?i():n.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(t){var n=t?e(t.currentTarget)[this.type](this._options).data(this.type):this;n.tip().hasClass("in")?n.hide():n.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=(typeof n.content=="function"?n.content.call(t[0]):n.content)||t.attr("data-content"),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:''}),e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var n=e(this),r=n.data("target")||n.attr("href"),i=/^#\w/.test(r)&&e(r);return i&&i.length&&[[i.position().top+(!e.isWindow(t.$scrollElement.get(0))&&t.$scrollElement.scrollTop()),r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=n,this},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active:last a")[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=e(this.options.menu),this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:t.top+t.height,left:t.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length"+t+""})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'',item:' ',minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;n.typeahead(n.data())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/readme b/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/readme
new file mode 100644
index 0000000..9502701
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/bootstrap/2.3.2/readme
@@ -0,0 +1 @@
+dependencies jquery: >=1.8.0 <2.1.0
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/html5shiv/html5shiv-printshiv.min.js b/public/static/admin_static/lib/jquery.bsgrid/plugins/html5shiv/html5shiv-printshiv.min.js
new file mode 100644
index 0000000..dea63bf
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/html5shiv/html5shiv-printshiv.min.js
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.2",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML=" ",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b)}(this,document);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/html5shiv/html5shiv.min.js b/public/static/admin_static/lib/jquery.bsgrid/plugins/html5shiv/html5shiv.min.js
new file mode 100644
index 0000000..d4c731a
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/html5shiv/html5shiv.min.js
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML=" ",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document);
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/html5shiv/readme b/public/static/admin_static/lib/jquery.bsgrid/plugins/html5shiv/readme
new file mode 100644
index 0000000..d018574
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/html5shiv/readme
@@ -0,0 +1 @@
+version: 3.7.2
\ No newline at end of file
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/jquery-1.11.2.min.js b/public/static/admin_static/lib/jquery.bsgrid/plugins/jquery-1.11.2.min.js
new file mode 100644
index 0000000..e6a051d
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/jquery-1.11.2.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML=" ",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML=" ","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML=" ",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
+return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" a ",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="x ",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML=" ",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h ]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""," "],legend:[1,""," "],area:[1,""," "],param:[1,""," "],thead:[1,""],tr:[2,""],col:[2,""],td:[3,""],_default:k.htmlSerialize?[0,"",""]:[1,"X","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" a ",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)
+}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();ca ",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/public/static/admin_static/lib/jquery.bsgrid/plugins/jquery-1.4.4.min.js b/public/static/admin_static/lib/jquery.bsgrid/plugins/jquery-1.4.4.min.js
new file mode 100644
index 0000000..8f3ca2e
--- /dev/null
+++ b/public/static/admin_static/lib/jquery.bsgrid/plugins/jquery-1.4.4.min.js
@@ -0,0 +1,167 @@
+/*!
+ * jQuery JavaScript Library v1.4.4
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Nov 11 19:04:53 2010 -0500
+ */
+(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
+h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k
d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
+"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
+e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
+"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
+s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
+j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
+toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
+-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
+if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
+b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
+!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
+l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;Ha ";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
+k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
+scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML=" ";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
+1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="
";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
+"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
+c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
+else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
+if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
+attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
+b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
+c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
+arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
+d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
+c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
+8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
+"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
+d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
+B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
+"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
+0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
+(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
+break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
+q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
+l;g.sort(w);if(h)for(var i=1;i0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
+m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
+true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
+g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return in[3]-0},nth:function(g,i,n){return n[3]-
+0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
+i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
+if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
+g);else if(typeof g.length==="number")for(var p=g.length;n
";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
+n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML=" ";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
+function(){var g=k,i=t.createElement("div");i.innerHTML="
";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
+p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
+t.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
+function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n0)for(var h=d;h0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
+h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
+c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
+2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
+b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
+e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/\s]+\/)>/g,P={option:[1,
+""," "],legend:[1,""," "],thead:[1,""],tr:[2,""],td:[3,""],col:[2,""],area:[1,""," "],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
+else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1>$2>");try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
+prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
+b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1>$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]===""&&!x?r.childNodes:[];for(o=k.length-
+1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
+d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
+jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
+zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
+h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
+if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
+d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
+e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/
+
+```
+
+NProgress is available via [bower] and [npm].
+
+ $ npm install --save nprogress
+
+Also available via [unpkg] CDN:
+
+- https://unpkg.com/nprogress@0.2.0/nprogress.js
+- https://unpkg.com/nprogress@0.2.0/nprogress.css
+
+[bower]: http://bower.io/search/?q=nprogress
+[npm]: https://www.npmjs.org/package/nprogress
+[unpkg]: https://unpkg.com/
+
+Basic usage
+-----------
+
+Simply call `start()` and `done()` to control the progress bar.
+
+~~~ js
+NProgress.start();
+NProgress.done();
+~~~
+
+### Turbolinks (version 5+)
+Ensure you're using Turbolinks 5+, and use
+this: (explained [here](https://github.com/rstacruz/nprogress/issues/8#issuecomment-239107109))
+
+~~~ js
+$(document).on('turbolinks:click', function() {
+ NProgress.start();
+});
+$(document).on('turbolinks:render', function() {
+ NProgress.done();
+ NProgress.remove();
+});
+~~~
+
+### Turbolinks (version 3 and below)
+Ensure you're using Turbolinks 1.3.0+, and use
+this: (explained [here](https://github.com/rstacruz/nprogress/issues/8#issuecomment-23010560))
+
+~~~ js
+$(document).on('page:fetch', function() { NProgress.start(); });
+$(document).on('page:change', function() { NProgress.done(); });
+$(document).on('page:restore', function() { NProgress.remove(); });
+~~~
+
+### Pjax
+Try this: (explained [here](https://github.com/rstacruz/nprogress/issues/22#issuecomment-36540472))
+
+~~~ js
+$(document).on('pjax:start', function() { NProgress.start(); });
+$(document).on('pjax:end', function() { NProgress.done(); });
+~~~
+
+Ideas
+-----
+
+ * Add progress to your Ajax calls! Bind it to the jQuery `ajaxStart` and
+ `ajaxStop` events.
+
+ * Make a fancy loading bar even without Turbolinks/Pjax! Bind it to
+ `$(document).ready` and `$(window).load`.
+
+Advanced usage
+--------------
+
+__Percentages:__ To set a progress percentage, call `.set(n)`, where *n* is a
+number between `0..1`.
+
+~~~ js
+NProgress.set(0.0); // Sorta same as .start()
+NProgress.set(0.4);
+NProgress.set(1.0); // Sorta same as .done()
+~~~
+
+__Incrementing:__ To increment the progress bar, just use `.inc()`. This
+increments it with a random amount. This will never get to 100%: use it for
+every image load (or similar).
+
+~~~ js
+NProgress.inc();
+~~~
+
+If you want to increment by a specific value, you can pass that as a parameter:
+
+~~~ js
+NProgress.inc(0.2); // This will get the current status value and adds 0.2 until status is 0.994
+~~~
+
+__Force-done:__ By passing `true` to `done()`, it will show the progress bar
+even if it's not being shown. (The default behavior is that *.done()* will not
+ do anything if *.start()* isn't called)
+
+~~~ js
+NProgress.done(true);
+~~~
+
+__Get the status value:__ To get the status value, use `.status`
+
+Configuration
+-------------
+
+#### `minimum`
+Changes the minimum percentage used upon starting. (default: `0.08`)
+
+~~~ js
+NProgress.configure({ minimum: 0.1 });
+~~~
+
+#### `template`
+You can change the markup using `template`. To keep the progress
+bar working, keep an element with `role='bar'` in there. See the [default template]
+for reference.
+
+~~~ js
+NProgress.configure({
+ template: "...
"
+});
+~~~
+
+#### `easing` and `speed`
+Adjust animation settings using *easing* (a CSS easing string)
+and *speed* (in ms). (default: `ease` and `200`)
+
+~~~ js
+NProgress.configure({ easing: 'ease', speed: 500 });
+~~~
+
+#### `trickle`
+Turn off the automatic incrementing behavior by setting this to `false`. (default: `true`)
+
+~~~ js
+NProgress.configure({ trickle: false });
+~~~
+
+#### `trickleSpeed`
+Adjust how often to trickle/increment, in ms.
+
+~~~ js
+NProgress.configure({ trickleSpeed: 200 });
+~~~
+
+#### `showSpinner`
+Turn off loading spinner by setting it to false. (default: `true`)
+
+~~~ js
+NProgress.configure({ showSpinner: false });
+~~~
+
+#### `parent`
+specify this to change the parent container. (default: `body`)
+
+~~~ js
+NProgress.configure({ parent: '#container' });
+~~~
+
+Customization
+-------------
+
+Just edit `nprogress.css` to your liking. Tip: you probably only want to find
+and replace occurrences of `#29d`.
+
+The included CSS file is pretty minimal... in fact, feel free to scrap it and
+make your own!
+
+Resources
+---------
+
+ * [New UI Pattern: Website Loading Bars](http://www.usabilitypost.com/2013/08/19/new-ui-pattern-website-loading-bars/) (usabilitypost.com)
+
+Support
+-------
+
+__Bugs and requests__: submit them through the project's issues tracker.
+[![Issues](http://img.shields.io/github/issues/rstacruz/nprogress.svg)]( https://github.com/rstacruz/nprogress/issues )
+
+__Questions__: ask them at StackOverflow with the tag *nprogress*.
+[![StackOverflow](http://img.shields.io/badge/stackoverflow-nprogress-brightgreen.svg)]( http://stackoverflow.com/questions/tagged/nprogress )
+
+__Chat__: join us at gitter.im.
+[![Chat](http://img.shields.io/badge/gitter-rstacruz/nprogress-brightgreen.svg)]( https://gitter.im/rstacruz/nprogress )
+
+[default template]: https://github.com/rstacruz/nprogress/blob/master/nprogress.js#L31
+[Turbolinks]: https://github.com/rails/turbolinks
+[nprogress.js]: http://ricostacruz.com/nprogress/nprogress.js
+[nprogress.css]: http://ricostacruz.com/nprogress/nprogress.css
+
+Thanks
+------
+
+**NProgress** © 2013-2017, Rico Sta. Cruz. Released under the [MIT License].
+Authored and maintained by Rico Sta. Cruz with help from [contributors].
+
+> [ricostacruz.com](http://ricostacruz.com) ·
+> GitHub [@rstacruz](https://github.com/rstacruz) ·
+> Twitter [@rstacruz](https://twitter.com/rstacruz)
+
+[MIT License]: http://mit-license.org/
+[contributors]: http://github.com/rstacruz/nprogress/contributors
+
+[![](https://img.shields.io/github/followers/rstacruz.svg?style=social&label=@rstacruz)](https://github.com/rstacruz)
+[![](https://img.shields.io/twitter/follow/rstacruz.svg?style=social&label=@rstacruz)](https://twitter.com/rstacruz)
diff --git a/public/static/admin_static/lib/nprogress/bower.json b/public/static/admin_static/lib/nprogress/bower.json
new file mode 100644
index 0000000..1965474
--- /dev/null
+++ b/public/static/admin_static/lib/nprogress/bower.json
@@ -0,0 +1,27 @@
+{
+ "name": "nprogress",
+ "repo": "rstacruz/nprogress",
+ "description": "slim progress bar",
+ "version": "0.2.0",
+ "keywords": [
+ "progress",
+ "bar",
+ "spinner"
+ ],
+ "license": "MIT",
+ "main": ["nprogress.js", "nprogress.css"],
+ "scripts": [
+ "nprogress.js"
+ ],
+ "styles": [
+ "nprogress.css"
+ ],
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "components",
+ "package.json",
+ "test",
+ "vendor"
+ ]
+}
diff --git a/public/static/admin_static/lib/nprogress/component.json b/public/static/admin_static/lib/nprogress/component.json
new file mode 100644
index 0000000..698499c
--- /dev/null
+++ b/public/static/admin_static/lib/nprogress/component.json
@@ -0,0 +1,19 @@
+{
+ "name": "nprogress",
+ "repo": "rstacruz/nprogress",
+ "description": "slim progress bar",
+ "version": "0.2.0",
+ "keywords": ["progress","bar","spinner"],
+ "development": {
+ "chaijs/chai": "*",
+ "visionmedia/mocha": "*"
+ },
+ "license": "MIT",
+ "main": "nprogress.js",
+ "scripts": [
+ "nprogress.js"
+ ],
+ "styles": [
+ "nprogress.css"
+ ]
+}
diff --git a/public/static/admin_static/lib/nprogress/index.html b/public/static/admin_static/lib/nprogress/index.html
new file mode 100644
index 0000000..dd78ffb
--- /dev/null
+++ b/public/static/admin_static/lib/nprogress/index.html
@@ -0,0 +1,84 @@
+
+
+
+
+ NProgress: slim progress bars in JavaScript
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NProgress .start()
+ —
+ shows the progress bar
+
+
+
+ NProgress .set(0.4)
+ —
+ sets a percentage
+
+
+
+ NProgress .inc()
+ —
+ increments by a little
+
+
+
+ NProgress .done()
+ —
+ completes the progress
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/static/admin_static/lib/nprogress/nprogress.css b/public/static/admin_static/lib/nprogress/nprogress.css
new file mode 100644
index 0000000..6752d7f
--- /dev/null
+++ b/public/static/admin_static/lib/nprogress/nprogress.css
@@ -0,0 +1,74 @@
+/* Make clicks pass-through */
+#nprogress {
+ pointer-events: none;
+}
+
+#nprogress .bar {
+ background: #29d;
+
+ position: fixed;
+ z-index: 1031;
+ top: 0;
+ left: 0;
+
+ width: 100%;
+ height: 2px;
+}
+
+/* Fancy blur effect */
+#nprogress .peg {
+ display: block;
+ position: absolute;
+ right: 0px;
+ width: 100px;
+ height: 100%;
+ box-shadow: 0 0 10px #29d, 0 0 5px #29d;
+ opacity: 1.0;
+
+ -webkit-transform: rotate(3deg) translate(0px, -4px);
+ -ms-transform: rotate(3deg) translate(0px, -4px);
+ transform: rotate(3deg) translate(0px, -4px);
+}
+
+/* Remove these to get rid of the spinner */
+#nprogress .spinner {
+ display: block;
+ position: fixed;
+ z-index: 1031;
+ top: 15px;
+ right: 15px;
+}
+
+#nprogress .spinner-icon {
+ width: 18px;
+ height: 18px;
+ box-sizing: border-box;
+
+ border: solid 2px transparent;
+ border-top-color: #29d;
+ border-left-color: #29d;
+ border-radius: 50%;
+
+ -webkit-animation: nprogress-spinner 400ms linear infinite;
+ animation: nprogress-spinner 400ms linear infinite;
+}
+
+.nprogress-custom-parent {
+ overflow: hidden;
+ position: relative;
+}
+
+.nprogress-custom-parent #nprogress .spinner,
+.nprogress-custom-parent #nprogress .bar {
+ position: absolute;
+}
+
+@-webkit-keyframes nprogress-spinner {
+ 0% { -webkit-transform: rotate(0deg); }
+ 100% { -webkit-transform: rotate(360deg); }
+}
+@keyframes nprogress-spinner {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
diff --git a/public/static/admin_static/lib/nprogress/nprogress.js b/public/static/admin_static/lib/nprogress/nprogress.js
new file mode 100644
index 0000000..beb9d2c
--- /dev/null
+++ b/public/static/admin_static/lib/nprogress/nprogress.js
@@ -0,0 +1,480 @@
+/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
+ * @license MIT */
+
+;(function(root, factory) {
+
+ if (typeof define === 'function' && define.amd) {
+ define(factory);
+ } else if (typeof exports === 'object') {
+ module.exports = factory();
+ } else {
+ root.NProgress = factory();
+ }
+
+})(this, function() {
+ var NProgress = {};
+
+ NProgress.version = '0.2.0';
+
+ var Settings = NProgress.settings = {
+ minimum: 0.08,
+ easing: 'linear',
+ positionUsing: '',
+ speed: 200,
+ trickle: true,
+ trickleSpeed: 200,
+ showSpinner: true,
+ barSelector: '[role="bar"]',
+ spinnerSelector: '[role="spinner"]',
+ parent: 'body',
+ template: ''
+ };
+
+ /**
+ * Updates configuration.
+ *
+ * NProgress.configure({
+ * minimum: 0.1
+ * });
+ */
+ NProgress.configure = function(options) {
+ var key, value;
+ for (key in options) {
+ value = options[key];
+ if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;
+ }
+
+ return this;
+ };
+
+ /**
+ * Last number.
+ */
+
+ NProgress.status = null;
+
+ /**
+ * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.
+ *
+ * NProgress.set(0.4);
+ * NProgress.set(1.0);
+ */
+
+ NProgress.set = function(n) {
+ var started = NProgress.isStarted();
+
+ n = clamp(n, Settings.minimum, 1);
+ NProgress.status = (n === 1 ? null : n);
+
+ var progress = NProgress.render(!started),
+ bar = progress.querySelector(Settings.barSelector),
+ speed = Settings.speed,
+ ease = Settings.easing;
+
+ progress.offsetWidth; /* Repaint */
+
+ queue(function(next) {
+ // Set positionUsing if it hasn't already been set
+ if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();
+
+ // Add transition
+ css(bar, barPositionCSS(n, speed, ease));
+
+ if (n === 1) {
+ // Fade out
+ css(progress, {
+ transition: 'none',
+ opacity: 1
+ });
+ progress.offsetWidth; /* Repaint */
+
+ setTimeout(function() {
+ css(progress, {
+ transition: 'all ' + speed + 'ms linear',
+ opacity: 0
+ });
+ setTimeout(function() {
+ NProgress.remove();
+ next();
+ }, speed);
+ }, speed);
+ } else {
+ setTimeout(next, speed);
+ }
+ });
+
+ return this;
+ };
+
+ NProgress.isStarted = function() {
+ return typeof NProgress.status === 'number';
+ };
+
+ /**
+ * Shows the progress bar.
+ * This is the same as setting the status to 0%, except that it doesn't go backwards.
+ *
+ * NProgress.start();
+ *
+ */
+ NProgress.start = function() {
+ if (!NProgress.status) NProgress.set(0);
+
+ var work = function() {
+ setTimeout(function() {
+ if (!NProgress.status) return;
+ NProgress.trickle();
+ work();
+ }, Settings.trickleSpeed);
+ };
+
+ if (Settings.trickle) work();
+
+ return this;
+ };
+
+ /**
+ * Hides the progress bar.
+ * This is the *sort of* the same as setting the status to 100%, with the
+ * difference being `done()` makes some placebo effect of some realistic motion.
+ *
+ * NProgress.done();
+ *
+ * If `true` is passed, it will show the progress bar even if its hidden.
+ *
+ * NProgress.done(true);
+ */
+
+ NProgress.done = function(force) {
+ if (!force && !NProgress.status) return this;
+
+ return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);
+ };
+
+ /**
+ * Increments by a random amount.
+ */
+
+ NProgress.inc = function(amount) {
+ var n = NProgress.status;
+
+ if (!n) {
+ return NProgress.start();
+ } else if(n > 1) {
+ return;
+ } else {
+ if (typeof amount !== 'number') {
+ if (n >= 0 && n < 0.2) { amount = 0.1; }
+ else if (n >= 0.2 && n < 0.5) { amount = 0.04; }
+ else if (n >= 0.5 && n < 0.8) { amount = 0.02; }
+ else if (n >= 0.8 && n < 0.99) { amount = 0.005; }
+ else { amount = 0; }
+ }
+
+ n = clamp(n + amount, 0, 0.994);
+ return NProgress.set(n);
+ }
+ };
+
+ NProgress.trickle = function() {
+ return NProgress.inc();
+ };
+
+ /**
+ * Waits for all supplied jQuery promises and
+ * increases the progress as the promises resolve.
+ *
+ * @param $promise jQUery Promise
+ */
+ (function() {
+ var initial = 0, current = 0;
+
+ NProgress.promise = function($promise) {
+ if (!$promise || $promise.state() === "resolved") {
+ return this;
+ }
+
+ if (current === 0) {
+ NProgress.start();
+ }
+
+ initial++;
+ current++;
+
+ $promise.always(function() {
+ current--;
+ if (current === 0) {
+ initial = 0;
+ NProgress.done();
+ } else {
+ NProgress.set((initial - current) / initial);
+ }
+ });
+
+ return this;
+ };
+
+ })();
+
+ /**
+ * (Internal) renders the progress bar markup based on the `template`
+ * setting.
+ */
+
+ NProgress.render = function(fromStart) {
+ if (NProgress.isRendered()) return document.getElementById('nprogress');
+
+ addClass(document.documentElement, 'nprogress-busy');
+
+ var progress = document.createElement('div');
+ progress.id = 'nprogress';
+ progress.innerHTML = Settings.template;
+
+ var bar = progress.querySelector(Settings.barSelector),
+ perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0),
+ parent = document.querySelector(Settings.parent),
+ spinner;
+
+ css(bar, {
+ transition: 'all 0 linear',
+ transform: 'translate3d(' + perc + '%,0,0)'
+ });
+
+ if (!Settings.showSpinner) {
+ spinner = progress.querySelector(Settings.spinnerSelector);
+ spinner && removeElement(spinner);
+ }
+
+ if (parent != document.body) {
+ addClass(parent, 'nprogress-custom-parent');
+ }
+
+ parent.appendChild(progress);
+ return progress;
+ };
+
+ /**
+ * Removes the element. Opposite of render().
+ */
+
+ NProgress.remove = function() {
+ removeClass(document.documentElement, 'nprogress-busy');
+ removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent');
+ var progress = document.getElementById('nprogress');
+ progress && removeElement(progress);
+ };
+
+ /**
+ * Checks if the progress bar is rendered.
+ */
+
+ NProgress.isRendered = function() {
+ return !!document.getElementById('nprogress');
+ };
+
+ /**
+ * Determine which positioning CSS rule to use.
+ */
+
+ NProgress.getPositioningCSS = function() {
+ // Sniff on document.body.style
+ var bodyStyle = document.body.style;
+
+ // Sniff prefixes
+ var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :
+ ('MozTransform' in bodyStyle) ? 'Moz' :
+ ('msTransform' in bodyStyle) ? 'ms' :
+ ('OTransform' in bodyStyle) ? 'O' : '';
+
+ if (vendorPrefix + 'Perspective' in bodyStyle) {
+ // Modern browsers with 3D support, e.g. Webkit, IE10
+ return 'translate3d';
+ } else if (vendorPrefix + 'Transform' in bodyStyle) {
+ // Browsers without 3D support, e.g. IE9
+ return 'translate';
+ } else {
+ // Browsers without translate() support, e.g. IE7-8
+ return 'margin';
+ }
+ };
+
+ /**
+ * Helpers
+ */
+
+ function clamp(n, min, max) {
+ if (n < min) return min;
+ if (n > max) return max;
+ return n;
+ }
+
+ /**
+ * (Internal) converts a percentage (`0..1`) to a bar translateX
+ * percentage (`-100%..0%`).
+ */
+
+ function toBarPerc(n) {
+ return (-1 + n) * 100;
+ }
+
+
+ /**
+ * (Internal) returns the correct CSS for changing the bar's
+ * position given an n percentage, and speed and ease from Settings
+ */
+
+ function barPositionCSS(n, speed, ease) {
+ var barCSS;
+
+ if (Settings.positionUsing === 'translate3d') {
+ barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };
+ } else if (Settings.positionUsing === 'translate') {
+ barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };
+ } else {
+ barCSS = { 'margin-left': toBarPerc(n)+'%' };
+ }
+
+ barCSS.transition = 'all '+speed+'ms '+ease;
+
+ return barCSS;
+ }
+
+ /**
+ * (Internal) Queues a function to be executed.
+ */
+
+ var queue = (function() {
+ var pending = [];
+
+ function next() {
+ var fn = pending.shift();
+ if (fn) {
+ fn(next);
+ }
+ }
+
+ return function(fn) {
+ pending.push(fn);
+ if (pending.length == 1) next();
+ };
+ })();
+
+ /**
+ * (Internal) Applies css properties to an element, similar to the jQuery
+ * css method.
+ *
+ * While this helper does assist with vendor prefixed property names, it
+ * does not perform any manipulation of values prior to setting styles.
+ */
+
+ var css = (function() {
+ var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],
+ cssProps = {};
+
+ function camelCase(string) {
+ return string.replace(/^-ms-/, 'ms-').replace(/-([\da-z])/gi, function(match, letter) {
+ return letter.toUpperCase();
+ });
+ }
+
+ function getVendorProp(name) {
+ var style = document.body.style;
+ if (name in style) return name;
+
+ var i = cssPrefixes.length,
+ capName = name.charAt(0).toUpperCase() + name.slice(1),
+ vendorName;
+ while (i--) {
+ vendorName = cssPrefixes[i] + capName;
+ if (vendorName in style) return vendorName;
+ }
+
+ return name;
+ }
+
+ function getStyleProp(name) {
+ name = camelCase(name);
+ return cssProps[name] || (cssProps[name] = getVendorProp(name));
+ }
+
+ function applyCss(element, prop, value) {
+ prop = getStyleProp(prop);
+ element.style[prop] = value;
+ }
+
+ return function(element, properties) {
+ var args = arguments,
+ prop,
+ value;
+
+ if (args.length == 2) {
+ for (prop in properties) {
+ value = properties[prop];
+ if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);
+ }
+ } else {
+ applyCss(element, args[1], args[2]);
+ }
+ }
+ })();
+
+ /**
+ * (Internal) Determines if an element or space separated list of class names contains a class name.
+ */
+
+ function hasClass(element, name) {
+ var list = typeof element == 'string' ? element : classList(element);
+ return list.indexOf(' ' + name + ' ') >= 0;
+ }
+
+ /**
+ * (Internal) Adds a class to an element.
+ */
+
+ function addClass(element, name) {
+ var oldList = classList(element),
+ newList = oldList + name;
+
+ if (hasClass(oldList, name)) return;
+
+ // Trim the opening space.
+ element.className = newList.substring(1);
+ }
+
+ /**
+ * (Internal) Removes a class from an element.
+ */
+
+ function removeClass(element, name) {
+ var oldList = classList(element),
+ newList;
+
+ if (!hasClass(element, name)) return;
+
+ // Replace the class name.
+ newList = oldList.replace(' ' + name + ' ', ' ');
+
+ // Trim the opening and closing spaces.
+ element.className = newList.substring(1, newList.length - 1);
+ }
+
+ /**
+ * (Internal) Gets a space separated list of the class names on the element.
+ * The list is wrapped with a single space on each end to facilitate finding
+ * matches within the list.
+ */
+
+ function classList(element) {
+ return (' ' + (element && element.className || '') + ' ').replace(/\s+/gi, ' ');
+ }
+
+ /**
+ * (Internal) Removes an element from the DOM.
+ */
+
+ function removeElement(element) {
+ element && element.parentNode && element.parentNode.removeChild(element);
+ }
+
+ return NProgress;
+});
diff --git a/public/static/admin_static/lib/nprogress/package.json b/public/static/admin_static/lib/nprogress/package.json
new file mode 100644
index 0000000..28f7471
--- /dev/null
+++ b/public/static/admin_static/lib/nprogress/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "nprogress",
+ "author": "Rico Sta. Cruz ",
+ "description": "Simple slim progress bars",
+ "version": "0.2.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/rstacruz/nprogress.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "main": "nprogress.js",
+ "license": "MIT",
+ "devDependencies": {
+ "chai": "~1.6.1",
+ "jquery": "^2.1.1",
+ "jsdom": "^5.4.3",
+ "mocha": "^2.2.4",
+ "mocha-jsdom": "^0.3.0"
+ },
+ "dependencies": {},
+ "jspm": {
+ "format": "global",
+ "shim": {
+ "nprogress": {
+ "deps": [
+ "./nprogress.css!"
+ ]
+ }
+ },
+ "dependencies": {
+ "css": "*"
+ }
+ },
+ "spm": {
+ "main": "nprogress.js",
+ "output": [
+ "nprogress.css"
+ ],
+ "ignore": [
+ "support",
+ "test",
+ "vendor"
+ ]
+ }
+}
diff --git a/public/static/admin_static/lib/nprogress/support/extras.css b/public/static/admin_static/lib/nprogress/support/extras.css
new file mode 100644
index 0000000..21bb39b
--- /dev/null
+++ b/public/static/admin_static/lib/nprogress/support/extras.css
@@ -0,0 +1,4 @@
+/* Make the entire page show a busy cursor */
+.nprogress-busy body {
+ cursor: wait;
+}
diff --git a/public/static/admin_static/lib/nprogress/support/style.css b/public/static/admin_static/lib/nprogress/support/style.css
new file mode 100644
index 0000000..1a78acf
--- /dev/null
+++ b/public/static/admin_static/lib/nprogress/support/style.css
@@ -0,0 +1,215 @@
+i, b {
+ font-style: normal;
+ font-weight: 400;
+}
+
+body, html {
+ padding: 0;
+ margin: 0;
+}
+
+body {
+ background: white;
+}
+
+body, td, input, textarea {
+ font-family: source sans pro, sans-serif;
+ font-size: 14px;
+ line-height: 1.5;
+ color: #222;
+}
+
+button {
+ cursor: pointer;
+}
+
+* {
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+}
+
+.nprogress-logo {
+ display: inline-block;
+
+ width: 100px;
+ height: 20px;
+ border: solid 4px #2d9;
+ border-radius: 10px;
+
+ position: relative;
+}
+.nprogress-logo:after {
+ content: '';
+ display: block;
+
+ position: absolute;
+ top: 4px;
+ left: 4px;
+ bottom: 4px;
+ width: 40%;
+
+ background: #2d9;
+ border-radius: 3px;
+}
+
+.fade {
+ transition: all 300ms linear 700ms;
+ -webkit-transform: translate3d(0,0,0);
+ -moz-transform: translate3d(0,0,0);
+ -ms-transform: translate3d(0,0,0);
+ -o-transform: translate3d(0,0,0);
+ transform: translate3d(0,0,0);
+ opacity: 1;
+}
+
+.fade.out {
+ opacity: 0;
+}
+
+button {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+}
+
+.button {
+ display: inline-block;
+ text-decoration: none;
+
+ background: #eee;
+ color: #777;
+ border-radius: 2px;
+
+ padding: 8px 10px;
+ font-weight: 700;
+ text-align: left;
+}
+
+.button.play:before {
+ content: '\25b6';
+}
+
+.button:hover {
+ background: #2d9;
+ color: #fff;
+}
+
+.button.primary {
+ background: #2d9;
+ color: #fff;
+}
+.button.primary:hover {
+ background: #1c8;
+}
+
+.button:active {
+ background: #2d9;
+ box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.6);
+}
+
+.controls {
+ text-align: left;
+ margin: 0 auto;
+ max-width: 300px;
+ color: #666;
+}
+
+.controls .button {
+ width: 40px;
+ margin-right: 10px;
+ text-align: center;
+}
+
+.controls i {
+ color: #999;
+}
+
+.controls b {
+ color: #29d;
+ font-weight: 700;
+}
+
+.controls {
+ font-size: 0.9em;
+}
+
+.page-header {
+ text-align: center;
+ max-width: 400px;
+ padding: 3em 20px;
+ margin: 0 auto;
+}
+
+.page-header h1 {
+ font-size: 2.0em;
+ text-align: center;
+ font-weight: 200;
+ line-height: 1.3;
+ color: #333;
+ margin: 0;
+}
+
+p.brief {
+ line-height: 1.4;
+ font-style: italic;
+ color: #888;
+}
+
+p.brief.big {
+ font-size: 1.1em;
+}
+
+@media (min-width: 480px) {
+ .page-header h1 {
+ margin-top: 1em;
+ margin-bottom: 0.4em;
+ }
+}
+
+.page-header h1 i {
+ color: #aaa;
+ font-style: normal;
+ font-weight: 200;
+}
+
+@media (min-width: 480px) {
+ .page-header h1 {
+ font-size: 3em; }
+ .page-header {
+ padding: 4.5em 20px 3.5em 20px;
+ }
+}
+
+/* --- */
+
+.actions {
+ text-align: center;
+ margin: 2em 0;
+}
+
+@media (min-width: 480px) {
+ .actions {
+ margin: 4.5em 0 3.5em 0;
+ }
+}
+
+.big.button {
+ padding-left: 30px;
+ padding-right: 30px;
+ font-size: 1.1em;
+}
+
+
+/* ---- */
+
+div.hr-rule {
+ height: 1px;
+ width: 100px;
+ margin: 40px auto;
+ background: #ddd;
+}
+.share-buttons {
+ margin: 0 auto;
+ text-align: center;
+}
diff --git a/public/static/admin_static/lib/nprogress/test/component.html b/public/static/admin_static/lib/nprogress/test/component.html
new file mode 100644
index 0000000..6bcde97
--- /dev/null
+++ b/public/static/admin_static/lib/nprogress/test/component.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+ Tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/static/admin_static/lib/nprogress/test/index.html b/public/static/admin_static/lib/nprogress/test/index.html
new file mode 100644
index 0000000..5479d26
--- /dev/null
+++ b/public/static/admin_static/lib/nprogress/test/index.html
@@ -0,0 +1,24 @@
+
+
+
+
+ Nprogress tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/static/admin_static/lib/nprogress/test/test.js b/public/static/admin_static/lib/nprogress/test/test.js
new file mode 100644
index 0000000..a381b09
--- /dev/null
+++ b/public/static/admin_static/lib/nprogress/test/test.js
@@ -0,0 +1,175 @@
+(function() {
+ if (typeof process === 'object') {
+ require('mocha-jsdom')();
+ }
+
+ var root = this;
+ var assert = (root.chai || require('chai')).assert;
+
+ describe('NProgress', function() {
+ var $, NProgress;
+
+ beforeEach(function() {
+ $ = root.jQuery || require('jquery');
+ NProgress = root.NProgress || require('../nprogress');
+
+ this.settings = $.extend({}, NProgress.settings);
+ });
+
+ afterEach(function() {
+ $("#nprogress").remove();
+ $('html').attr('class', '');
+ NProgress.status = null;
+
+ // Restore settings
+ $.extend(NProgress.settings, this.settings);
+ });
+
+ describe('.set()', function() {
+ it('.set(0) must render', function(done) {
+ NProgress.set(0);
+ assert.equal($("#nprogress").length, 1);
+ assert.equal($("#nprogress .bar").length, 1);
+ assert.equal($("#nprogress .peg").length, 1);
+ assert.equal($("#nprogress .spinner").length, 1);
+ done();
+ });
+
+ it('.set(1) should appear and disappear', function(done) {
+ NProgress.configure({ speed: 10 });
+ NProgress.set(0).set(1);
+ assert.equal($("#nprogress").length, 1);
+
+ setTimeout(function() {
+ assert.equal($("#nprogress").length, 0);
+ done();
+ }, 70);
+ });
+
+ it('must respect minimum', function() {
+ NProgress.set(0);
+ assert.equal(NProgress.status, NProgress.settings.minimum);
+ });
+
+ it('must clamp to minimum', function() {
+ NProgress.set(-100);
+ assert.equal(NProgress.status, NProgress.settings.minimum);
+ });
+
+ it('must clamp to maximum', function() {
+ NProgress.set(456);
+ assert.equal(NProgress.status, null);
+ });
+ });
+
+ // ----
+
+ describe('.start()', function() {
+ it('must render', function(done) {
+ NProgress.start();
+ assert.equal($("#nprogress").length, 1);
+ done();
+ });
+
+ it('must respect minimum', function() {
+ NProgress.start();
+ assert.equal(NProgress.status, NProgress.settings.minimum);
+ });
+
+ it('must be attached to specified parent', function() {
+ var test = $('', {id: 'test'}).appendTo('body');
+ NProgress.configure({parent: '#test'});
+ NProgress.start();
+ assert.isTrue($("#nprogress").parent().is(test));
+ assert.isTrue($(NProgress.settings.parent).hasClass("nprogress-custom-parent"));
+ });
+ });
+
+ // ----
+
+ describe('.done()', function() {
+ it('must not render without start', function(done) {
+ NProgress.done();
+ assert.equal($("#nprogress").length, 0);
+ done();
+ });
+
+ it('.done(true) must render', function(done) {
+ NProgress.done(true);
+ assert.equal($("#nprogress").length, 1);
+ done();
+ });
+ });
+
+ // ----
+
+ describe('.remove()', function() {
+ it('should be removed from the parent', function() {
+ NProgress.set(1);
+ NProgress.remove();
+
+ var parent = $(NProgress.settings.parent);
+ assert.isFalse(parent.hasClass('nprogress-custom-parent'));
+ assert.equal(parent.find('#nprogress').length, 0);
+ });
+ });
+
+ // ----
+
+ describe('.inc()', function() {
+ it('should render', function() {
+ NProgress.inc();
+ assert.equal($("#nprogress").length, 1);
+ });
+
+ it('should start with minimum', function() {
+ NProgress.inc();
+ assert.equal(NProgress.status, NProgress.settings.minimum);
+ });
+
+ it('should increment', function() {
+ NProgress.start();
+ var start = NProgress.status;
+
+ NProgress.inc();
+ assert.operator(NProgress.status, '>', start);
+ });
+
+ it('should never reach 1.0', function() {
+ for (var i=0; i<100; ++i) { NProgress.inc(); }
+ assert.operator(NProgress.status, '<', 1.0);
+ });
+ });
+
+ // -----
+
+ describe('.configure()', function() {
+ it('should work', function() {
+ NProgress.configure({ minimum: 0.5 });
+ assert.equal(NProgress.settings.minimum, 0.5);
+ });
+ });
+
+ // ----
+
+ describe('.configure(showSpinner)', function() {
+ it('should render spinner by default', function() {
+ NProgress.start();
+
+ assert.equal($("#nprogress .spinner").length, 1);
+ });
+
+ it('should be true by default', function() {
+ assert.equal(NProgress.settings.showSpinner, true);
+ });
+
+ it('should hide (on false)', function() {
+ NProgress.configure({ showSpinner: false });
+ NProgress.start();
+
+ assert.equal($("#nprogress .spinner").length, 0);
+ });
+ });
+ });
+
+})();
diff --git a/public/static/admin_static/lib/ueditor/dialogs/anchor/anchor.html b/public/static/admin_static/lib/ueditor/dialogs/anchor/anchor.html
new file mode 100644
index 0000000..f277847
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/anchor/anchor.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/attachment.css b/public/static/admin_static/lib/ueditor/dialogs/attachment/attachment.css
new file mode 100644
index 0000000..548b428
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/attachment/attachment.css
@@ -0,0 +1,681 @@
+@charset "utf-8";
+/* dialog样式 */
+.wrapper {
+ zoom: 1;
+ width: 630px;
+ *width: 626px;
+ height: 380px;
+ margin: 0 auto;
+ padding: 10px;
+ position: relative;
+ font-family: sans-serif;
+}
+
+/*tab样式框大小*/
+.tabhead {
+ float:left;
+}
+.tabbody {
+ width: 100%;
+ height: 346px;
+ position: relative;
+ clear: both;
+}
+
+.tabbody .panel {
+ position: absolute;
+ width: 0;
+ height: 0;
+ background: #fff;
+ overflow: hidden;
+ display: none;
+}
+
+.tabbody .panel.focus {
+ width: 100%;
+ height: 346px;
+ display: block;
+}
+
+/* 上传附件 */
+.tabbody #upload.panel {
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ position: absolute !important;
+ clip: rect(1px, 1px, 1px, 1px);
+ background: #fff;
+ display: block;
+}
+
+.tabbody #upload.panel.focus {
+ width: 100%;
+ height: 346px;
+ display: block;
+ clip: auto;
+}
+
+#upload .queueList {
+ margin: 0;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ overflow: hidden;
+}
+
+#upload p {
+ margin: 0;
+}
+
+.element-invisible {
+ width: 0 !important;
+ height: 0 !important;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+ position: absolute !important;
+ clip: rect(1px, 1px, 1px, 1px);
+}
+
+#upload .placeholder {
+ margin: 10px;
+ border: 2px dashed #e6e6e6;
+ *border: 0px dashed #e6e6e6;
+ height: 172px;
+ padding-top: 150px;
+ text-align: center;
+ background: url(./images/image.png) center 70px no-repeat;
+ color: #cccccc;
+ font-size: 18px;
+ position: relative;
+ top:0;
+ *top: 10px;
+}
+
+#upload .placeholder .webuploader-pick {
+ font-size: 18px;
+ background: #00b7ee;
+ border-radius: 3px;
+ line-height: 44px;
+ padding: 0 30px;
+ *width: 120px;
+ color: #fff;
+ display: inline-block;
+ margin: 0 auto 20px auto;
+ cursor: pointer;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+}
+
+#upload .placeholder .webuploader-pick-hover {
+ background: #00a2d4;
+}
+
+
+#filePickerContainer {
+ text-align: center;
+}
+
+#upload .placeholder .flashTip {
+ color: #666666;
+ font-size: 12px;
+ position: absolute;
+ width: 100%;
+ text-align: center;
+ bottom: 20px;
+}
+
+#upload .placeholder .flashTip a {
+ color: #0785d1;
+ text-decoration: none;
+}
+
+#upload .placeholder .flashTip a:hover {
+ text-decoration: underline;
+}
+
+#upload .placeholder.webuploader-dnd-over {
+ border-color: #999999;
+}
+
+#upload .filelist {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ overflow-x: hidden;
+ overflow-y: auto;
+ position: relative;
+ height: 300px;
+}
+
+#upload .filelist:after {
+ content: '';
+ display: block;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ clear: both;
+}
+
+#upload .filelist li {
+ width: 113px;
+ height: 113px;
+ background: url(./images/bg.png);
+ text-align: center;
+ margin: 9px 0 0 9px;
+ *margin: 6px 0 0 6px;
+ position: relative;
+ display: block;
+ float: left;
+ overflow: hidden;
+ font-size: 12px;
+}
+
+#upload .filelist li p.log {
+ position: relative;
+ top: -45px;
+}
+
+#upload .filelist li p.title {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ top: 5px;
+ text-indent: 5px;
+ text-align: left;
+}
+
+#upload .filelist li p.progress {
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ left: 0;
+ height: 8px;
+ overflow: hidden;
+ z-index: 50;
+ margin: 0;
+ border-radius: 0;
+ background: none;
+ -webkit-box-shadow: 0 0 0;
+}
+
+#upload .filelist li p.progress span {
+ display: none;
+ overflow: hidden;
+ width: 0;
+ height: 100%;
+ background: #1483d8 url(./images/progress.png) repeat-x;
+
+ -webit-transition: width 200ms linear;
+ -moz-transition: width 200ms linear;
+ -o-transition: width 200ms linear;
+ -ms-transition: width 200ms linear;
+ transition: width 200ms linear;
+
+ -webkit-animation: progressmove 2s linear infinite;
+ -moz-animation: progressmove 2s linear infinite;
+ -o-animation: progressmove 2s linear infinite;
+ -ms-animation: progressmove 2s linear infinite;
+ animation: progressmove 2s linear infinite;
+
+ -webkit-transform: translateZ(0);
+}
+
+@-webkit-keyframes progressmove {
+ 0% {
+ background-position: 0 0;
+ }
+ 100% {
+ background-position: 17px 0;
+ }
+}
+
+@-moz-keyframes progressmove {
+ 0% {
+ background-position: 0 0;
+ }
+ 100% {
+ background-position: 17px 0;
+ }
+}
+
+@keyframes progressmove {
+ 0% {
+ background-position: 0 0;
+ }
+ 100% {
+ background-position: 17px 0;
+ }
+}
+
+#upload .filelist li p.imgWrap {
+ position: relative;
+ z-index: 2;
+ line-height: 113px;
+ vertical-align: middle;
+ overflow: hidden;
+ width: 113px;
+ height: 113px;
+
+ -webkit-transform-origin: 50% 50%;
+ -moz-transform-origin: 50% 50%;
+ -o-transform-origin: 50% 50%;
+ -ms-transform-origin: 50% 50%;
+ transform-origin: 50% 50%;
+
+ -webit-transition: 200ms ease-out;
+ -moz-transition: 200ms ease-out;
+ -o-transition: 200ms ease-out;
+ -ms-transition: 200ms ease-out;
+ transition: 200ms ease-out;
+}
+#upload .filelist li p.imgWrap.notimage {
+ margin-top: 0;
+ width: 111px;
+ height: 111px;
+ border: 1px #eeeeee solid;
+}
+#upload .filelist li p.imgWrap.notimage i.file-preview {
+ margin-top: 15px;
+}
+
+#upload .filelist li img {
+ width: 100%;
+}
+
+#upload .filelist li p.error {
+ background: #f43838;
+ color: #fff;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ height: 28px;
+ line-height: 28px;
+ width: 100%;
+ z-index: 100;
+ display:none;
+}
+
+#upload .filelist li .success {
+ display: block;
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ height: 40px;
+ width: 100%;
+ z-index: 200;
+ background: url(./images/success.png) no-repeat right bottom;
+ background-image: url(./images/success.gif) \9;
+}
+
+#upload .filelist li.filePickerBlock {
+ width: 113px;
+ height: 113px;
+ background: url(./images/image.png) no-repeat center 12px;
+ border: 1px solid #eeeeee;
+ border-radius: 0;
+}
+#upload .filelist li.filePickerBlock div.webuploader-pick {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ opacity: 0;
+ background: none;
+ font-size: 0;
+}
+
+#upload .filelist div.file-panel {
+ position: absolute;
+ height: 0;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0;
+ background: rgba(0, 0, 0, 0.5);
+ width: 100%;
+ top: 0;
+ left: 0;
+ overflow: hidden;
+ z-index: 300;
+}
+
+#upload .filelist div.file-panel span {
+ width: 24px;
+ height: 24px;
+ display: inline;
+ float: right;
+ text-indent: -9999px;
+ overflow: hidden;
+ background: url(./images/icons.png) no-repeat;
+ background: url(./images/icons.gif) no-repeat \9;
+ margin: 5px 1px 1px;
+ cursor: pointer;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#upload .filelist div.file-panel span.rotateLeft {
+ display:none;
+ background-position: 0 -24px;
+}
+
+#upload .filelist div.file-panel span.rotateLeft:hover {
+ background-position: 0 0;
+}
+
+#upload .filelist div.file-panel span.rotateRight {
+ display:none;
+ background-position: -24px -24px;
+}
+
+#upload .filelist div.file-panel span.rotateRight:hover {
+ background-position: -24px 0;
+}
+
+#upload .filelist div.file-panel span.cancel {
+ background-position: -48px -24px;
+}
+
+#upload .filelist div.file-panel span.cancel:hover {
+ background-position: -48px 0;
+}
+
+#upload .statusBar {
+ height: 45px;
+ border-bottom: 1px solid #dadada;
+ margin: 0 10px;
+ padding: 0;
+ line-height: 45px;
+ vertical-align: middle;
+ position: relative;
+}
+
+#upload .statusBar .progress {
+ border: 1px solid #1483d8;
+ width: 198px;
+ background: #fff;
+ height: 18px;
+ position: absolute;
+ top: 12px;
+ display: none;
+ text-align: center;
+ line-height: 18px;
+ color: #6dbfff;
+ margin: 0 10px 0 0;
+}
+#upload .statusBar .progress span.percentage {
+ width: 0;
+ height: 100%;
+ left: 0;
+ top: 0;
+ background: #1483d8;
+ position: absolute;
+}
+#upload .statusBar .progress span.text {
+ position: relative;
+ z-index: 10;
+}
+
+#upload .statusBar .info {
+ display: inline-block;
+ font-size: 14px;
+ color: #666666;
+}
+
+#upload .statusBar .btns {
+ position: absolute;
+ top: 7px;
+ right: 0;
+ line-height: 30px;
+}
+
+#filePickerBtn {
+ display: inline-block;
+ float: left;
+}
+#upload .statusBar .btns .webuploader-pick,
+#upload .statusBar .btns .uploadBtn,
+#upload .statusBar .btns .uploadBtn.state-uploading,
+#upload .statusBar .btns .uploadBtn.state-paused {
+ background: #ffffff;
+ border: 1px solid #cfcfcf;
+ color: #565656;
+ padding: 0 18px;
+ display: inline-block;
+ border-radius: 3px;
+ margin-left: 10px;
+ cursor: pointer;
+ font-size: 14px;
+ float: left;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+#upload .statusBar .btns .webuploader-pick-hover,
+#upload .statusBar .btns .uploadBtn:hover,
+#upload .statusBar .btns .uploadBtn.state-uploading:hover,
+#upload .statusBar .btns .uploadBtn.state-paused:hover {
+ background: #f0f0f0;
+}
+
+#upload .statusBar .btns .uploadBtn,
+#upload .statusBar .btns .uploadBtn.state-paused{
+ background: #00b7ee;
+ color: #fff;
+ border-color: transparent;
+}
+#upload .statusBar .btns .uploadBtn:hover,
+#upload .statusBar .btns .uploadBtn.state-paused:hover{
+ background: #00a2d4;
+}
+
+#upload .statusBar .btns .uploadBtn.disabled {
+ pointer-events: none;
+ filter:alpha(opacity=60);
+ -moz-opacity:0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6;
+}
+
+
+
+/* 图片管理样式 */
+#online {
+ width: 100%;
+ height: 336px;
+ padding: 10px 0 0 0;
+}
+#online #fileList{
+ width: 100%;
+ height: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+ position: relative;
+}
+#online ul {
+ display: block;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+#online li {
+ float: left;
+ display: block;
+ list-style: none;
+ padding: 0;
+ width: 113px;
+ height: 113px;
+ margin: 0 0 9px 9px;
+ *margin: 0 0 6px 6px;
+ background-color: #eee;
+ overflow: hidden;
+ cursor: pointer;
+ position: relative;
+}
+#online li.clearFloat {
+ float: none;
+ clear: both;
+ display: block;
+ width:0;
+ height:0;
+ margin: 0;
+ padding: 0;
+}
+#online li img {
+ cursor: pointer;
+}
+#online li div.file-wrapper {
+ cursor: pointer;
+ position: absolute;
+ display: block;
+ width: 111px;
+ height: 111px;
+ border: 1px solid #eee;
+ background: url("./images/bg.png") repeat;
+}
+#online li div span.file-title{
+ display: block;
+ padding: 0 3px;
+ margin: 3px 0 0 0;
+ font-size: 12px;
+ height: 13px;
+ color: #555555;
+ text-align: center;
+ width: 107px;
+ white-space: nowrap;
+ word-break: break-all;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+#online li .icon {
+ cursor: pointer;
+ width: 113px;
+ height: 113px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 2;
+ border: 0;
+ background-repeat: no-repeat;
+}
+#online li .icon:hover {
+ width: 107px;
+ height: 107px;
+ border: 3px solid #1094fa;
+}
+#online li.selected .icon {
+ background-image: url(images/success.png);
+ background-image: url(images/success.gif) \9;
+ background-position: 75px 75px;
+}
+#online li.selected .icon:hover {
+ width: 107px;
+ height: 107px;
+ border: 3px solid #1094fa;
+ background-position: 72px 72px;
+}
+
+
+/* 在线文件的文件预览图标 */
+i.file-preview {
+ display: block;
+ margin: 10px auto;
+ width: 70px;
+ height: 70px;
+ background-image: url("./images/file-icons.png");
+ background-image: url("./images/file-icons.gif") \9;
+ background-position: -140px center;
+ background-repeat: no-repeat;
+}
+i.file-preview.file-type-dir{
+ background-position: 0 center;
+}
+i.file-preview.file-type-file{
+ background-position: -140px center;
+}
+i.file-preview.file-type-filelist{
+ background-position: -210px center;
+}
+i.file-preview.file-type-zip,
+i.file-preview.file-type-rar,
+i.file-preview.file-type-7z,
+i.file-preview.file-type-tar,
+i.file-preview.file-type-gz,
+i.file-preview.file-type-bz2{
+ background-position: -280px center;
+}
+i.file-preview.file-type-xls,
+i.file-preview.file-type-xlsx{
+ background-position: -350px center;
+}
+i.file-preview.file-type-doc,
+i.file-preview.file-type-docx{
+ background-position: -420px center;
+}
+i.file-preview.file-type-ppt,
+i.file-preview.file-type-pptx{
+ background-position: -490px center;
+}
+i.file-preview.file-type-vsd{
+ background-position: -560px center;
+}
+i.file-preview.file-type-pdf{
+ background-position: -630px center;
+}
+i.file-preview.file-type-txt,
+i.file-preview.file-type-md,
+i.file-preview.file-type-json,
+i.file-preview.file-type-htm,
+i.file-preview.file-type-xml,
+i.file-preview.file-type-html,
+i.file-preview.file-type-js,
+i.file-preview.file-type-css,
+i.file-preview.file-type-php,
+i.file-preview.file-type-jsp,
+i.file-preview.file-type-asp{
+ background-position: -700px center;
+}
+i.file-preview.file-type-apk{
+ background-position: -770px center;
+}
+i.file-preview.file-type-exe{
+ background-position: -840px center;
+}
+i.file-preview.file-type-ipa{
+ background-position: -910px center;
+}
+i.file-preview.file-type-mp4,
+i.file-preview.file-type-swf,
+i.file-preview.file-type-mkv,
+i.file-preview.file-type-avi,
+i.file-preview.file-type-flv,
+i.file-preview.file-type-mov,
+i.file-preview.file-type-mpg,
+i.file-preview.file-type-mpeg,
+i.file-preview.file-type-ogv,
+i.file-preview.file-type-webm,
+i.file-preview.file-type-rm,
+i.file-preview.file-type-rmvb{
+ background-position: -980px center;
+}
+i.file-preview.file-type-ogg,
+i.file-preview.file-type-wav,
+i.file-preview.file-type-wmv,
+i.file-preview.file-type-mid,
+i.file-preview.file-type-mp3{
+ background-position: -1050px center;
+}
+i.file-preview.file-type-jpg,
+i.file-preview.file-type-jpeg,
+i.file-preview.file-type-gif,
+i.file-preview.file-type-bmp,
+i.file-preview.file-type-png,
+i.file-preview.file-type-psd{
+ background-position: -140px center;
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/attachment.html b/public/static/admin_static/lib/ueditor/dialogs/attachment/attachment.html
new file mode 100644
index 0000000..2ae9282
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/attachment/attachment.html
@@ -0,0 +1,60 @@
+
+
+
+
+
ueditor图片对话框
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/attachment.js b/public/static/admin_static/lib/ueditor/dialogs/attachment/attachment.js
new file mode 100644
index 0000000..ce3be63
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/attachment/attachment.js
@@ -0,0 +1,754 @@
+/**
+ * User: Jinqn
+ * Date: 14-04-08
+ * Time: 下午16:34
+ * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片
+ */
+
+(function () {
+
+ var uploadFile,
+ onlineFile;
+
+ window.onload = function () {
+ initTabs();
+ initButtons();
+ };
+
+ /* 初始化tab标签 */
+ function initTabs() {
+ var tabs = $G('tabhead').children;
+ for (var i = 0; i < tabs.length; i++) {
+ domUtils.on(tabs[i], "click", function (e) {
+ var target = e.target || e.srcElement;
+ setTabFocus(target.getAttribute('data-content-id'));
+ });
+ }
+
+ setTabFocus('upload');
+ }
+
+ /* 初始化tabbody */
+ function setTabFocus(id) {
+ if(!id) return;
+ var i, bodyId, tabs = $G('tabhead').children;
+ for (i = 0; i < tabs.length; i++) {
+ bodyId = tabs[i].getAttribute('data-content-id')
+ if (bodyId == id) {
+ domUtils.addClass(tabs[i], 'focus');
+ domUtils.addClass($G(bodyId), 'focus');
+ } else {
+ domUtils.removeClasses(tabs[i], 'focus');
+ domUtils.removeClasses($G(bodyId), 'focus');
+ }
+ }
+ switch (id) {
+ case 'upload':
+ uploadFile = uploadFile || new UploadFile('queueList');
+ break;
+ case 'online':
+ onlineFile = onlineFile || new OnlineFile('fileList');
+ break;
+ }
+ }
+
+ /* 初始化onok事件 */
+ function initButtons() {
+
+ dialog.onok = function () {
+ var list = [], id, tabs = $G('tabhead').children;
+ for (var i = 0; i < tabs.length; i++) {
+ if (domUtils.hasClass(tabs[i], 'focus')) {
+ id = tabs[i].getAttribute('data-content-id');
+ break;
+ }
+ }
+
+ switch (id) {
+ case 'upload':
+ list = uploadFile.getInsertList();
+ var count = uploadFile.getQueueCount();
+ if (count) {
+ $('.info', '#queueList').html('
' + '还有2个未上传文件'.replace(/[\d]/, count) + ' ');
+ return false;
+ }
+ break;
+ case 'online':
+ list = onlineFile.getInsertList();
+ break;
+ }
+
+ editor.execCommand('insertfile', list);
+ };
+ }
+
+
+ /* 上传附件 */
+ function UploadFile(target) {
+ this.$wrap = target.constructor == String ? $('#' + target) : $(target);
+ this.init();
+ }
+ UploadFile.prototype = {
+ init: function () {
+ this.fileList = [];
+ this.initContainer();
+ this.initUploader();
+ },
+ initContainer: function () {
+ this.$queue = this.$wrap.find('.filelist');
+ },
+ /* 初始化容器 */
+ initUploader: function () {
+ var _this = this,
+ $ = jQuery, // just in case. Make sure it's not an other libaray.
+ $wrap = _this.$wrap,
+ // 图片容器
+ $queue = $wrap.find('.filelist'),
+ // 状态栏,包括进度和控制按钮
+ $statusBar = $wrap.find('.statusBar'),
+ // 文件总体选择信息。
+ $info = $statusBar.find('.info'),
+ // 上传按钮
+ $upload = $wrap.find('.uploadBtn'),
+ // 上传按钮
+ $filePickerBtn = $wrap.find('.filePickerBtn'),
+ // 上传按钮
+ $filePickerBlock = $wrap.find('.filePickerBlock'),
+ // 没选择文件之前的内容。
+ $placeHolder = $wrap.find('.placeholder'),
+ // 总体进度条
+ $progress = $statusBar.find('.progress').hide(),
+ // 添加的文件数量
+ fileCount = 0,
+ // 添加的文件总大小
+ fileSize = 0,
+ // 优化retina, 在retina下这个值是2
+ ratio = window.devicePixelRatio || 1,
+ // 缩略图大小
+ thumbnailWidth = 113 * ratio,
+ thumbnailHeight = 113 * ratio,
+ // 可能有pedding, ready, uploading, confirm, done.
+ state = '',
+ // 所有文件的进度信息,key为file id
+ percentages = {},
+ supportTransition = (function () {
+ var s = document.createElement('p').style,
+ r = 'transition' in s ||
+ 'WebkitTransition' in s ||
+ 'MozTransition' in s ||
+ 'msTransition' in s ||
+ 'OTransition' in s;
+ s = null;
+ return r;
+ })(),
+ // WebUploader实例
+ uploader,
+ actionUrl = editor.getActionUrl(editor.getOpt('fileActionName')),
+ fileMaxSize = editor.getOpt('fileMaxSize'),
+ acceptExtensions = (editor.getOpt('fileAllowFiles') || []).join('').replace(/\./g, ',').replace(/^[,]/, '');;
+
+ if (!WebUploader.Uploader.support()) {
+ $('#filePickerReady').after($('
').html(lang.errorNotSupport)).hide();
+ return;
+ } else if (!editor.getOpt('fileActionName')) {
+ $('#filePickerReady').after($('
').html(lang.errorLoadConfig)).hide();
+ return;
+ }
+
+ uploader = _this.uploader = WebUploader.create({
+ pick: {
+ id: '#filePickerReady',
+ label: lang.uploadSelectFile
+ },
+ swf: '../../third-party/webuploader/Uploader.swf',
+ server: actionUrl,
+ fileVal: editor.getOpt('fileFieldName'),
+ duplicate: true,
+ fileSingleSizeLimit: fileMaxSize,
+ compress: false
+ });
+ uploader.addButton({
+ id: '#filePickerBlock'
+ });
+ uploader.addButton({
+ id: '#filePickerBtn',
+ label: lang.uploadAddFile
+ });
+
+ setState('pedding');
+
+ // 当有文件添加进来时执行,负责view的创建
+ function addFile(file) {
+ var $li = $('
' +
+ '' + file.name + '
' +
+ '
' +
+ '
' +
+ ' '),
+
+ $btns = $('
' +
+ '' + lang.uploadDelete + ' ' +
+ '' + lang.uploadTurnRight + ' ' +
+ '' + lang.uploadTurnLeft + '
').appendTo($li),
+ $prgress = $li.find('p.progress span'),
+ $wrap = $li.find('p.imgWrap'),
+ $info = $('
').hide().appendTo($li),
+
+ showError = function (code) {
+ switch (code) {
+ case 'exceed_size':
+ text = lang.errorExceedSize;
+ break;
+ case 'interrupt':
+ text = lang.errorInterrupt;
+ break;
+ case 'http':
+ text = lang.errorHttp;
+ break;
+ case 'not_allow_type':
+ text = lang.errorFileType;
+ break;
+ default:
+ text = lang.errorUploadRetry;
+ break;
+ }
+ $info.text(text).show();
+ };
+
+ if (file.getStatus() === 'invalid') {
+ showError(file.statusText);
+ } else {
+ $wrap.text(lang.uploadPreview);
+ if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|'+file.ext.toLowerCase()+'|') == -1) {
+ $wrap.empty().addClass('notimage').append('
' +
+ '
' + file.name + ' ');
+ } else {
+ if (browser.ie && browser.version <= 7) {
+ $wrap.text(lang.uploadNoPreview);
+ } else {
+ uploader.makeThumb(file, function (error, src) {
+ if (error || !src) {
+ $wrap.text(lang.uploadNoPreview);
+ } else {
+ var $img = $('
');
+ $wrap.empty().append($img);
+ $img.on('error', function () {
+ $wrap.text(lang.uploadNoPreview);
+ });
+ }
+ }, thumbnailWidth, thumbnailHeight);
+ }
+ }
+ percentages[ file.id ] = [ file.size, 0 ];
+ file.rotation = 0;
+
+ /* 检查文件格式 */
+ if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {
+ showError('not_allow_type');
+ uploader.removeFile(file);
+ }
+ }
+
+ file.on('statuschange', function (cur, prev) {
+ if (prev === 'progress') {
+ $prgress.hide().width(0);
+ } else if (prev === 'queued') {
+ $li.off('mouseenter mouseleave');
+ $btns.remove();
+ }
+ // 成功
+ if (cur === 'error' || cur === 'invalid') {
+ showError(file.statusText);
+ percentages[ file.id ][ 1 ] = 1;
+ } else if (cur === 'interrupt') {
+ showError('interrupt');
+ } else if (cur === 'queued') {
+ percentages[ file.id ][ 1 ] = 0;
+ } else if (cur === 'progress') {
+ $info.hide();
+ $prgress.css('display', 'block');
+ } else if (cur === 'complete') {
+ }
+
+ $li.removeClass('state-' + prev).addClass('state-' + cur);
+ });
+
+ $li.on('mouseenter', function () {
+ $btns.stop().animate({height: 30});
+ });
+ $li.on('mouseleave', function () {
+ $btns.stop().animate({height: 0});
+ });
+
+ $btns.on('click', 'span', function () {
+ var index = $(this).index(),
+ deg;
+
+ switch (index) {
+ case 0:
+ uploader.removeFile(file);
+ return;
+ case 1:
+ file.rotation += 90;
+ break;
+ case 2:
+ file.rotation -= 90;
+ break;
+ }
+
+ if (supportTransition) {
+ deg = 'rotate(' + file.rotation + 'deg)';
+ $wrap.css({
+ '-webkit-transform': deg,
+ '-mos-transform': deg,
+ '-o-transform': deg,
+ 'transform': deg
+ });
+ } else {
+ $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');
+ }
+
+ });
+
+ $li.insertBefore($filePickerBlock);
+ }
+
+ // 负责view的销毁
+ function removeFile(file) {
+ var $li = $('#' + file.id);
+ delete percentages[ file.id ];
+ updateTotalProgress();
+ $li.off().find('.file-panel').off().end().remove();
+ }
+
+ function updateTotalProgress() {
+ var loaded = 0,
+ total = 0,
+ spans = $progress.children(),
+ percent;
+
+ $.each(percentages, function (k, v) {
+ total += v[ 0 ];
+ loaded += v[ 0 ] * v[ 1 ];
+ });
+
+ percent = total ? loaded / total : 0;
+
+ spans.eq(0).text(Math.round(percent * 100) + '%');
+ spans.eq(1).css('width', Math.round(percent * 100) + '%');
+ updateStatus();
+ }
+
+ function setState(val, files) {
+
+ if (val != state) {
+
+ var stats = uploader.getStats();
+
+ $upload.removeClass('state-' + state);
+ $upload.addClass('state-' + val);
+
+ switch (val) {
+
+ /* 未选择文件 */
+ case 'pedding':
+ $queue.addClass('element-invisible');
+ $statusBar.addClass('element-invisible');
+ $placeHolder.removeClass('element-invisible');
+ $progress.hide(); $info.hide();
+ uploader.refresh();
+ break;
+
+ /* 可以开始上传 */
+ case 'ready':
+ $placeHolder.addClass('element-invisible');
+ $queue.removeClass('element-invisible');
+ $statusBar.removeClass('element-invisible');
+ $progress.hide(); $info.show();
+ $upload.text(lang.uploadStart);
+ uploader.refresh();
+ break;
+
+ /* 上传中 */
+ case 'uploading':
+ $progress.show(); $info.hide();
+ $upload.text(lang.uploadPause);
+ break;
+
+ /* 暂停上传 */
+ case 'paused':
+ $progress.show(); $info.hide();
+ $upload.text(lang.uploadContinue);
+ break;
+
+ case 'confirm':
+ $progress.show(); $info.hide();
+ $upload.text(lang.uploadStart);
+
+ stats = uploader.getStats();
+ if (stats.successNum && !stats.uploadFailNum) {
+ setState('finish');
+ return;
+ }
+ break;
+
+ case 'finish':
+ $progress.hide(); $info.show();
+ if (stats.uploadFailNum) {
+ $upload.text(lang.uploadRetry);
+ } else {
+ $upload.text(lang.uploadStart);
+ }
+ break;
+ }
+
+ state = val;
+ updateStatus();
+
+ }
+
+ if (!_this.getQueueCount()) {
+ $upload.addClass('disabled')
+ } else {
+ $upload.removeClass('disabled')
+ }
+
+ }
+
+ function updateStatus() {
+ var text = '', stats;
+
+ if (state === 'ready') {
+ text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));
+ } else if (state === 'confirm') {
+ stats = uploader.getStats();
+ if (stats.uploadFailNum) {
+ text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);
+ }
+ } else {
+ stats = uploader.getStats();
+ text = lang.updateStatusFinish.replace('_', fileCount).
+ replace('_KB', WebUploader.formatSize(fileSize)).
+ replace('_', stats.successNum);
+
+ if (stats.uploadFailNum) {
+ text += lang.updateStatusError.replace('_', stats.uploadFailNum);
+ }
+ }
+
+ $info.html(text);
+ }
+
+ uploader.on('fileQueued', function (file) {
+ fileCount++;
+ fileSize += file.size;
+
+ if (fileCount === 1) {
+ $placeHolder.addClass('element-invisible');
+ $statusBar.show();
+ }
+
+ addFile(file);
+ });
+
+ uploader.on('fileDequeued', function (file) {
+ fileCount--;
+ fileSize -= file.size;
+
+ removeFile(file);
+ updateTotalProgress();
+ });
+
+ uploader.on('filesQueued', function (file) {
+ if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {
+ setState('ready');
+ }
+ updateTotalProgress();
+ });
+
+ uploader.on('all', function (type, files) {
+ switch (type) {
+ case 'uploadFinished':
+ setState('confirm', files);
+ break;
+ case 'startUpload':
+ /* 添加额外的GET参数 */
+ var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',
+ url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params);
+ uploader.option('server', url);
+ setState('uploading', files);
+ break;
+ case 'stopUpload':
+ setState('paused', files);
+ break;
+ }
+ });
+
+ uploader.on('uploadBeforeSend', function (file, data, header) {
+ //这里可以通过data对象添加POST参数
+ header['X_Requested_With'] = 'XMLHttpRequest';
+ });
+
+ uploader.on('uploadProgress', function (file, percentage) {
+ var $li = $('#' + file.id),
+ $percent = $li.find('.progress span');
+
+ $percent.css('width', percentage * 100 + '%');
+ percentages[ file.id ][ 1 ] = percentage;
+ updateTotalProgress();
+ });
+
+ uploader.on('uploadSuccess', function (file, ret) {
+ var $file = $('#' + file.id);
+ try {
+ var responseText = (ret._raw || ret),
+ json = utils.str2json(responseText);
+ if (json.state == 'SUCCESS') {
+ _this.fileList.push(json);
+ $file.append('
');
+ } else {
+ $file.find('.error').text(json.state).show();
+ }
+ } catch (e) {
+ $file.find('.error').text(lang.errorServerUpload).show();
+ }
+ });
+
+ uploader.on('uploadError', function (file, code) {
+ });
+ uploader.on('error', function (code, file) {
+ if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {
+ addFile(file);
+ }
+ });
+ uploader.on('uploadComplete', function (file, ret) {
+ });
+
+ $upload.on('click', function () {
+ if ($(this).hasClass('disabled')) {
+ return false;
+ }
+
+ if (state === 'ready') {
+ uploader.upload();
+ } else if (state === 'paused') {
+ uploader.upload();
+ } else if (state === 'uploading') {
+ uploader.stop();
+ }
+ });
+
+ $upload.addClass('state-' + state);
+ updateTotalProgress();
+ },
+ getQueueCount: function () {
+ var file, i, status, readyFile = 0, files = this.uploader.getFiles();
+ for (i = 0; file = files[i++]; ) {
+ status = file.getStatus();
+ if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;
+ }
+ return readyFile;
+ },
+ getInsertList: function () {
+ var i, link, data, list = [],
+ prefix = editor.getOpt('fileUrlPrefix');
+ for (i = 0; i < this.fileList.length; i++) {
+ data = this.fileList[i];
+ link = data.url;
+ list.push({
+ title: data.original || link.substr(link.lastIndexOf('/') + 1),
+ url: prefix + link
+ });
+ }
+ return list;
+ }
+ };
+
+
+ /* 在线附件 */
+ function OnlineFile(target) {
+ this.container = utils.isString(target) ? document.getElementById(target) : target;
+ this.init();
+ }
+ OnlineFile.prototype = {
+ init: function () {
+ this.initContainer();
+ this.initEvents();
+ this.initData();
+ },
+ /* 初始化容器 */
+ initContainer: function () {
+ this.container.innerHTML = '';
+ this.list = document.createElement('ul');
+ this.clearFloat = document.createElement('li');
+
+ domUtils.addClass(this.list, 'list');
+ domUtils.addClass(this.clearFloat, 'clearFloat');
+
+ this.list.appendChild(this.clearFloat);
+ this.container.appendChild(this.list);
+ },
+ /* 初始化滚动事件,滚动到地步自动拉取数据 */
+ initEvents: function () {
+ var _this = this;
+
+ /* 滚动拉取图片 */
+ domUtils.on($G('fileList'), 'scroll', function(e){
+ var panel = this;
+ if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
+ _this.getFileData();
+ }
+ });
+ /* 选中图片 */
+ domUtils.on(this.list, 'click', function (e) {
+ var target = e.target || e.srcElement,
+ li = target.parentNode;
+
+ if (li.tagName.toLowerCase() == 'li') {
+ if (domUtils.hasClass(li, 'selected')) {
+ domUtils.removeClasses(li, 'selected');
+ } else {
+ domUtils.addClass(li, 'selected');
+ }
+ }
+ });
+ },
+ /* 初始化第一次的数据 */
+ initData: function () {
+
+ /* 拉取数据需要使用的值 */
+ this.state = 0;
+ this.listSize = editor.getOpt('fileManagerListSize');
+ this.listIndex = 0;
+ this.listEnd = false;
+
+ /* 第一次拉取数据 */
+ this.getFileData();
+ },
+ /* 向后台拉取图片列表数据 */
+ getFileData: function () {
+ var _this = this;
+
+ if(!_this.listEnd && !this.isLoadingData) {
+ this.isLoadingData = true;
+ ajax.request(editor.getActionUrl(editor.getOpt('fileManagerActionName')), {
+ timeout: 100000,
+ data: utils.extend({
+ start: this.listIndex,
+ size: this.listSize
+ }, editor.queryCommandValue('serverparam')),
+ method: 'get',
+ onsuccess: function (r) {
+ try {
+ var json = eval('(' + r.responseText + ')');
+ if (json.state == 'SUCCESS') {
+ _this.pushData(json.list);
+ _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
+ if(_this.listIndex >= json.total) {
+ _this.listEnd = true;
+ }
+ _this.isLoadingData = false;
+ }
+ } catch (e) {
+ if(r.responseText.indexOf('ue_separate_ue') != -1) {
+ var list = r.responseText.split(r.responseText);
+ _this.pushData(list);
+ _this.listIndex = parseInt(list.length);
+ _this.listEnd = true;
+ _this.isLoadingData = false;
+ }
+ }
+ },
+ onerror: function () {
+ _this.isLoadingData = false;
+ }
+ });
+ }
+ },
+ /* 添加图片到列表界面上 */
+ pushData: function (list) {
+ var i, item, img, filetype, preview, icon, _this = this,
+ urlPrefix = editor.getOpt('fileManagerUrlPrefix');
+ for (i = 0; i < list.length; i++) {
+ if(list[i] && list[i].url) {
+ item = document.createElement('li');
+ icon = document.createElement('span');
+ filetype = list[i].url.substr(list[i].url.lastIndexOf('.') + 1);
+
+ if ( "png|jpg|jpeg|gif|bmp".indexOf(filetype) != -1 ) {
+ preview = document.createElement('img');
+ domUtils.on(preview, 'load', (function(image){
+ return function(){
+ _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
+ };
+ })(preview));
+ preview.width = 113;
+ preview.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
+ } else {
+ var ic = document.createElement('i'),
+ textSpan = document.createElement('span');
+ textSpan.innerHTML = list[i].url.substr(list[i].url.lastIndexOf('/') + 1);
+ preview = document.createElement('div');
+ preview.appendChild(ic);
+ preview.appendChild(textSpan);
+ domUtils.addClass(preview, 'file-wrapper');
+ domUtils.addClass(textSpan, 'file-title');
+ domUtils.addClass(ic, 'file-type-' + filetype);
+ domUtils.addClass(ic, 'file-preview');
+ }
+ domUtils.addClass(icon, 'icon');
+ item.setAttribute('data-url', urlPrefix + list[i].url);
+ if (list[i].original) {
+ item.setAttribute('data-title', list[i].original);
+ }
+
+ item.appendChild(preview);
+ item.appendChild(icon);
+ this.list.insertBefore(item, this.clearFloat);
+ }
+ }
+ },
+ /* 改变图片大小 */
+ scale: function (img, w, h, type) {
+ var ow = img.width,
+ oh = img.height;
+
+ if (type == 'justify') {
+ if (ow >= oh) {
+ img.width = w;
+ img.height = h * oh / ow;
+ img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
+ } else {
+ img.width = w * ow / oh;
+ img.height = h;
+ img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
+ }
+ } else {
+ if (ow >= oh) {
+ img.width = w * ow / oh;
+ img.height = h;
+ img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
+ } else {
+ img.width = w;
+ img.height = h * oh / ow;
+ img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
+ }
+ }
+ },
+ getInsertList: function () {
+ var i, lis = this.list.children, list = [];
+ for (i = 0; i < lis.length; i++) {
+ if (domUtils.hasClass(lis[i], 'selected')) {
+ var url = lis[i].getAttribute('data-url');
+ var title = lis[i].getAttribute('data-title') || url.substr(url.lastIndexOf('/') + 1);
+ list.push({
+ title: title,
+ url: url
+ });
+ }
+ }
+ return list;
+ }
+ };
+
+
+})();
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_chm.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_chm.gif
new file mode 100644
index 0000000..9ca4fb6
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_chm.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_default.png b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_default.png
new file mode 100644
index 0000000..50ac1cb
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_default.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_doc.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_doc.gif
new file mode 100644
index 0000000..206fede
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_doc.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_exe.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_exe.gif
new file mode 100644
index 0000000..2e3b7a2
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_exe.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_jpg.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_jpg.gif
new file mode 100644
index 0000000..5d5dec0
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_jpg.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_mp3.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_mp3.gif
new file mode 100644
index 0000000..b351a1f
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_mp3.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_mv.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_mv.gif
new file mode 100644
index 0000000..26019b0
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_mv.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_pdf.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_pdf.gif
new file mode 100644
index 0000000..bbb65c8
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_pdf.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_ppt.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_ppt.gif
new file mode 100644
index 0000000..ccb26fb
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_ppt.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_psd.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_psd.gif
new file mode 100644
index 0000000..2e8743a
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_psd.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_rar.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_rar.gif
new file mode 100644
index 0000000..5359e46
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_rar.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_txt.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_txt.gif
new file mode 100644
index 0000000..e7b8dd2
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_txt.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_xls.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_xls.gif
new file mode 100644
index 0000000..e86c1c6
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/fileTypeImages/icon_xls.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/images/alignicon.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/alignicon.gif
new file mode 100644
index 0000000..005a5ac
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/alignicon.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/images/alignicon.png b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/alignicon.png
new file mode 100644
index 0000000..4b6c444
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/alignicon.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/images/bg.png b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/bg.png
new file mode 100644
index 0000000..580be0a
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/bg.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/images/file-icons.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/file-icons.gif
new file mode 100644
index 0000000..d8c02c2
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/file-icons.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/images/file-icons.png b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/file-icons.png
new file mode 100644
index 0000000..3ff82c8
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/file-icons.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/images/icons.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/icons.gif
new file mode 100644
index 0000000..78459de
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/icons.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/images/icons.png b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/icons.png
new file mode 100644
index 0000000..12e4700
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/icons.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/images/image.png b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/image.png
new file mode 100644
index 0000000..19699f6
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/image.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/images/progress.png b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/progress.png
new file mode 100644
index 0000000..717c486
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/progress.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/images/success.gif b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/success.gif
new file mode 100644
index 0000000..8d4f311
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/success.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/attachment/images/success.png b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/success.png
new file mode 100644
index 0000000..94f968d
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/attachment/images/success.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/background/background.css b/public/static/admin_static/lib/ueditor/dialogs/background/background.css
new file mode 100644
index 0000000..5c41fe9
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/background/background.css
@@ -0,0 +1,94 @@
+.wrapper{ width: 424px;margin: 10px auto; zoom:1;position: relative}
+.tabbody{height:225px;}
+.tabbody .panel { position: absolute;width:100%; height:100%;background: #fff; display: none;}
+.tabbody .focus { display: block;}
+
+body{font-size: 12px;color: #888;overflow: hidden;}
+input,label{vertical-align:middle}
+.clear{clear: both;}
+.pl{padding-left: 18px;padding-left: 23px\9;}
+
+#imageList {width: 420px;height: 215px;margin-top: 10px;overflow: hidden;overflow-y: auto;}
+#imageList div {float: left;width: 100px;height: 95px;margin: 5px 10px;}
+#imageList img {cursor: pointer;border: 2px solid white;}
+
+.bgarea{margin: 10px;padding: 5px;height: 84%;border: 1px solid #A8A297;}
+.content div{margin: 10px 0 10px 5px;}
+.content .iptradio{margin: 0px 5px 5px 0px;}
+.txt{width:280px;}
+
+.wrapcolor{height: 19px;}
+div.color{float: left;margin: 0;}
+#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;margin: 0;float: left;}
+div.alignment,#custom{margin-left: 23px;margin-left: 28px\9;}
+#custom input{height: 15px;min-height: 15px;width:20px;}
+#repeatType{width:100px;}
+
+
+/* 图片管理样式 */
+#imgManager {
+ width: 100%;
+ height: 225px;
+}
+#imgManager #imageList{
+ width: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+#imgManager ul {
+ display: block;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+#imgManager li {
+ float: left;
+ display: block;
+ list-style: none;
+ padding: 0;
+ width: 113px;
+ height: 113px;
+ margin: 9px 0 0 19px;
+ background-color: #eee;
+ overflow: hidden;
+ cursor: pointer;
+ position: relative;
+}
+#imgManager li.clearFloat {
+ float: none;
+ clear: both;
+ display: block;
+ width:0;
+ height:0;
+ margin: 0;
+ padding: 0;
+}
+#imgManager li img {
+ cursor: pointer;
+}
+#imgManager li .icon {
+ cursor: pointer;
+ width: 113px;
+ height: 113px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 2;
+ border: 0;
+ background-repeat: no-repeat;
+}
+#imgManager li .icon:hover {
+ width: 107px;
+ height: 107px;
+ border: 3px solid #1094fa;
+}
+#imgManager li.selected .icon {
+ background-image: url(images/success.png);
+ background-position: 75px 75px;
+}
+#imgManager li.selected .icon:hover {
+ width: 107px;
+ height: 107px;
+ border: 3px solid #1094fa;
+ background-position: 72px 72px;
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/background/background.html b/public/static/admin_static/lib/ueditor/dialogs/background/background.html
new file mode 100644
index 0000000..3cc2ac1
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/background/background.html
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/static/admin_static/lib/ueditor/dialogs/background/background.js b/public/static/admin_static/lib/ueditor/dialogs/background/background.js
new file mode 100644
index 0000000..9a4a131
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/background/background.js
@@ -0,0 +1,376 @@
+(function () {
+
+ var onlineImage,
+ backupStyle = editor.queryCommandValue('background');
+
+ window.onload = function () {
+ initTabs();
+ initColorSelector();
+ };
+
+ /* 初始化tab标签 */
+ function initTabs(){
+ var tabs = $G('tabHeads').children;
+ for (var i = 0; i < tabs.length; i++) {
+ domUtils.on(tabs[i], "click", function (e) {
+ var target = e.target || e.srcElement;
+ for (var j = 0; j < tabs.length; j++) {
+ if(tabs[j] == target){
+ tabs[j].className = "focus";
+ var contentId = tabs[j].getAttribute('data-content-id');
+ $G(contentId).style.display = "block";
+ if(contentId == 'imgManager') {
+ initImagePanel();
+ }
+ }else {
+ tabs[j].className = "";
+ $G(tabs[j].getAttribute('data-content-id')).style.display = "none";
+ }
+ }
+ });
+ }
+ }
+
+ /* 初始化颜色设置 */
+ function initColorSelector () {
+ var obj = editor.queryCommandValue('background');
+ if (obj) {
+ var color = obj['background-color'],
+ repeat = obj['background-repeat'] || 'repeat',
+ image = obj['background-image'] || '',
+ position = obj['background-position'] || 'center center',
+ pos = position.split(' '),
+ x = parseInt(pos[0]) || 0,
+ y = parseInt(pos[1]) || 0;
+
+ if(repeat == 'no-repeat' && (x || y)) repeat = 'self';
+
+ image = image.match(/url[\s]*\(([^\)]*)\)/);
+ image = image ? image[1]:'';
+ updateFormState('colored', color, image, repeat, x, y);
+ } else {
+ updateFormState();
+ }
+
+ var updateHandler = function () {
+ updateFormState();
+ updateBackground();
+ }
+ domUtils.on($G('nocolorRadio'), 'click', updateBackground);
+ domUtils.on($G('coloredRadio'), 'click', updateHandler);
+ domUtils.on($G('url'), 'keyup', function(){
+ if($G('url').value && $G('alignment').style.display == "none") {
+ utils.each($G('repeatType').children, function(item){
+ item.selected = ('repeat' == item.getAttribute('value') ? 'selected':false);
+ });
+ }
+ updateHandler();
+ });
+ domUtils.on($G('repeatType'), 'change', updateHandler);
+ domUtils.on($G('x'), 'keyup', updateBackground);
+ domUtils.on($G('y'), 'keyup', updateBackground);
+
+ initColorPicker();
+ }
+
+ /* 初始化颜色选择器 */
+ function initColorPicker() {
+ var me = editor,
+ cp = $G("colorPicker");
+
+ /* 生成颜色选择器ui对象 */
+ var popup = new UE.ui.Popup({
+ content: new UE.ui.ColorPicker({
+ noColorText: me.getLang("clearColor"),
+ editor: me,
+ onpickcolor: function (t, color) {
+ updateFormState('colored', color);
+ updateBackground();
+ UE.ui.Popup.postHide();
+ },
+ onpicknocolor: function (t, color) {
+ updateFormState('colored', 'transparent');
+ updateBackground();
+ UE.ui.Popup.postHide();
+ }
+ }),
+ editor: me,
+ onhide: function () {
+ }
+ });
+
+ /* 设置颜色选择器 */
+ domUtils.on(cp, "click", function () {
+ popup.showAnchor(this);
+ });
+ domUtils.on(document, 'mousedown', function (evt) {
+ var el = evt.target || evt.srcElement;
+ UE.ui.Popup.postHide(el);
+ });
+ domUtils.on(window, 'scroll', function () {
+ UE.ui.Popup.postHide();
+ });
+ }
+
+ /* 初始化在线图片列表 */
+ function initImagePanel() {
+ onlineImage = onlineImage || new OnlineImage('imageList');
+ }
+
+ /* 更新背景色设置面板 */
+ function updateFormState (radio, color, url, align, x, y) {
+ var nocolorRadio = $G('nocolorRadio'),
+ coloredRadio = $G('coloredRadio');
+
+ if(radio) {
+ nocolorRadio.checked = (radio == 'colored' ? false:'checked');
+ coloredRadio.checked = (radio == 'colored' ? 'checked':false);
+ }
+ if(color) {
+ domUtils.setStyle($G("colorPicker"), "background-color", color);
+ }
+
+ if(url && /^\//.test(url)) {
+ var a = document.createElement('a');
+ a.href = url;
+ browser.ie && (a.href = a.href);
+ url = browser.ie ? a.href:(a.protocol + '//' + a.host + a.pathname + a.search + a.hash);
+ }
+
+ if(url || url === '') {
+ $G('url').value = url;
+ }
+ if(align) {
+ utils.each($G('repeatType').children, function(item){
+ item.selected = (align == item.getAttribute('value') ? 'selected':false);
+ });
+ }
+ if(x || y) {
+ $G('x').value = parseInt(x) || 0;
+ $G('y').value = parseInt(y) || 0;
+ }
+
+ $G('alignment').style.display = coloredRadio.checked && $G('url').value ? '':'none';
+ $G('custom').style.display = coloredRadio.checked && $G('url').value && $G('repeatType').value == 'self' ? '':'none';
+ }
+
+ /* 更新背景颜色 */
+ function updateBackground () {
+ if ($G('coloredRadio').checked) {
+ var color = domUtils.getStyle($G("colorPicker"), "background-color"),
+ bgimg = $G("url").value,
+ align = $G("repeatType").value,
+ backgroundObj = {
+ "background-repeat": "no-repeat",
+ "background-position": "center center"
+ };
+
+ if (color) backgroundObj["background-color"] = color;
+ if (bgimg) backgroundObj["background-image"] = 'url(' + bgimg + ')';
+ if (align == 'self') {
+ backgroundObj["background-position"] = $G("x").value + "px " + $G("y").value + "px";
+ } else if (align == 'repeat-x' || align == 'repeat-y' || align == 'repeat') {
+ backgroundObj["background-repeat"] = align;
+ }
+
+ editor.execCommand('background', backgroundObj);
+ } else {
+ editor.execCommand('background', null);
+ }
+ }
+
+
+ /* 在线图片 */
+ function OnlineImage(target) {
+ this.container = utils.isString(target) ? document.getElementById(target) : target;
+ this.init();
+ }
+ OnlineImage.prototype = {
+ init: function () {
+ this.reset();
+ this.initEvents();
+ },
+ /* 初始化容器 */
+ initContainer: function () {
+ this.container.innerHTML = '';
+ this.list = document.createElement('ul');
+ this.clearFloat = document.createElement('li');
+
+ domUtils.addClass(this.list, 'list');
+ domUtils.addClass(this.clearFloat, 'clearFloat');
+
+ this.list.id = 'imageListUl';
+ this.list.appendChild(this.clearFloat);
+ this.container.appendChild(this.list);
+ },
+ /* 初始化滚动事件,滚动到地步自动拉取数据 */
+ initEvents: function () {
+ var _this = this;
+
+ /* 滚动拉取图片 */
+ domUtils.on($G('imageList'), 'scroll', function(e){
+ var panel = this;
+ if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
+ _this.getImageData();
+ }
+ });
+ /* 选中图片 */
+ domUtils.on(this.container, 'click', function (e) {
+ var target = e.target || e.srcElement,
+ li = target.parentNode,
+ nodes = $G('imageListUl').childNodes;
+
+ if (li.tagName.toLowerCase() == 'li') {
+ updateFormState('nocolor', null, '');
+ for (var i = 0, node; node = nodes[i++];) {
+ if (node == li && !domUtils.hasClass(node, 'selected')) {
+ domUtils.addClass(node, 'selected');
+ updateFormState('colored', null, li.firstChild.getAttribute("_src"), 'repeat');
+ } else {
+ domUtils.removeClasses(node, 'selected');
+ }
+ }
+ updateBackground();
+ }
+ });
+ },
+ /* 初始化第一次的数据 */
+ initData: function () {
+
+ /* 拉取数据需要使用的值 */
+ this.state = 0;
+ this.listSize = editor.getOpt('imageManagerListSize');
+ this.listIndex = 0;
+ this.listEnd = false;
+
+ /* 第一次拉取数据 */
+ this.getImageData();
+ },
+ /* 重置界面 */
+ reset: function() {
+ this.initContainer();
+ this.initData();
+ },
+ /* 向后台拉取图片列表数据 */
+ getImageData: function () {
+ var _this = this;
+
+ if(!_this.listEnd && !this.isLoadingData) {
+ this.isLoadingData = true;
+ var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),
+ isJsonp = utils.isCrossDomainUrl(url);
+ ajax.request(url, {
+ 'timeout': 100000,
+ 'dataType': isJsonp ? 'jsonp':'',
+ 'data': utils.extend({
+ start: this.listIndex,
+ size: this.listSize
+ }, editor.queryCommandValue('serverparam')),
+ 'method': 'get',
+ 'onsuccess': function (r) {
+ try {
+ var json = isJsonp ? r:eval('(' + r.responseText + ')');
+ if (json.state == 'SUCCESS') {
+ _this.pushData(json.list);
+ _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
+ if(_this.listIndex >= json.total) {
+ _this.listEnd = true;
+ }
+ _this.isLoadingData = false;
+ }
+ } catch (e) {
+ if(r.responseText.indexOf('ue_separate_ue') != -1) {
+ var list = r.responseText.split(r.responseText);
+ _this.pushData(list);
+ _this.listIndex = parseInt(list.length);
+ _this.listEnd = true;
+ _this.isLoadingData = false;
+ }
+ }
+ },
+ 'onerror': function () {
+ _this.isLoadingData = false;
+ }
+ });
+ }
+ },
+ /* 添加图片到列表界面上 */
+ pushData: function (list) {
+ var i, item, img, icon, _this = this,
+ urlPrefix = editor.getOpt('imageManagerUrlPrefix');
+ for (i = 0; i < list.length; i++) {
+ if(list[i] && list[i].url) {
+ item = document.createElement('li');
+ img = document.createElement('img');
+ icon = document.createElement('span');
+
+ domUtils.on(img, 'load', (function(image){
+ return function(){
+ _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
+ }
+ })(img));
+ img.width = 113;
+ img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
+ img.setAttribute('_src', urlPrefix + list[i].url);
+ domUtils.addClass(icon, 'icon');
+
+ item.appendChild(img);
+ item.appendChild(icon);
+ this.list.insertBefore(item, this.clearFloat);
+ }
+ }
+ },
+ /* 改变图片大小 */
+ scale: function (img, w, h, type) {
+ var ow = img.width,
+ oh = img.height;
+
+ if (type == 'justify') {
+ if (ow >= oh) {
+ img.width = w;
+ img.height = h * oh / ow;
+ img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
+ } else {
+ img.width = w * ow / oh;
+ img.height = h;
+ img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
+ }
+ } else {
+ if (ow >= oh) {
+ img.width = w * ow / oh;
+ img.height = h;
+ img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
+ } else {
+ img.width = w;
+ img.height = h * oh / ow;
+ img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
+ }
+ }
+ },
+ getInsertList: function () {
+ var i, lis = this.list.children, list = [], align = getAlign();
+ for (i = 0; i < lis.length; i++) {
+ if (domUtils.hasClass(lis[i], 'selected')) {
+ var img = lis[i].firstChild,
+ src = img.getAttribute('_src');
+ list.push({
+ src: src,
+ _src: src,
+ floatStyle: align
+ });
+ }
+
+ }
+ return list;
+ }
+ };
+
+ dialog.onok = function () {
+ updateBackground();
+ editor.fireEvent('saveScene');
+ };
+ dialog.oncancel = function () {
+ editor.execCommand('background', backupStyle);
+ };
+
+})();
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/background/images/bg.png b/public/static/admin_static/lib/ueditor/dialogs/background/images/bg.png
new file mode 100644
index 0000000..580be0a
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/background/images/bg.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/background/images/success.png b/public/static/admin_static/lib/ueditor/dialogs/background/images/success.png
new file mode 100644
index 0000000..94f968d
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/background/images/success.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/charts/chart.config.js b/public/static/admin_static/lib/ueditor/dialogs/charts/chart.config.js
new file mode 100644
index 0000000..678b00d
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/charts/chart.config.js
@@ -0,0 +1,65 @@
+/*
+ * 图表配置文件
+ * */
+
+
+//不同类型的配置
+var typeConfig = [
+ {
+ chart: {
+ type: 'line'
+ },
+ plotOptions: {
+ line: {
+ dataLabels: {
+ enabled: false
+ },
+ enableMouseTracking: true
+ }
+ }
+ }, {
+ chart: {
+ type: 'line'
+ },
+ plotOptions: {
+ line: {
+ dataLabels: {
+ enabled: true
+ },
+ enableMouseTracking: false
+ }
+ }
+ }, {
+ chart: {
+ type: 'area'
+ }
+ }, {
+ chart: {
+ type: 'bar'
+ }
+ }, {
+ chart: {
+ type: 'column'
+ }
+ }, {
+ chart: {
+ plotBackgroundColor: null,
+ plotBorderWidth: null,
+ plotShadow: false
+ },
+ plotOptions: {
+ pie: {
+ allowPointSelect: true,
+ cursor: 'pointer',
+ dataLabels: {
+ enabled: true,
+ color: '#000000',
+ connectorColor: '#000000',
+ formatter: function() {
+ return '
'+ this.point.name +' : '+ ( Math.round( this.point.percentage*100 ) / 100 ) +' %';
+ }
+ }
+ }
+ }
+ }
+];
diff --git a/public/static/admin_static/lib/ueditor/dialogs/charts/charts.css b/public/static/admin_static/lib/ueditor/dialogs/charts/charts.css
new file mode 100644
index 0000000..ac3c764
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/charts/charts.css
@@ -0,0 +1,165 @@
+html, body {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ overflow-x: hidden;
+}
+
+.main {
+ width: 100%;
+ overflow: hidden;
+}
+
+.table-view {
+ height: 100%;
+ float: left;
+ margin: 20px;
+ width: 40%;
+}
+
+.table-view .table-container {
+ width: 100%;
+ margin-bottom: 50px;
+ overflow: scroll;
+}
+
+.table-view th {
+ padding: 5px 10px;
+ background-color: #F7F7F7;
+}
+
+.table-view td {
+ width: 50px;
+ text-align: center;
+ padding:0;
+}
+
+.table-container input {
+ width: 40px;
+ padding: 5px;
+ border: none;
+ outline: none;
+}
+
+.table-view caption {
+ font-size: 18px;
+ text-align: left;
+}
+
+.charts-view {
+ /*margin-left: 49%!important;*/
+ width: 50%;
+ margin-left: 49%;
+ height: 400px;
+}
+
+.charts-container {
+ border-left: 1px solid #c3c3c3;
+}
+
+.charts-format fieldset {
+ padding-left: 20px;
+ margin-bottom: 50px;
+}
+
+.charts-format legend {
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+.format-item-container {
+ padding: 20px;
+}
+
+.format-item-container label {
+ display: block;
+ margin: 10px 0;
+}
+
+.charts-format .data-item {
+ border: 1px solid black;
+ outline: none;
+ padding: 2px 3px;
+}
+
+/* 图表类型 */
+
+.charts-type {
+ margin-top: 50px;
+ height: 300px;
+}
+
+.scroll-view {
+ border: 1px solid #c3c3c3;
+ border-left: none;
+ border-right: none;
+ overflow: hidden;
+}
+
+.scroll-container {
+ margin: 20px;
+ width: 100%;
+ overflow: hidden;
+}
+
+.scroll-bed {
+ width: 10000px;
+ _margin-top: 20px;
+ -webkit-transition: margin-left .5s ease;
+ -moz-transition: margin-left .5s ease;
+ transition: margin-left .5s ease;
+}
+
+.view-box {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+ margin-right: 20px;
+ border: 2px solid white;
+ line-height: 0;
+ overflow: hidden;
+ cursor: pointer;
+}
+
+.view-box img {
+ border: 1px solid #cecece;
+}
+
+.view-box.selected {
+ border-color: #7274A7;
+}
+
+.button-container {
+ margin-bottom: 20px;
+ text-align: center;
+}
+
+.button-container a {
+ display: inline-block;
+ width: 100px;
+ height: 25px;
+ line-height: 25px;
+ border: 1px solid #c2ccd1;
+ margin-right: 30px;
+ text-decoration: none;
+ color: black;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+}
+
+.button-container a:HOVER {
+ background: #fcfcfc;
+}
+
+.button-container a:ACTIVE {
+ border-top-color: #c2ccd1;
+ box-shadow:inset 0 5px 4px -4px rgba(49, 49, 64, 0.1);
+}
+
+.edui-charts-not-data {
+ height: 100px;
+ line-height: 100px;
+ text-align: center;
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/charts/charts.html b/public/static/admin_static/lib/ueditor/dialogs/charts/charts.html
new file mode 100644
index 0000000..70e2314
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/charts/charts.html
@@ -0,0 +1,89 @@
+
+
+
+
chart
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/charts/charts.js b/public/static/admin_static/lib/ueditor/dialogs/charts/charts.js
new file mode 100644
index 0000000..37344fd
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/charts/charts.js
@@ -0,0 +1,519 @@
+/*
+ * 图片转换对话框脚本
+ **/
+
+var tableData = [],
+ //编辑器页面table
+ editorTable = null,
+ chartsConfig = window.typeConfig,
+ resizeTimer = null,
+ //初始默认图表类型
+ currentChartType = 0;
+
+window.onload = function () {
+
+ editorTable = domUtils.findParentByTagName( editor.selection.getRange().startContainer, 'table', true);
+
+ //未找到表格, 显示错误页面
+ if ( !editorTable ) {
+ document.body.innerHTML = "
未找到数据
";
+ return;
+ }
+
+ //初始化图表类型选择
+ initChartsTypeView();
+ renderTable( editorTable );
+ initEvent();
+ initUserConfig( editorTable.getAttribute( "data-chart" ) );
+ $( "#scrollBed .view-box:eq("+ currentChartType +")" ).trigger( "click" );
+ updateViewType( currentChartType );
+
+ dialog.addListener( "resize", function () {
+
+ if ( resizeTimer != null ) {
+ window.clearTimeout( resizeTimer );
+ }
+
+ resizeTimer = window.setTimeout( function () {
+
+ resizeTimer = null;
+
+ renderCharts();
+
+ }, 500 );
+
+ } );
+
+};
+
+function initChartsTypeView () {
+
+ var contents = [];
+
+ for ( var i = 0, len = chartsConfig.length; i
' );
+
+ }
+
+ $( "#scrollBed" ).html( contents.join( "" ) );
+
+}
+
+//渲染table, 以便用户修改数据
+function renderTable ( table ) {
+
+ var tableHtml = [];
+
+ //构造数据
+ for ( var i = 0, row; row = table.rows[ i ]; i++ ) {
+
+ tableData[ i ] = [];
+ tableHtml[ i ] = [];
+
+ for ( var j = 0, cell; cell = row.cells[ j ]; j++ ) {
+
+ var value = getCellValue( cell );
+
+ if ( i > 0 && j > 0 ) {
+ value = +value;
+ }
+
+ if ( i === 0 || j === 0 ) {
+ tableHtml[ i ].push( '
'+ value +' ' );
+ } else {
+ tableHtml[ i ].push( '
' );
+ }
+
+ tableData[ i ][ j ] = value;
+
+ }
+
+ tableHtml[ i ] = tableHtml[ i ].join( "" );
+
+ }
+
+ //draw 表格
+ $( "#tableContainer" ).html( '
'+ tableHtml.join( " " ) +'
' );
+
+}
+
+/*
+ * 根据表格已有的图表属性初始化当前图表属性
+ */
+function initUserConfig ( config ) {
+
+ var parsedConfig = {};
+
+ if ( !config ) {
+ return;
+ }
+
+ config = config.split( ";" );
+
+ $.each( config, function ( index, item ) {
+
+ item = item.split( ":" );
+ parsedConfig[ item[ 0 ] ] = item[ 1 ];
+
+ } );
+
+ setUserConfig( parsedConfig );
+
+}
+
+function initEvent () {
+
+ var cacheValue = null,
+ //图表类型数
+ typeViewCount = chartsConfig.length- 1,
+ $chartsTypeViewBox = $( '#scrollBed .view-box' );
+
+ $( ".charts-format" ).delegate( ".format-ctrl", "change", function () {
+
+ renderCharts();
+
+ } )
+
+ $( ".table-view" ).delegate( ".data-item", "focus", function () {
+
+ cacheValue = this.value;
+
+ } ).delegate( ".data-item", "blur", function () {
+
+ if ( this.value !== cacheValue ) {
+ renderCharts();
+ }
+
+ cacheValue = null;
+
+ } );
+
+ $( "#buttonContainer" ).delegate( "a", "click", function (e) {
+
+ e.preventDefault();
+
+ if ( this.getAttribute( "data-title" ) === 'prev' ) {
+
+ if ( currentChartType > 0 ) {
+ currentChartType--;
+ updateViewType( currentChartType );
+ }
+
+ } else {
+
+ if ( currentChartType < typeViewCount ) {
+ currentChartType++;
+ updateViewType( currentChartType );
+ }
+
+ }
+
+ } );
+
+ //图表类型变化
+ $( '#scrollBed' ).delegate( ".view-box", "click", function (e) {
+
+ var index = $( this ).attr( "data-chart-type" );
+ $chartsTypeViewBox.removeClass( "selected" );
+ $( $chartsTypeViewBox[ index ] ).addClass( "selected" );
+
+ currentChartType = index | 0;
+
+ //饼图, 禁用部分配置
+ if ( currentChartType === chartsConfig.length - 1 ) {
+
+ disableNotPieConfig();
+
+ //启用完整配置
+ } else {
+
+ enableNotPieConfig();
+
+ }
+
+ renderCharts();
+
+ } );
+
+}
+
+function renderCharts () {
+
+ var data = collectData();
+
+ $('#chartsContainer').highcharts( $.extend( {}, chartsConfig[ currentChartType ], {
+
+ credits: {
+ enabled: false
+ },
+ exporting: {
+ enabled: false
+ },
+ title: {
+ text: data.title,
+ x: -20 //center
+ },
+ subtitle: {
+ text: data.subTitle,
+ x: -20
+ },
+ xAxis: {
+ title: {
+ text: data.xTitle
+ },
+ categories: data.categories
+ },
+ yAxis: {
+ title: {
+ text: data.yTitle
+ },
+ plotLines: [{
+ value: 0,
+ width: 1,
+ color: '#808080'
+ }]
+ },
+ tooltip: {
+ enabled: true,
+ valueSuffix: data.suffix
+ },
+ legend: {
+ layout: 'vertical',
+ align: 'right',
+ verticalAlign: 'middle',
+ borderWidth: 1
+ },
+ series: data.series
+
+ } ));
+
+}
+
+function updateViewType ( index ) {
+
+ $( "#scrollBed" ).css( 'marginLeft', -index*324+'px' );
+
+}
+
+function collectData () {
+
+ var form = document.forms[ 'data-form' ],
+ data = null;
+
+ if ( currentChartType !== chartsConfig.length - 1 ) {
+
+ data = getSeriesAndCategories();
+ $.extend( data, getUserConfig() );
+
+ //饼图数据格式
+ } else {
+ data = getSeriesForPieChart();
+ data.title = form[ 'title' ].value;
+ data.suffix = form[ 'unit' ].value;
+ }
+
+ return data;
+
+}
+
+/**
+ * 获取用户配置信息
+ */
+function getUserConfig () {
+
+ var form = document.forms[ 'data-form' ],
+ info = {
+ title: form[ 'title' ].value,
+ subTitle: form[ 'sub-title' ].value,
+ xTitle: form[ 'x-title' ].value,
+ yTitle: form[ 'y-title' ].value,
+ suffix: form[ 'unit' ].value,
+ //数据对齐方式
+ tableDataFormat: getTableDataFormat (),
+ //饼图提示文字
+ tip: $( "#tipInput" ).val()
+ };
+
+ return info;
+
+}
+
+function setUserConfig ( config ) {
+
+ var form = document.forms[ 'data-form' ];
+
+ config.title && ( form[ 'title' ].value = config.title );
+ config.subTitle && ( form[ 'sub-title' ].value = config.subTitle );
+ config.xTitle && ( form[ 'x-title' ].value = config.xTitle );
+ config.yTitle && ( form[ 'y-title' ].value = config.yTitle );
+ config.suffix && ( form[ 'unit' ].value = config.suffix );
+ config.dataFormat == "-1" && ( form[ 'charts-format' ][ 1 ].checked = true );
+ config.tip && ( form[ 'tip' ].value = config.tip );
+ currentChartType = config.chartType || 0;
+
+}
+
+function getSeriesAndCategories () {
+
+ var form = document.forms[ 'data-form' ],
+ series = [],
+ categories = [],
+ tmp = [],
+ tableData = getTableData();
+
+ //反转数据
+ if ( getTableDataFormat() === "-1" ) {
+
+ for ( var i = 0, len = tableData.length; i < len; i++ ) {
+
+ for ( var j = 0, jlen = tableData[ i ].length; j < jlen; j++ ) {
+
+ if ( !tmp[ j ] ) {
+ tmp[ j ] = [];
+ }
+
+ tmp[ j ][ i ] = tableData[ i ][ j ];
+
+ }
+
+ }
+
+ tableData = tmp;
+
+ }
+
+ categories = tableData[0].slice( 1 );
+
+ for ( var i = 1, data; data = tableData[ i ]; i++ ) {
+
+ series.push( {
+ name: data[ 0 ],
+ data: data.slice( 1 )
+ } );
+
+ }
+
+ return {
+ series: series,
+ categories: categories
+ };
+
+}
+
+/*
+ * 获取数据源数据对齐方式
+ */
+function getTableDataFormat () {
+
+ var form = document.forms[ 'data-form' ],
+ items = form['charts-format'];
+
+ return items[ 0 ].checked ? items[ 0 ].value : items[ 1 ].value;
+
+}
+
+/*
+ * 禁用非饼图类型的配置项
+ */
+function disableNotPieConfig() {
+
+ updateConfigItem( 'disable' );
+
+}
+
+/*
+ * 启用非饼图类型的配置项
+ */
+function enableNotPieConfig() {
+
+ updateConfigItem( 'enable' );
+
+}
+
+function updateConfigItem ( value ) {
+
+ var table = $( "#showTable" )[ 0 ],
+ isDisable = value === 'disable' ? true : false;
+
+ //table中的input处理
+ for ( var i = 2 , row; row = table.rows[ i ]; i++ ) {
+
+ for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {
+
+ $( "input", cell ).attr( "disabled", isDisable );
+
+ }
+
+ }
+
+ //其他项处理
+ $( "input.not-pie-item" ).attr( "disabled", isDisable );
+ $( "#tipInput" ).attr( "disabled", !isDisable )
+
+}
+
+/*
+ * 获取饼图数据
+ * 饼图的数据只取第一行的
+ **/
+function getSeriesForPieChart () {
+
+ var series = {
+ type: 'pie',
+ name: $("#tipInput").val(),
+ data: []
+ },
+ tableData = getTableData();
+
+
+ for ( var j = 1, jlen = tableData[ 0 ].length; j < jlen; j++ ) {
+
+ var title = tableData[ 0 ][ j ],
+ val = tableData[ 1 ][ j ];
+
+ series.data.push( [ title, val ] );
+
+ }
+
+ return {
+ series: [ series ]
+ };
+
+}
+
+function getTableData () {
+
+ var table = document.getElementById( "showTable" ),
+ xCount = table.rows[0].cells.length - 1,
+ values = getTableInputValue();
+
+ for ( var i = 0, value; value = values[ i ]; i++ ) {
+
+ tableData[ Math.floor( i / xCount ) + 1 ][ i % xCount + 1 ] = values[ i ];
+
+ }
+
+ return tableData;
+
+}
+
+function getTableInputValue () {
+
+ var table = document.getElementById( "showTable" ),
+ inputs = table.getElementsByTagName( "input" ),
+ values = [];
+
+ for ( var i = 0, input; input = inputs[ i ]; i++ ) {
+ values.push( input.value | 0 );
+ }
+
+ return values;
+
+}
+
+function getCellValue ( cell ) {
+
+ var value = utils.trim( ( cell.innerText || cell.textContent || '' ) );
+
+ return value.replace( new RegExp( UE.dom.domUtils.fillChar, 'g' ), '' ).replace( /^\s+|\s+$/g, '' );
+
+}
+
+
+//dialog确认事件
+dialog.onok = function () {
+
+ //收集信息
+ var form = document.forms[ 'data-form' ],
+ info = getUserConfig();
+
+ //添加图表类型
+ info.chartType = currentChartType;
+
+ //同步表格数据到编辑器
+ syncTableData();
+
+ //执行图表命令
+ editor.execCommand( 'charts', info );
+
+};
+
+/*
+ * 同步图表编辑视图的表格数据到编辑器里的原始表格
+ */
+function syncTableData () {
+
+ var tableData = getTableData();
+
+ for ( var i = 1, row; row = editorTable.rows[ i ]; i++ ) {
+
+ for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {
+
+ cell.innerHTML = tableData[ i ] [ j ];
+
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts0.png b/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts0.png
new file mode 100644
index 0000000..9485e5e
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts0.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts1.png b/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts1.png
new file mode 100644
index 0000000..b5a0039
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts1.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts2.png b/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts2.png
new file mode 100644
index 0000000..7c91a39
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts2.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts3.png b/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts3.png
new file mode 100644
index 0000000..a6bc29b
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts3.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts4.png b/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts4.png
new file mode 100644
index 0000000..742006a
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts4.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts5.png b/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts5.png
new file mode 100644
index 0000000..c49a296
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/charts/images/charts5.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/emotion/emotion.css b/public/static/admin_static/lib/ueditor/dialogs/emotion/emotion.css
new file mode 100644
index 0000000..f801105
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/emotion/emotion.css
@@ -0,0 +1,43 @@
+.jd img{
+ background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;
+ cursor:pointer;width:35px;height:35px;display:block;
+}
+.pp img{
+ background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top;
+ cursor:pointer;width:25px;height:25px;display:block;
+}
+.ldw img{
+ background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top;
+ cursor:pointer;width:35px;height:35px;display:block;
+}
+.tsj img{
+ background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top;
+ cursor:pointer;width:35px;height:35px;display:block;
+}
+.cat img{
+ background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top;
+ cursor:pointer;width:35px;height:35px;display:block;
+}
+.bb img{
+ background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top;
+ cursor:pointer;width:35px;height:35px;display:block;
+}
+.youa img{
+ background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top;
+ cursor:pointer;width:35px;height:35px;display:block;
+}
+
+.smileytable td {height: 37px;}
+#tabPanel{margin-left:5px;overflow: hidden;}
+#tabContent {float:left;background:#FFFFFF;}
+#tabContent div{display: none;width:480px;overflow:hidden;}
+#tabIconReview.show{left:17px;display:block;}
+.menuFocus{background:#ACCD3C;}
+.menuDefault{background:#FFFFFF;}
+#tabIconReview{position:absolute;left:406px;left:398px \9;top:41px;z-index:65533;width:90px;height:76px;}
+img.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFFFFF;background-position:center;background-repeat:no-repeat;}
+
+.wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width: 95%;}
+.tabbody table{width: 100%;}
+.tabbody td{border:1px solid #BAC498;}
+.tabbody td span{display: block;zoom:1;padding:0 4px;}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/emotion/emotion.html b/public/static/admin_static/lib/ueditor/dialogs/emotion/emotion.html
new file mode 100644
index 0000000..fca0850
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/emotion/emotion.html
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/emotion/emotion.js b/public/static/admin_static/lib/ueditor/dialogs/emotion/emotion.js
new file mode 100644
index 0000000..6e158a9
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/emotion/emotion.js
@@ -0,0 +1,186 @@
+window.onload = function () {
+ editor.setOpt({
+ emotionLocalization:false
+ });
+
+ emotion.SmileyPath = editor.options.emotionLocalization === true ? 'images/' : "http://img.baidu.com/hi/";
+ emotion.SmileyBox = createTabList( emotion.tabNum );
+ emotion.tabExist = createArr( emotion.tabNum );
+
+ initImgName();
+ initEvtHandler( "tabHeads" );
+};
+
+function initImgName() {
+ for ( var pro in emotion.SmilmgName ) {
+ var tempName = emotion.SmilmgName[pro],
+ tempBox = emotion.SmileyBox[pro],
+ tempStr = "";
+
+ if ( tempBox.length ) return;
+ for ( var i = 1; i <= tempName[1]; i++ ) {
+ tempStr = tempName[0];
+ if ( i < 10 ) tempStr = tempStr + '0';
+ tempStr = tempStr + i + '.gif';
+ tempBox.push( tempStr );
+ }
+ }
+}
+
+function initEvtHandler( conId ) {
+ var tabHeads = $G( conId );
+ for ( var i = 0, j = 0; i < tabHeads.childNodes.length; i++ ) {
+ var tabObj = tabHeads.childNodes[i];
+ if ( tabObj.nodeType == 1 ) {
+ domUtils.on( tabObj, "click", (function ( index ) {
+ return function () {
+ switchTab( index );
+ };
+ })( j ) );
+ j++;
+ }
+ }
+ switchTab( 0 );
+ $G( "tabIconReview" ).style.display = 'none';
+}
+
+function InsertSmiley( url, evt ) {
+ var obj = {
+ src:editor.options.emotionLocalization ? editor.options.UEDITOR_HOME_URL + "dialogs/emotion/" + url : url
+ };
+ obj._src = obj.src;
+ editor.execCommand( 'insertimage', obj );
+ if ( !evt.ctrlKey ) {
+ dialog.popup.hide();
+ }
+}
+
+function switchTab( index ) {
+
+ autoHeight( index );
+ if ( emotion.tabExist[index] == 0 ) {
+ emotion.tabExist[index] = 1;
+ createTab( 'tab' + index );
+ }
+ //获取呈现元素句柄数组
+ var tabHeads = $G( "tabHeads" ).getElementsByTagName( "span" ),
+ tabBodys = $G( "tabBodys" ).getElementsByTagName( "div" ),
+ i = 0, L = tabHeads.length;
+ //隐藏所有呈现元素
+ for ( ; i < L; i++ ) {
+ tabHeads[i].className = "";
+ tabBodys[i].style.display = "none";
+ }
+ //显示对应呈现元素
+ tabHeads[index].className = "focus";
+ tabBodys[index].style.display = "block";
+}
+
+function autoHeight( index ) {
+ var iframe = dialog.getDom( "iframe" ),
+ parent = iframe.parentNode.parentNode;
+ switch ( index ) {
+ case 0:
+ iframe.style.height = "380px";
+ parent.style.height = "392px";
+ break;
+ case 1:
+ iframe.style.height = "220px";
+ parent.style.height = "232px";
+ break;
+ case 2:
+ iframe.style.height = "260px";
+ parent.style.height = "272px";
+ break;
+ case 3:
+ iframe.style.height = "300px";
+ parent.style.height = "312px";
+ break;
+ case 4:
+ iframe.style.height = "140px";
+ parent.style.height = "152px";
+ break;
+ case 5:
+ iframe.style.height = "260px";
+ parent.style.height = "272px";
+ break;
+ case 6:
+ iframe.style.height = "230px";
+ parent.style.height = "242px";
+ break;
+ default:
+
+ }
+}
+
+
+function createTab( tabName ) {
+ var faceVersion = "?v=1.1", //版本号
+ tab = $G( tabName ), //获取将要生成的Div句柄
+ imagePath = emotion.SmileyPath + emotion.imageFolders[tabName], //获取显示表情和预览表情的路径
+ positionLine = 11 / 2, //中间数
+ iWidth = iHeight = 35, //图片长宽
+ iColWidth = 3, //表格剩余空间的显示比例
+ tableCss = emotion.imageCss[tabName],
+ cssOffset = emotion.imageCssOffset[tabName],
+ textHTML = ['
'],
+ i = 0, imgNum = emotion.SmileyBox[tabName].length, imgColNum = 11, faceImage,
+ sUrl, realUrl, posflag, offset, infor;
+
+ for ( ; i < imgNum; ) {
+ textHTML.push( '' );
+ for ( var j = 0; j < imgColNum; j++, i++ ) {
+ faceImage = emotion.SmileyBox[tabName][i];
+ if ( faceImage ) {
+ sUrl = imagePath + faceImage + faceVersion;
+ realUrl = imagePath + faceImage;
+ posflag = j < positionLine ? 0 : 1;
+ offset = cssOffset * i * (-1) - 1;
+ infor = emotion.SmileyInfor[tabName][i];
+
+ textHTML.push( '' );
+ textHTML.push( '' );
+ textHTML.push( ' ' );
+ textHTML.push( ' ' );
+ } else {
+ textHTML.push( ' ' );
+ }
+ textHTML.push( ' ' );
+ }
+ textHTML.push( ' ' );
+ }
+ textHTML.push( '
' );
+ textHTML = textHTML.join( "" );
+ tab.innerHTML = textHTML;
+}
+
+function over( td, srcPath, posFlag ) {
+ td.style.backgroundColor = "#ACCD3C";
+ $G( 'faceReview' ).style.backgroundImage = "url(" + srcPath + ")";
+ if ( posFlag == 1 ) $G( "tabIconReview" ).className = "show";
+ $G( "tabIconReview" ).style.display = 'block';
+}
+
+function out( td ) {
+ td.style.backgroundColor = "transparent";
+ var tabIconRevew = $G( "tabIconReview" );
+ tabIconRevew.className = "";
+ tabIconRevew.style.display = 'none';
+}
+
+function createTabList( tabNum ) {
+ var obj = {};
+ for ( var i = 0; i < tabNum; i++ ) {
+ obj["tab" + i] = [];
+ }
+ return obj;
+}
+
+function createArr( tabNum ) {
+ var arr = [];
+ for ( var i = 0; i < tabNum; i++ ) {
+ arr[i] = 0;
+ }
+ return arr;
+}
+
diff --git a/public/static/admin_static/lib/ueditor/dialogs/emotion/images/0.gif b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/0.gif
new file mode 100644
index 0000000..6964168
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/0.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/emotion/images/bface.gif b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/bface.gif
new file mode 100644
index 0000000..14fe618
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/bface.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/emotion/images/cface.gif b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/cface.gif
new file mode 100644
index 0000000..bff947f
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/cface.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/emotion/images/fface.gif b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/fface.gif
new file mode 100644
index 0000000..0d8a6af
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/fface.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/emotion/images/jxface2.gif b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/jxface2.gif
new file mode 100644
index 0000000..a959c90
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/jxface2.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/emotion/images/neweditor-tab-bg.png b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/neweditor-tab-bg.png
new file mode 100644
index 0000000..8f398b0
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/neweditor-tab-bg.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/emotion/images/tface.gif b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/tface.gif
new file mode 100644
index 0000000..1354f54
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/tface.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/emotion/images/wface.gif b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/wface.gif
new file mode 100644
index 0000000..5667160
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/wface.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/emotion/images/yface.gif b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/yface.gif
new file mode 100644
index 0000000..51608be
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/emotion/images/yface.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/gmap/gmap.html b/public/static/admin_static/lib/ueditor/dialogs/gmap/gmap.html
new file mode 100644
index 0000000..c4cbfe6
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/gmap/gmap.html
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/help/help.css b/public/static/admin_static/lib/ueditor/dialogs/help/help.css
new file mode 100644
index 0000000..4478475
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/help/help.css
@@ -0,0 +1,7 @@
+.wrapper{width: 370px;margin: 10px auto;zoom: 1;}
+.tabbody{height: 360px;}
+.tabbody .panel{width:100%;height: 360px;position: absolute;background: #fff;}
+.tabbody .panel h1{font-size:26px;margin: 5px 0 0 5px;}
+.tabbody .panel p{font-size:12px;margin: 5px 0 0 5px;}
+.tabbody table{width:90%;line-height: 20px;margin: 5px 0 0 5px;;}
+.tabbody table thead{font-weight: bold;line-height: 25px;}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/help/help.html b/public/static/admin_static/lib/ueditor/dialogs/help/help.html
new file mode 100644
index 0000000..9e50060
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/help/help.html
@@ -0,0 +1,82 @@
+
+
+
+
帮助
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ctrl+b
+
+
+
+ ctrl+c
+
+
+
+ ctrl+x
+
+
+
+ ctrl+v
+
+
+
+ ctrl+y
+
+
+
+ ctrl+z
+
+
+
+ ctrl+i
+
+
+
+ ctrl+u
+
+
+
+ ctrl+a
+
+
+
+ shift+enter
+
+
+
+ alt+z
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/help/help.js b/public/static/admin_static/lib/ueditor/dialogs/help/help.js
new file mode 100644
index 0000000..9a2272e
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/help/help.js
@@ -0,0 +1,56 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: xuheng
+ * Date: 12-9-26
+ * Time: 下午1:06
+ * To change this template use File | Settings | File Templates.
+ */
+/**
+ * tab点击处理事件
+ * @param tabHeads
+ * @param tabBodys
+ * @param obj
+ */
+function clickHandler( tabHeads,tabBodys,obj ) {
+ //head样式更改
+ for ( var k = 0, len = tabHeads.length; k < len; k++ ) {
+ tabHeads[k].className = "";
+ }
+ obj.className = "focus";
+ //body显隐
+ var tabSrc = obj.getAttribute( "tabSrc" );
+ for ( var j = 0, length = tabBodys.length; j < length; j++ ) {
+ var body = tabBodys[j],
+ id = body.getAttribute( "id" );
+ body.onclick = function(){
+ this.style.zoom = 1;
+ };
+ if ( id != tabSrc ) {
+ body.style.zIndex = 1;
+ } else {
+ body.style.zIndex = 200;
+ }
+ }
+
+}
+
+/**
+ * TAB切换
+ * @param tabParentId tab的父节点ID或者对象本身
+ */
+function switchTab( tabParentId ) {
+ var tabElements = $G( tabParentId ).children,
+ tabHeads = tabElements[0].children,
+ tabBodys = tabElements[1].children;
+
+ for ( var i = 0, length = tabHeads.length; i < length; i++ ) {
+ var head = tabHeads[i];
+ if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head );
+ head.onclick = function () {
+ clickHandler(tabHeads,tabBodys,this);
+ }
+ }
+}
+switchTab("helptab");
+
+document.getElementById('version').innerHTML = parent.UE.version;
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/image/image.css b/public/static/admin_static/lib/ueditor/dialogs/image/image.css
new file mode 100644
index 0000000..52c2295
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/image/image.css
@@ -0,0 +1,894 @@
+@charset "utf-8";
+/* dialog样式 */
+.wrapper {
+ zoom: 1;
+ width: 630px;
+ *width: 626px;
+ height: 380px;
+ margin: 0 auto;
+ padding: 10px;
+ position: relative;
+ font-family: sans-serif;
+}
+
+/*tab样式框大小*/
+.tabhead {
+ float:left;
+}
+.tabbody {
+ width: 100%;
+ height: 346px;
+ position: relative;
+ clear: both;
+}
+
+.tabbody .panel {
+ position: absolute;
+ width: 0;
+ height: 0;
+ background: #fff;
+ overflow: hidden;
+ display: none;
+}
+
+.tabbody .panel.focus {
+ width: 100%;
+ height: 346px;
+ display: block;
+}
+
+/* 图片对齐方式 */
+.alignBar{
+ float:right;
+ margin-top: 5px;
+ position: relative;
+}
+
+.alignBar .algnLabel{
+ float:left;
+ height: 20px;
+ line-height: 20px;
+}
+
+.alignBar #alignIcon{
+ zoom:1;
+ _display: inline;
+ display: inline-block;
+ position: relative;
+}
+.alignBar #alignIcon span{
+ float: left;
+ cursor: pointer;
+ display: block;
+ width: 19px;
+ height: 17px;
+ margin-right: 3px;
+ margin-left: 3px;
+ background-image: url(./images/alignicon.jpg);
+}
+.alignBar #alignIcon .none-align{
+ background-position: 0 -18px;
+}
+.alignBar #alignIcon .left-align{
+ background-position: -20px -18px;
+}
+.alignBar #alignIcon .right-align{
+ background-position: -40px -18px;
+}
+.alignBar #alignIcon .center-align{
+ background-position: -60px -18px;
+}
+.alignBar #alignIcon .none-align.focus{
+ background-position: 0 0;
+}
+.alignBar #alignIcon .left-align.focus{
+ background-position: -20px 0;
+}
+.alignBar #alignIcon .right-align.focus{
+ background-position: -40px 0;
+}
+.alignBar #alignIcon .center-align.focus{
+ background-position: -60px 0;
+}
+
+
+
+
+/* 远程图片样式 */
+#remote {
+ z-index: 200;
+}
+
+#remote .top{
+ width: 100%;
+ margin-top: 25px;
+}
+#remote .left{
+ display: block;
+ float: left;
+ width: 300px;
+ height:10px;
+}
+#remote .right{
+ display: block;
+ float: right;
+ width: 300px;
+ height:10px;
+}
+#remote .row{
+ margin-left: 20px;
+ clear: both;
+ height: 40px;
+}
+
+#remote .row label{
+ text-align: center;
+ width: 50px;
+ zoom:1;
+ _display: inline;
+ display:inline-block;
+ vertical-align: middle;
+}
+#remote .row label.algnLabel{
+ float: left;
+
+}
+
+#remote input.text{
+ width: 150px;
+ padding: 3px 6px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+#remote input.text:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+}
+#remote #url{
+ width: 500px;
+ margin-bottom: 2px;
+}
+#remote #width,
+#remote #height{
+ width: 20px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+#remote #border,
+#remote #vhSpace,
+#remote #title{
+ width: 180px;
+ margin-right: 5px;
+}
+#remote #lock{
+}
+#remote #lockicon{
+ zoom: 1;
+ _display:inline;
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ background: url("../../themes/default/images/lock.gif") -13px -13px no-repeat;
+ vertical-align: middle;
+}
+#remote #preview{
+ clear: both;
+ width: 260px;
+ height: 240px;
+ z-index: 9999;
+ margin-top: 10px;
+ background-color: #eee;
+ overflow: hidden;
+}
+
+/* 上传图片 */
+.tabbody #upload.panel {
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ position: absolute !important;
+ clip: rect(1px, 1px, 1px, 1px);
+ background: #fff;
+ display: block;
+}
+
+.tabbody #upload.panel.focus {
+ width: 100%;
+ height: 346px;
+ display: block;
+ clip: auto;
+}
+
+#upload .queueList {
+ margin: 0;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ overflow: hidden;
+}
+
+#upload p {
+ margin: 0;
+}
+
+.element-invisible {
+ width: 0 !important;
+ height: 0 !important;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+ position: absolute !important;
+ clip: rect(1px, 1px, 1px, 1px);
+}
+
+#upload .placeholder {
+ margin: 10px;
+ border: 2px dashed #e6e6e6;
+ *border: 0px dashed #e6e6e6;
+ height: 172px;
+ padding-top: 150px;
+ text-align: center;
+ background: url(./images/image.png) center 70px no-repeat;
+ color: #cccccc;
+ font-size: 18px;
+ position: relative;
+ top:0;
+ *top: 10px;
+}
+
+#upload .placeholder .webuploader-pick {
+ font-size: 18px;
+ background: #00b7ee;
+ border-radius: 3px;
+ line-height: 44px;
+ padding: 0 30px;
+ *width: 120px;
+ color: #fff;
+ display: inline-block;
+ margin: 0 auto 20px auto;
+ cursor: pointer;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+}
+
+#upload .placeholder .webuploader-pick-hover {
+ background: #00a2d4;
+}
+
+
+#filePickerContainer {
+ text-align: center;
+}
+
+#upload .placeholder .flashTip {
+ color: #666666;
+ font-size: 12px;
+ position: absolute;
+ width: 100%;
+ text-align: center;
+ bottom: 20px;
+}
+
+#upload .placeholder .flashTip a {
+ color: #0785d1;
+ text-decoration: none;
+}
+
+#upload .placeholder .flashTip a:hover {
+ text-decoration: underline;
+}
+
+#upload .placeholder.webuploader-dnd-over {
+ border-color: #999999;
+}
+
+#upload .filelist {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ overflow-x: hidden;
+ overflow-y: auto;
+ position: relative;
+ height: 300px;
+}
+
+#upload .filelist:after {
+ content: '';
+ display: block;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ clear: both;
+ position: relative;
+}
+
+#upload .filelist li {
+ width: 113px;
+ height: 113px;
+ background: url(./images/bg.png);
+ text-align: center;
+ margin: 9px 0 0 9px;
+ *margin: 6px 0 0 6px;
+ position: relative;
+ display: block;
+ float: left;
+ overflow: hidden;
+ font-size: 12px;
+}
+
+#upload .filelist li p.log {
+ position: relative;
+ top: -45px;
+}
+
+#upload .filelist li p.title {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ top: 5px;
+ text-indent: 5px;
+ text-align: left;
+}
+
+#upload .filelist li p.progress {
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ left: 0;
+ height: 8px;
+ overflow: hidden;
+ z-index: 50;
+ margin: 0;
+ border-radius: 0;
+ background: none;
+ -webkit-box-shadow: 0 0 0;
+}
+
+#upload .filelist li p.progress span {
+ display: none;
+ overflow: hidden;
+ width: 0;
+ height: 100%;
+ background: #1483d8 url(./images/progress.png) repeat-x;
+
+ -webit-transition: width 200ms linear;
+ -moz-transition: width 200ms linear;
+ -o-transition: width 200ms linear;
+ -ms-transition: width 200ms linear;
+ transition: width 200ms linear;
+
+ -webkit-animation: progressmove 2s linear infinite;
+ -moz-animation: progressmove 2s linear infinite;
+ -o-animation: progressmove 2s linear infinite;
+ -ms-animation: progressmove 2s linear infinite;
+ animation: progressmove 2s linear infinite;
+
+ -webkit-transform: translateZ(0);
+}
+
+@-webkit-keyframes progressmove {
+ 0% {
+ background-position: 0 0;
+ }
+ 100% {
+ background-position: 17px 0;
+ }
+}
+
+@-moz-keyframes progressmove {
+ 0% {
+ background-position: 0 0;
+ }
+ 100% {
+ background-position: 17px 0;
+ }
+}
+
+@keyframes progressmove {
+ 0% {
+ background-position: 0 0;
+ }
+ 100% {
+ background-position: 17px 0;
+ }
+}
+
+#upload .filelist li p.imgWrap {
+ position: relative;
+ z-index: 2;
+ line-height: 113px;
+ vertical-align: middle;
+ overflow: hidden;
+ width: 113px;
+ height: 113px;
+
+ -webkit-transform-origin: 50% 50%;
+ -moz-transform-origin: 50% 50%;
+ -o-transform-origin: 50% 50%;
+ -ms-transform-origin: 50% 50%;
+ transform-origin: 50% 50%;
+
+ -webit-transition: 200ms ease-out;
+ -moz-transition: 200ms ease-out;
+ -o-transition: 200ms ease-out;
+ -ms-transition: 200ms ease-out;
+ transition: 200ms ease-out;
+}
+
+#upload .filelist li img {
+ width: 100%;
+}
+
+#upload .filelist li p.error {
+ background: #f43838;
+ color: #fff;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ height: 28px;
+ line-height: 28px;
+ width: 100%;
+ z-index: 100;
+ display:none;
+}
+
+#upload .filelist li .success {
+ display: block;
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ height: 40px;
+ width: 100%;
+ z-index: 200;
+ background: url(./images/success.png) no-repeat right bottom;
+ background: url(./images/success.gif) no-repeat right bottom \9;
+}
+
+#upload .filelist li.filePickerBlock {
+ width: 113px;
+ height: 113px;
+ background: url(./images/image.png) no-repeat center 12px;
+ border: 1px solid #eeeeee;
+ border-radius: 0;
+}
+#upload .filelist li.filePickerBlock div.webuploader-pick {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ opacity: 0;
+ background: none;
+ font-size: 0;
+}
+
+#upload .filelist div.file-panel {
+ position: absolute;
+ height: 0;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0;
+ background: rgba(0, 0, 0, 0.5);
+ width: 100%;
+ top: 0;
+ left: 0;
+ overflow: hidden;
+ z-index: 300;
+}
+
+#upload .filelist div.file-panel span {
+ width: 24px;
+ height: 24px;
+ display: inline;
+ float: right;
+ text-indent: -9999px;
+ overflow: hidden;
+ background: url(./images/icons.png) no-repeat;
+ background: url(./images/icons.gif) no-repeat \9;
+ margin: 5px 1px 1px;
+ cursor: pointer;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#upload .filelist div.file-panel span.rotateLeft {
+ display:none;
+ background-position: 0 -24px;
+}
+
+#upload .filelist div.file-panel span.rotateLeft:hover {
+ background-position: 0 0;
+}
+
+#upload .filelist div.file-panel span.rotateRight {
+ display:none;
+ background-position: -24px -24px;
+}
+
+#upload .filelist div.file-panel span.rotateRight:hover {
+ background-position: -24px 0;
+}
+
+#upload .filelist div.file-panel span.cancel {
+ background-position: -48px -24px;
+}
+
+#upload .filelist div.file-panel span.cancel:hover {
+ background-position: -48px 0;
+}
+
+#upload .statusBar {
+ height: 45px;
+ border-bottom: 1px solid #dadada;
+ margin: 0 10px;
+ padding: 0;
+ line-height: 45px;
+ vertical-align: middle;
+ position: relative;
+}
+
+#upload .statusBar .progress {
+ border: 1px solid #1483d8;
+ width: 198px;
+ background: #fff;
+ height: 18px;
+ position: absolute;
+ top: 12px;
+ display: none;
+ text-align: center;
+ line-height: 18px;
+ color: #6dbfff;
+ margin: 0 10px 0 0;
+}
+#upload .statusBar .progress span.percentage {
+ width: 0;
+ height: 100%;
+ left: 0;
+ top: 0;
+ background: #1483d8;
+ position: absolute;
+}
+#upload .statusBar .progress span.text {
+ position: relative;
+ z-index: 10;
+}
+
+#upload .statusBar .info {
+ display: inline-block;
+ font-size: 14px;
+ color: #666666;
+}
+
+#upload .statusBar .btns {
+ position: absolute;
+ top: 7px;
+ right: 0;
+ line-height: 30px;
+}
+
+#filePickerBtn {
+ display: inline-block;
+ float: left;
+}
+#upload .statusBar .btns .webuploader-pick,
+#upload .statusBar .btns .uploadBtn,
+#upload .statusBar .btns .uploadBtn.state-uploading,
+#upload .statusBar .btns .uploadBtn.state-paused {
+ background: #ffffff;
+ border: 1px solid #cfcfcf;
+ color: #565656;
+ padding: 0 18px;
+ display: inline-block;
+ border-radius: 3px;
+ margin-left: 10px;
+ cursor: pointer;
+ font-size: 14px;
+ float: left;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+#upload .statusBar .btns .webuploader-pick-hover,
+#upload .statusBar .btns .uploadBtn:hover,
+#upload .statusBar .btns .uploadBtn.state-uploading:hover,
+#upload .statusBar .btns .uploadBtn.state-paused:hover {
+ background: #f0f0f0;
+}
+
+#upload .statusBar .btns .uploadBtn,
+#upload .statusBar .btns .uploadBtn.state-paused{
+ background: #00b7ee;
+ color: #fff;
+ border-color: transparent;
+}
+#upload .statusBar .btns .uploadBtn:hover,
+#upload .statusBar .btns .uploadBtn.state-paused:hover{
+ background: #00a2d4;
+}
+
+#upload .statusBar .btns .uploadBtn.disabled {
+ pointer-events: none;
+ filter:alpha(opacity=60);
+ -moz-opacity:0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6;
+}
+
+
+
+/* 图片管理样式 */
+#online {
+ width: 100%;
+ height: 336px;
+ padding: 10px 0 0 0;
+}
+#online #imageList{
+ width: 100%;
+ height: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+ position: relative;
+}
+#online ul {
+ display: block;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+#online li {
+ float: left;
+ display: block;
+ list-style: none;
+ padding: 0;
+ width: 113px;
+ height: 113px;
+ margin: 0 0 9px 9px;
+ *margin: 0 0 6px 6px;
+ background-color: #eee;
+ overflow: hidden;
+ cursor: pointer;
+ position: relative;
+}
+#online li.clearFloat {
+ float: none;
+ clear: both;
+ display: block;
+ width:0;
+ height:0;
+ margin: 0;
+ padding: 0;
+}
+#online li img {
+ cursor: pointer;
+}
+#online li .icon {
+ cursor: pointer;
+ width: 113px;
+ height: 113px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 2;
+ border: 0;
+ background-repeat: no-repeat;
+}
+#online li .icon:hover {
+ width: 107px;
+ height: 107px;
+ border: 3px solid #1094fa;
+}
+#online li.selected .icon {
+ background-image: url(images/success.png);
+ background-image: url(images/success.gif)\9;
+ background-position: 75px 75px;
+}
+#online li.selected .icon:hover {
+ width: 107px;
+ height: 107px;
+ border: 3px solid #1094fa;
+ background-position: 72px 72px;
+}
+
+
+/* 图片搜索样式 */
+#search .searchBar {
+ width: 100%;
+ height: 30px;
+ margin: 10px 0 5px 0;
+ padding: 0;
+}
+
+#search input.text{
+ width: 150px;
+ padding: 3px 6px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+#search input.text:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+}
+#search input.searchTxt {
+ margin-left:5px;
+ padding-left: 5px;
+ background: #FFF;
+ width: 300px;
+ *width: 260px;
+ height: 21px;
+ line-height: 21px;
+ float: left;
+ dislay: block;
+}
+
+#search .searchType {
+ width: 65px;
+ height: 28px;
+ padding:0;
+ line-height: 28px;
+ border: 1px solid #d7d7d7;
+ border-radius: 0;
+ vertical-align: top;
+ margin-left: 5px;
+ float: left;
+ dislay: block;
+}
+
+#search #searchBtn,
+#search #searchReset {
+ display: inline-block;
+ margin-bottom: 0;
+ margin-right: 5px;
+ padding: 4px 10px;
+ font-weight: 400;
+ text-align: center;
+ vertical-align: middle;
+ cursor: pointer;
+ background-image: none;
+ border: 1px solid transparent;
+ white-space: nowrap;
+ font-size: 14px;
+ border-radius: 4px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ vertical-align: top;
+ float: right;
+}
+
+#search #searchBtn {
+ color: white;
+ border-color: #285e8e;
+ background-color: #3b97d7;
+}
+#search #searchReset {
+ color: #333;
+ border-color: #ccc;
+ background-color: #fff;
+}
+#search #searchBtn:hover {
+ background-color: #3276b1;
+}
+#search #searchReset:hover {
+ background-color: #eee;
+}
+
+#search .msg {
+ margin-left: 5px;
+}
+
+#search .searchList{
+ width: 100%;
+ height: 300px;
+ overflow: hidden;
+ clear: both;
+}
+#search .searchList ul{
+ margin:0;
+ padding:0;
+ list-style:none;
+ clear: both;
+ width: 100%;
+ height: 100%;
+ overflow-x: hidden;
+ overflow-y: auto;
+ zoom: 1;
+ position: relative;
+}
+
+#search .searchList li {
+ list-style:none;
+ float: left;
+ display: block;
+ width: 115px;
+ margin: 5px 10px 5px 20px;
+ *margin: 5px 10px 5px 15px;
+ padding:0;
+ font-size: 12px;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
+ position: relative;
+ vertical-align: top;
+ text-align: center;
+ overflow: hidden;
+ cursor: pointer;
+ filter: alpha(Opacity=100);
+ -moz-opacity: 1;
+ opacity: 1;
+ border: 2px solid #eee;
+}
+
+#search .searchList li.selected {
+ filter: alpha(Opacity=40);
+ -moz-opacity: 0.4;
+ opacity: 0.4;
+ border: 2px solid #00a0e9;
+}
+
+#search .searchList li p {
+ background-color: #eee;
+ margin: 0;
+ padding: 0;
+ position: relative;
+ width:100%;
+ height:115px;
+ overflow: hidden;
+}
+
+#search .searchList li p img {
+ cursor: pointer;
+ border: 0;
+}
+
+#search .searchList li a {
+ color: #999;
+ border-top: 1px solid #F2F2F2;
+ background: #FAFAFA;
+ text-align: center;
+ display: block;
+ padding: 0 5px;
+ width: 105px;
+ height:32px;
+ line-height:32px;
+ white-space:nowrap;
+ text-overflow:ellipsis;
+ text-decoration: none;
+ overflow: hidden;
+ word-break: break-all;
+}
+
+#search .searchList a:hover {
+ text-decoration: underline;
+ color: #333;
+}
+#search .searchList .clearFloat{
+ clear: both;
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/image/image.html b/public/static/admin_static/lib/ueditor/dialogs/image/image.html
new file mode 100644
index 0000000..08ca022
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/image/image.html
@@ -0,0 +1,120 @@
+
+
+
+
+
ueditor图片对话框
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/image/image.js b/public/static/admin_static/lib/ueditor/dialogs/image/image.js
new file mode 100644
index 0000000..dee16bb
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/image/image.js
@@ -0,0 +1,1142 @@
+/**
+ * User: Jinqn
+ * Date: 14-04-08
+ * Time: 下午16:34
+ * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片
+ */
+
+(function () {
+
+ var remoteImage,
+ uploadImage,
+ onlineImage,
+ searchImage;
+
+ window.onload = function () {
+ initTabs();
+ initAlign();
+ initButtons();
+ };
+
+ /* 初始化tab标签 */
+ function initTabs() {
+ var tabs = $G('tabhead').children;
+ for (var i = 0; i < tabs.length; i++) {
+ domUtils.on(tabs[i], "click", function (e) {
+ var target = e.target || e.srcElement;
+ setTabFocus(target.getAttribute('data-content-id'));
+ });
+ }
+
+ var img = editor.selection.getRange().getClosedNode();
+ if (img && img.tagName && img.tagName.toLowerCase() == 'img') {
+ setTabFocus('remote');
+ } else {
+ setTabFocus('upload');
+ }
+ }
+
+ /* 初始化tabbody */
+ function setTabFocus(id) {
+ if(!id) return;
+ var i, bodyId, tabs = $G('tabhead').children;
+ for (i = 0; i < tabs.length; i++) {
+ bodyId = tabs[i].getAttribute('data-content-id');
+ if (bodyId == id) {
+ domUtils.addClass(tabs[i], 'focus');
+ domUtils.addClass($G(bodyId), 'focus');
+ } else {
+ domUtils.removeClasses(tabs[i], 'focus');
+ domUtils.removeClasses($G(bodyId), 'focus');
+ }
+ }
+ switch (id) {
+ case 'remote':
+ remoteImage = remoteImage || new RemoteImage();
+ break;
+ case 'upload':
+ setAlign(editor.getOpt('imageInsertAlign'));
+ uploadImage = uploadImage || new UploadImage('queueList');
+ break;
+ case 'online':
+ setAlign(editor.getOpt('imageManagerInsertAlign'));
+ onlineImage = onlineImage || new OnlineImage('imageList');
+ onlineImage.reset();
+ break;
+ case 'search':
+ setAlign(editor.getOpt('imageManagerInsertAlign'));
+ searchImage = searchImage || new SearchImage();
+ break;
+ }
+ }
+
+ /* 初始化onok事件 */
+ function initButtons() {
+
+ dialog.onok = function () {
+ var remote = false, list = [], id, tabs = $G('tabhead').children;
+ for (var i = 0; i < tabs.length; i++) {
+ if (domUtils.hasClass(tabs[i], 'focus')) {
+ id = tabs[i].getAttribute('data-content-id');
+ break;
+ }
+ }
+
+ switch (id) {
+ case 'remote':
+ list = remoteImage.getInsertList();
+ break;
+ case 'upload':
+ list = uploadImage.getInsertList();
+ var count = uploadImage.getQueueCount();
+ if (count) {
+ $('.info', '#queueList').html('
' + '还有2个未上传文件'.replace(/[\d]/, count) + ' ');
+ return false;
+ }
+ break;
+ case 'online':
+ list = onlineImage.getInsertList();
+ break;
+ case 'search':
+ list = searchImage.getInsertList();
+ remote = true;
+ break;
+ }
+
+ if(list) {
+ editor.execCommand('insertimage', list);
+ remote && editor.fireEvent("catchRemoteImage");
+ }
+ };
+ }
+
+
+ /* 初始化对其方式的点击事件 */
+ function initAlign(){
+ /* 点击align图标 */
+ domUtils.on($G("alignIcon"), 'click', function(e){
+ var target = e.target || e.srcElement;
+ if(target.className && target.className.indexOf('-align') != -1) {
+ setAlign(target.getAttribute('data-align'));
+ }
+ });
+ }
+
+ /* 设置对齐方式 */
+ function setAlign(align){
+ align = align || 'none';
+ var aligns = $G("alignIcon").children;
+ for(i = 0; i < aligns.length; i++){
+ if(aligns[i].getAttribute('data-align') == align) {
+ domUtils.addClass(aligns[i], 'focus');
+ $G("align").value = aligns[i].getAttribute('data-align');
+ } else {
+ domUtils.removeClasses(aligns[i], 'focus');
+ }
+ }
+ }
+ /* 获取对齐方式 */
+ function getAlign(){
+ var align = $G("align").value || 'none';
+ return align == 'none' ? '':align;
+ }
+
+
+ /* 在线图片 */
+ function RemoteImage(target) {
+ this.container = utils.isString(target) ? document.getElementById(target) : target;
+ this.init();
+ }
+ RemoteImage.prototype = {
+ init: function () {
+ this.initContainer();
+ this.initEvents();
+ },
+ initContainer: function () {
+ this.dom = {
+ 'url': $G('url'),
+ 'width': $G('width'),
+ 'height': $G('height'),
+ 'border': $G('border'),
+ 'vhSpace': $G('vhSpace'),
+ 'title': $G('title'),
+ 'align': $G('align')
+ };
+ var img = editor.selection.getRange().getClosedNode();
+ if (img) {
+ this.setImage(img);
+ }
+ },
+ initEvents: function () {
+ var _this = this,
+ locker = $G('lock');
+
+ /* 改变url */
+ domUtils.on($G("url"), 'keyup', updatePreview);
+ domUtils.on($G("border"), 'keyup', updatePreview);
+ domUtils.on($G("title"), 'keyup', updatePreview);
+
+ domUtils.on($G("width"), 'keyup', function(){
+ updatePreview();
+ if(locker.checked) {
+ var proportion =locker.getAttribute('data-proportion');
+ $G('height').value = Math.round(this.value / proportion);
+ } else {
+ _this.updateLocker();
+ }
+ });
+ domUtils.on($G("height"), 'keyup', function(){
+ updatePreview();
+ if(locker.checked) {
+ var proportion =locker.getAttribute('data-proportion');
+ $G('width').value = Math.round(this.value * proportion);
+ } else {
+ _this.updateLocker();
+ }
+ });
+ domUtils.on($G("lock"), 'change', function(){
+ var proportion = parseInt($G("width").value) /parseInt($G("height").value);
+ locker.setAttribute('data-proportion', proportion);
+ });
+
+ function updatePreview(){
+ _this.setPreview();
+ }
+ },
+ updateLocker: function(){
+ var width = $G('width').value,
+ height = $G('height').value,
+ locker = $G('lock');
+ if(width && height && width == parseInt(width) && height == parseInt(height)) {
+ locker.disabled = false;
+ locker.title = '';
+ } else {
+ locker.checked = false;
+ locker.disabled = 'disabled';
+ locker.title = lang.remoteLockError;
+ }
+ },
+ setImage: function(img){
+ /* 不是正常的图片 */
+ if (!img.tagName || img.tagName.toLowerCase() != 'img' && !img.getAttribute("src") || !img.src) return;
+
+ var wordImgFlag = img.getAttribute("word_img"),
+ src = wordImgFlag ? wordImgFlag.replace("&", "&") : (img.getAttribute('_src') || img.getAttribute("src", 2).replace("&", "&")),
+ align = editor.queryCommandValue("imageFloat");
+
+ /* 防止onchange事件循环调用 */
+ if (src !== $G("url").value) $G("url").value = src;
+ if(src) {
+ /* 设置表单内容 */
+ $G("width").value = img.width || '';
+ $G("height").value = img.height || '';
+ $G("border").value = img.getAttribute("border") || '0';
+ $G("vhSpace").value = img.getAttribute("vspace") || '0';
+ $G("title").value = img.title || img.alt || '';
+ setAlign(align);
+ this.setPreview();
+ this.updateLocker();
+ }
+ },
+ getData: function(){
+ var data = {};
+ for(var k in this.dom){
+ data[k] = this.dom[k].value;
+ }
+ return data;
+ },
+ setPreview: function(){
+ var url = $G('url').value,
+ ow = parseInt($G('width').value, 10) || 0,
+ oh = parseInt($G('height').value, 10) || 0,
+ border = parseInt($G('border').value, 10) || 0,
+ title = $G('title').value,
+ preview = $G('preview'),
+ width,
+ height;
+
+ url = utils.unhtmlForUrl(url);
+ title = utils.unhtml(title);
+
+ width = ((!ow || !oh) ? preview.offsetWidth:Math.min(ow, preview.offsetWidth));
+ width = width+(border*2) > preview.offsetWidth ? width:(preview.offsetWidth - (border*2));
+ height = (!ow || !oh) ? '':width*oh/ow;
+
+ if(url) {
+ preview.innerHTML = '
';
+ }
+ },
+ getInsertList: function () {
+ var data = this.getData();
+ if(data['url']) {
+ return [{
+ src: data['url'],
+ _src: data['url'],
+ width: data['width'] || '',
+ height: data['height'] || '',
+ border: data['border'] || '',
+ floatStyle: data['align'] || '',
+ vspace: data['vhSpace'] || '',
+ title: data['title'] || '',
+ alt: data['title'] || '',
+ style: "width:" + data['width'] + "px;height:" + data['height'] + "px;"
+ }];
+ } else {
+ return [];
+ }
+ }
+ };
+
+
+
+ /* 上传图片 */
+ function UploadImage(target) {
+ this.$wrap = target.constructor == String ? $('#' + target) : $(target);
+ this.init();
+ }
+ UploadImage.prototype = {
+ init: function () {
+ this.imageList = [];
+ this.initContainer();
+ this.initUploader();
+ },
+ initContainer: function () {
+ this.$queue = this.$wrap.find('.filelist');
+ },
+ /* 初始化容器 */
+ initUploader: function () {
+ var _this = this,
+ $ = jQuery, // just in case. Make sure it's not an other libaray.
+ $wrap = _this.$wrap,
+ // 图片容器
+ $queue = $wrap.find('.filelist'),
+ // 状态栏,包括进度和控制按钮
+ $statusBar = $wrap.find('.statusBar'),
+ // 文件总体选择信息。
+ $info = $statusBar.find('.info'),
+ // 上传按钮
+ $upload = $wrap.find('.uploadBtn'),
+ // 上传按钮
+ $filePickerBtn = $wrap.find('.filePickerBtn'),
+ // 上传按钮
+ $filePickerBlock = $wrap.find('.filePickerBlock'),
+ // 没选择文件之前的内容。
+ $placeHolder = $wrap.find('.placeholder'),
+ // 总体进度条
+ $progress = $statusBar.find('.progress').hide(),
+ // 添加的文件数量
+ fileCount = 0,
+ // 添加的文件总大小
+ fileSize = 0,
+ // 优化retina, 在retina下这个值是2
+ ratio = window.devicePixelRatio || 1,
+ // 缩略图大小
+ thumbnailWidth = 113 * ratio,
+ thumbnailHeight = 113 * ratio,
+ // 可能有pedding, ready, uploading, confirm, done.
+ state = '',
+ // 所有文件的进度信息,key为file id
+ percentages = {},
+ supportTransition = (function () {
+ var s = document.createElement('p').style,
+ r = 'transition' in s ||
+ 'WebkitTransition' in s ||
+ 'MozTransition' in s ||
+ 'msTransition' in s ||
+ 'OTransition' in s;
+ s = null;
+ return r;
+ })(),
+ // WebUploader实例
+ uploader,
+ actionUrl = editor.getActionUrl(editor.getOpt('imageActionName')),
+ acceptExtensions = (editor.getOpt('imageAllowFiles') || []).join('').replace(/\./g, ',').replace(/^[,]/, ''),
+ imageMaxSize = editor.getOpt('imageMaxSize'),
+ imageCompressBorder = editor.getOpt('imageCompressBorder');
+
+ if (!WebUploader.Uploader.support()) {
+ $('#filePickerReady').after($('
').html(lang.errorNotSupport)).hide();
+ return;
+ } else if (!editor.getOpt('imageActionName')) {
+ $('#filePickerReady').after($('
').html(lang.errorLoadConfig)).hide();
+ return;
+ }
+
+ uploader = _this.uploader = WebUploader.create({
+ pick: {
+ id: '#filePickerReady',
+ label: lang.uploadSelectFile
+ },
+ accept: {
+ title: 'Images',
+ extensions: acceptExtensions,
+ mimeTypes: 'image/*'
+ },
+ swf: '../../third-party/webuploader/Uploader.swf',
+ server: actionUrl,
+ fileVal: editor.getOpt('imageFieldName'),
+ duplicate: true,
+ fileSingleSizeLimit: imageMaxSize, // 默认 2 M
+ compress: editor.getOpt('imageCompressEnable') ? {
+ width: imageCompressBorder,
+ height: imageCompressBorder,
+ // 图片质量,只有type为`image/jpeg`的时候才有效。
+ quality: 90,
+ // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false.
+ allowMagnify: false,
+ // 是否允许裁剪。
+ crop: false,
+ // 是否保留头部meta信息。
+ preserveHeaders: true
+ }:false
+ });
+ uploader.addButton({
+ id: '#filePickerBlock'
+ });
+ uploader.addButton({
+ id: '#filePickerBtn',
+ label: lang.uploadAddFile
+ });
+
+ setState('pedding');
+
+ // 当有文件添加进来时执行,负责view的创建
+ function addFile(file) {
+ var $li = $('
' +
+ '' + file.name + '
' +
+ '
' +
+ '
' +
+ ' '),
+
+ $btns = $('
' +
+ '' + lang.uploadDelete + ' ' +
+ '' + lang.uploadTurnRight + ' ' +
+ '' + lang.uploadTurnLeft + '
').appendTo($li),
+ $prgress = $li.find('p.progress span'),
+ $wrap = $li.find('p.imgWrap'),
+ $info = $('
').hide().appendTo($li),
+
+ showError = function (code) {
+ switch (code) {
+ case 'exceed_size':
+ text = lang.errorExceedSize;
+ break;
+ case 'interrupt':
+ text = lang.errorInterrupt;
+ break;
+ case 'http':
+ text = lang.errorHttp;
+ break;
+ case 'not_allow_type':
+ text = lang.errorFileType;
+ break;
+ default:
+ text = lang.errorUploadRetry;
+ break;
+ }
+ $info.text(text).show();
+ };
+
+ if (file.getStatus() === 'invalid') {
+ showError(file.statusText);
+ } else {
+ $wrap.text(lang.uploadPreview);
+ if (browser.ie && browser.version <= 7) {
+ $wrap.text(lang.uploadNoPreview);
+ } else {
+ uploader.makeThumb(file, function (error, src) {
+ if (error || !src) {
+ $wrap.text(lang.uploadNoPreview);
+ } else {
+ var $img = $('
');
+ $wrap.empty().append($img);
+ $img.on('error', function () {
+ $wrap.text(lang.uploadNoPreview);
+ });
+ }
+ }, thumbnailWidth, thumbnailHeight);
+ }
+ percentages[ file.id ] = [ file.size, 0 ];
+ file.rotation = 0;
+
+ /* 检查文件格式 */
+ if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {
+ showError('not_allow_type');
+ uploader.removeFile(file);
+ }
+ }
+
+ file.on('statuschange', function (cur, prev) {
+ if (prev === 'progress') {
+ $prgress.hide().width(0);
+ } else if (prev === 'queued') {
+ $li.off('mouseenter mouseleave');
+ $btns.remove();
+ }
+ // 成功
+ if (cur === 'error' || cur === 'invalid') {
+ showError(file.statusText);
+ percentages[ file.id ][ 1 ] = 1;
+ } else if (cur === 'interrupt') {
+ showError('interrupt');
+ } else if (cur === 'queued') {
+ percentages[ file.id ][ 1 ] = 0;
+ } else if (cur === 'progress') {
+ $info.hide();
+ $prgress.css('display', 'block');
+ } else if (cur === 'complete') {
+ }
+
+ $li.removeClass('state-' + prev).addClass('state-' + cur);
+ });
+
+ $li.on('mouseenter', function () {
+ $btns.stop().animate({height: 30});
+ });
+ $li.on('mouseleave', function () {
+ $btns.stop().animate({height: 0});
+ });
+
+ $btns.on('click', 'span', function () {
+ var index = $(this).index(),
+ deg;
+
+ switch (index) {
+ case 0:
+ uploader.removeFile(file);
+ return;
+ case 1:
+ file.rotation += 90;
+ break;
+ case 2:
+ file.rotation -= 90;
+ break;
+ }
+
+ if (supportTransition) {
+ deg = 'rotate(' + file.rotation + 'deg)';
+ $wrap.css({
+ '-webkit-transform': deg,
+ '-mos-transform': deg,
+ '-o-transform': deg,
+ 'transform': deg
+ });
+ } else {
+ $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');
+ }
+
+ });
+
+ $li.insertBefore($filePickerBlock);
+ }
+
+ // 负责view的销毁
+ function removeFile(file) {
+ var $li = $('#' + file.id);
+ delete percentages[ file.id ];
+ updateTotalProgress();
+ $li.off().find('.file-panel').off().end().remove();
+ }
+
+ function updateTotalProgress() {
+ var loaded = 0,
+ total = 0,
+ spans = $progress.children(),
+ percent;
+
+ $.each(percentages, function (k, v) {
+ total += v[ 0 ];
+ loaded += v[ 0 ] * v[ 1 ];
+ });
+
+ percent = total ? loaded / total : 0;
+
+ spans.eq(0).text(Math.round(percent * 100) + '%');
+ spans.eq(1).css('width', Math.round(percent * 100) + '%');
+ updateStatus();
+ }
+
+ function setState(val, files) {
+
+ if (val != state) {
+
+ var stats = uploader.getStats();
+
+ $upload.removeClass('state-' + state);
+ $upload.addClass('state-' + val);
+
+ switch (val) {
+
+ /* 未选择文件 */
+ case 'pedding':
+ $queue.addClass('element-invisible');
+ $statusBar.addClass('element-invisible');
+ $placeHolder.removeClass('element-invisible');
+ $progress.hide(); $info.hide();
+ uploader.refresh();
+ break;
+
+ /* 可以开始上传 */
+ case 'ready':
+ $placeHolder.addClass('element-invisible');
+ $queue.removeClass('element-invisible');
+ $statusBar.removeClass('element-invisible');
+ $progress.hide(); $info.show();
+ $upload.text(lang.uploadStart);
+ uploader.refresh();
+ break;
+
+ /* 上传中 */
+ case 'uploading':
+ $progress.show(); $info.hide();
+ $upload.text(lang.uploadPause);
+ break;
+
+ /* 暂停上传 */
+ case 'paused':
+ $progress.show(); $info.hide();
+ $upload.text(lang.uploadContinue);
+ break;
+
+ case 'confirm':
+ $progress.show(); $info.hide();
+ $upload.text(lang.uploadStart);
+
+ stats = uploader.getStats();
+ if (stats.successNum && !stats.uploadFailNum) {
+ setState('finish');
+ return;
+ }
+ break;
+
+ case 'finish':
+ $progress.hide(); $info.show();
+ if (stats.uploadFailNum) {
+ $upload.text(lang.uploadRetry);
+ } else {
+ $upload.text(lang.uploadStart);
+ }
+ break;
+ }
+
+ state = val;
+ updateStatus();
+
+ }
+
+ if (!_this.getQueueCount()) {
+ $upload.addClass('disabled')
+ } else {
+ $upload.removeClass('disabled')
+ }
+
+ }
+
+ function updateStatus() {
+ var text = '', stats;
+
+ if (state === 'ready') {
+ text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));
+ } else if (state === 'confirm') {
+ stats = uploader.getStats();
+ if (stats.uploadFailNum) {
+ text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);
+ }
+ } else {
+ stats = uploader.getStats();
+ text = lang.updateStatusFinish.replace('_', fileCount).
+ replace('_KB', WebUploader.formatSize(fileSize)).
+ replace('_', stats.successNum);
+
+ if (stats.uploadFailNum) {
+ text += lang.updateStatusError.replace('_', stats.uploadFailNum);
+ }
+ }
+
+ $info.html(text);
+ }
+
+ uploader.on('fileQueued', function (file) {
+ fileCount++;
+ fileSize += file.size;
+
+ if (fileCount === 1) {
+ $placeHolder.addClass('element-invisible');
+ $statusBar.show();
+ }
+
+ addFile(file);
+ });
+
+ uploader.on('fileDequeued', function (file) {
+ fileCount--;
+ fileSize -= file.size;
+
+ removeFile(file);
+ updateTotalProgress();
+ });
+
+ uploader.on('filesQueued', function (file) {
+ if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {
+ setState('ready');
+ }
+ updateTotalProgress();
+ });
+
+ uploader.on('all', function (type, files) {
+ switch (type) {
+ case 'uploadFinished':
+ setState('confirm', files);
+ break;
+ case 'startUpload':
+ /* 添加额外的GET参数 */
+ var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',
+ url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params);
+ uploader.option('server', url);
+ setState('uploading', files);
+ break;
+ case 'stopUpload':
+ setState('paused', files);
+ break;
+ }
+ });
+
+ uploader.on('uploadBeforeSend', function (file, data, header) {
+ //这里可以通过data对象添加POST参数
+ header['X_Requested_With'] = 'XMLHttpRequest';
+ });
+
+ uploader.on('uploadProgress', function (file, percentage) {
+ var $li = $('#' + file.id),
+ $percent = $li.find('.progress span');
+
+ $percent.css('width', percentage * 100 + '%');
+ percentages[ file.id ][ 1 ] = percentage;
+ updateTotalProgress();
+ });
+
+ uploader.on('uploadSuccess', function (file, ret) {
+ var $file = $('#' + file.id);
+ try {
+ var responseText = (ret._raw || ret),
+ json = utils.str2json(responseText);
+ if (json.state == 'SUCCESS') {
+ _this.imageList.push(json);
+ $file.append('
');
+ } else {
+ $file.find('.error').text(json.state).show();
+ }
+ } catch (e) {
+ $file.find('.error').text(lang.errorServerUpload).show();
+ }
+ });
+
+ uploader.on('uploadError', function (file, code) {
+ });
+ uploader.on('error', function (code, file) {
+ if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {
+ addFile(file);
+ }
+ });
+ uploader.on('uploadComplete', function (file, ret) {
+ });
+
+ $upload.on('click', function () {
+ if ($(this).hasClass('disabled')) {
+ return false;
+ }
+
+ if (state === 'ready') {
+ uploader.upload();
+ } else if (state === 'paused') {
+ uploader.upload();
+ } else if (state === 'uploading') {
+ uploader.stop();
+ }
+ });
+
+ $upload.addClass('state-' + state);
+ updateTotalProgress();
+ },
+ getQueueCount: function () {
+ var file, i, status, readyFile = 0, files = this.uploader.getFiles();
+ for (i = 0; file = files[i++]; ) {
+ status = file.getStatus();
+ if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;
+ }
+ return readyFile;
+ },
+ destroy: function () {
+ this.$wrap.remove();
+ },
+ getInsertList: function () {
+ var i, data, list = [],
+ align = getAlign(),
+ prefix = editor.getOpt('imageUrlPrefix');
+ for (i = 0; i < this.imageList.length; i++) {
+ data = this.imageList[i];
+ list.push({
+ src: prefix + data.url,
+ _src: prefix + data.url,
+ title: data.title,
+ alt: data.original,
+ floatStyle: align
+ });
+ }
+ return list;
+ }
+ };
+
+
+ /* 在线图片 */
+ function OnlineImage(target) {
+ this.container = utils.isString(target) ? document.getElementById(target) : target;
+ this.init();
+ }
+ OnlineImage.prototype = {
+ init: function () {
+ this.reset();
+ this.initEvents();
+ },
+ /* 初始化容器 */
+ initContainer: function () {
+ this.container.innerHTML = '';
+ this.list = document.createElement('ul');
+ this.clearFloat = document.createElement('li');
+
+ domUtils.addClass(this.list, 'list');
+ domUtils.addClass(this.clearFloat, 'clearFloat');
+
+ this.list.appendChild(this.clearFloat);
+ this.container.appendChild(this.list);
+ },
+ /* 初始化滚动事件,滚动到地步自动拉取数据 */
+ initEvents: function () {
+ var _this = this;
+
+ /* 滚动拉取图片 */
+ domUtils.on($G('imageList'), 'scroll', function(e){
+ var panel = this;
+ if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {
+ _this.getImageData();
+ }
+ });
+ /* 选中图片 */
+ domUtils.on(this.container, 'click', function (e) {
+ var target = e.target || e.srcElement,
+ li = target.parentNode;
+
+ if (li.tagName.toLowerCase() == 'li') {
+ if (domUtils.hasClass(li, 'selected')) {
+ domUtils.removeClasses(li, 'selected');
+ } else {
+ domUtils.addClass(li, 'selected');
+ }
+ }
+ });
+ },
+ /* 初始化第一次的数据 */
+ initData: function () {
+
+ /* 拉取数据需要使用的值 */
+ this.state = 0;
+ this.listSize = editor.getOpt('imageManagerListSize');
+ this.listIndex = 0;
+ this.listEnd = false;
+
+ /* 第一次拉取数据 */
+ this.getImageData();
+ },
+ /* 重置界面 */
+ reset: function() {
+ this.initContainer();
+ this.initData();
+ },
+ /* 向后台拉取图片列表数据 */
+ getImageData: function () {
+ var _this = this;
+
+ if(!_this.listEnd && !this.isLoadingData) {
+ this.isLoadingData = true;
+ var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),
+ isJsonp = utils.isCrossDomainUrl(url);
+ ajax.request(url, {
+ 'timeout': 100000,
+ 'dataType': isJsonp ? 'jsonp':'',
+ 'data': utils.extend({
+ start: this.listIndex,
+ size: this.listSize
+ }, editor.queryCommandValue('serverparam')),
+ 'method': 'get',
+ 'onsuccess': function (r) {
+ try {
+ var json = isJsonp ? r:eval('(' + r.responseText + ')');
+ if (json.state == 'SUCCESS') {
+ _this.pushData(json.list);
+ _this.listIndex = parseInt(json.start) + parseInt(json.list.length);
+ if(_this.listIndex >= json.total) {
+ _this.listEnd = true;
+ }
+ _this.isLoadingData = false;
+ }
+ } catch (e) {
+ if(r.responseText.indexOf('ue_separate_ue') != -1) {
+ var list = r.responseText.split(r.responseText);
+ _this.pushData(list);
+ _this.listIndex = parseInt(list.length);
+ _this.listEnd = true;
+ _this.isLoadingData = false;
+ }
+ }
+ },
+ 'onerror': function () {
+ _this.isLoadingData = false;
+ }
+ });
+ }
+ },
+ /* 添加图片到列表界面上 */
+ pushData: function (list) {
+ var i, item, img, icon, _this = this,
+ urlPrefix = editor.getOpt('imageManagerUrlPrefix');
+ for (i = 0; i < list.length; i++) {
+ if(list[i] && list[i].url) {
+ item = document.createElement('li');
+ img = document.createElement('img');
+ icon = document.createElement('span');
+
+ domUtils.on(img, 'load', (function(image){
+ return function(){
+ _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);
+ }
+ })(img));
+ img.width = 113;
+ img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=':'&noCache=') + (+new Date()).toString(36) );
+ img.setAttribute('_src', urlPrefix + list[i].url);
+ domUtils.addClass(icon, 'icon');
+
+ item.appendChild(img);
+ item.appendChild(icon);
+ this.list.insertBefore(item, this.clearFloat);
+ }
+ }
+ },
+ /* 改变图片大小 */
+ scale: function (img, w, h, type) {
+ var ow = img.width,
+ oh = img.height;
+
+ if (type == 'justify') {
+ if (ow >= oh) {
+ img.width = w;
+ img.height = h * oh / ow;
+ img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
+ } else {
+ img.width = w * ow / oh;
+ img.height = h;
+ img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
+ }
+ } else {
+ if (ow >= oh) {
+ img.width = w * ow / oh;
+ img.height = h;
+ img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
+ } else {
+ img.width = w;
+ img.height = h * oh / ow;
+ img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
+ }
+ }
+ },
+ getInsertList: function () {
+ var i, lis = this.list.children, list = [], align = getAlign();
+ for (i = 0; i < lis.length; i++) {
+ if (domUtils.hasClass(lis[i], 'selected')) {
+ var img = lis[i].firstChild,
+ src = img.getAttribute('_src');
+ list.push({
+ src: src,
+ _src: src,
+ alt: src.substr(src.lastIndexOf('/') + 1),
+ floatStyle: align
+ });
+ }
+
+ }
+ return list;
+ }
+ };
+
+ /*搜索图片 */
+ function SearchImage() {
+ this.init();
+ }
+ SearchImage.prototype = {
+ init: function () {
+ this.initEvents();
+ },
+ initEvents: function(){
+ var _this = this;
+
+ /* 点击搜索按钮 */
+ domUtils.on($G('searchBtn'), 'click', function(){
+ var key = $G('searchTxt').value;
+ if(key && key != lang.searchRemind) {
+ _this.getImageData();
+ }
+ });
+ /* 点击清除妞 */
+ domUtils.on($G('searchReset'), 'click', function(){
+ $G('searchTxt').value = lang.searchRemind;
+ $G('searchListUl').innerHTML = '';
+ $G('searchType').selectedIndex = 0;
+ });
+ /* 搜索框聚焦 */
+ domUtils.on($G('searchTxt'), 'focus', function(){
+ var key = $G('searchTxt').value;
+ if(key && key == lang.searchRemind) {
+ $G('searchTxt').value = '';
+ }
+ });
+ /* 搜索框回车键搜索 */
+ domUtils.on($G('searchTxt'), 'keydown', function(e){
+ var keyCode = e.keyCode || e.which;
+ if (keyCode == 13) {
+ $G('searchBtn').click();
+ }
+ });
+
+ /* 选中图片 */
+ domUtils.on($G('searchList'), 'click', function(e){
+ var target = e.target || e.srcElement,
+ li = target.parentNode.parentNode;
+
+ if (li.tagName.toLowerCase() == 'li') {
+ if (domUtils.hasClass(li, 'selected')) {
+ domUtils.removeClasses(li, 'selected');
+ } else {
+ domUtils.addClass(li, 'selected');
+ }
+ }
+ });
+ },
+ encodeToGb2312:function (str){
+ if(!str) return '';
+ var strOut = "",
+ z = 'D2BBB6A18140C6DF814181428143CDF2D5C9C8FDC9CFCFC2D8A2B2BBD3EB8144D8A4B3F38145D7A8C7D2D8A7CAC08146C7F0B1FBD2B5B4D4B6ABCBBFD8A9814781488149B6AA814AC1BDD1CF814BC9A5D8AD814CB8F6D1BEE3DCD6D0814D814EB7E1814FB4AE8150C1D98151D8BC8152CDE8B5A4CEAAD6F78153C0F6BED9D8AF815481558156C4CB8157BEC38158D8B1C3B4D2E58159D6AECEDAD5A7BAF5B7A6C0D6815AC6B9C5D2C7C7815BB9D4815CB3CBD2D2815D815ED8BFBEC5C6F2D2B2CFB0CFE7815F816081618162CAE981638164D8C081658166816781688169816AC2F2C2D2816BC8E9816C816D816E816F817081718172817381748175C7AC8176817781788179817A817B817CC1CB817DD3E8D5F9817ECAC2B6FED8A1D3DABFF78180D4C6BBA5D8C1CEE5BEAE81818182D8A88183D1C7D0A9818481858186D8BDD9EFCDF6BFBA8187BDBBBAA5D2E0B2FABAE0C4B68188CFEDBEA9CDA4C1C18189818A818BC7D7D9F1818CD9F4818D818E818F8190C8CBD8E9819181928193D2DACAB2C8CAD8ECD8EAD8C6BDF6C6CDB3F08194D8EBBDF1BDE98195C8D4B4D381968197C2D88198B2D6D7D0CACBCBFBD5CCB8B6CFC98199819A819BD9DAD8F0C7AA819CD8EE819DB4FAC1EED2D4819E819FD8ED81A0D2C7D8EFC3C781A181A281A3D1F681A4D6D9D8F281A5D8F5BCFEBCDB81A681A781A8C8CE81A9B7DD81AAB7C281ABC6F381AC81AD81AE81AF81B081B181B2D8F8D2C181B381B4CEE9BCBFB7FCB7A5D0DD81B581B681B781B881B9D6DAD3C5BBEFBBE1D8F181BA81BBC9A1CEB0B4AB81BCD8F381BDC9CBD8F6C2D7D8F781BE81BFCEB1D8F981C081C181C2B2AEB9C081C3D9A381C4B0E981C5C1E681C6C9EC81C7CBC581C8CBC6D9A481C981CA81CB81CC81CDB5E881CE81CFB5AB81D081D181D281D381D481D5CEBBB5CDD7A1D7F4D3D381D6CCE581D7BACE81D8D9A2D9DCD3E0D8FDB7F0D7F7D8FED8FAD9A1C4E381D981DAD3B6D8F4D9DD81DBD8FB81DCC5E581DD81DEC0D081DF81E0D1F0B0DB81E181E2BCD1D9A681E3D9A581E481E581E681E7D9ACD9AE81E8D9ABCAB981E981EA81EBD9A9D6B681EC81ED81EEB3DED9A881EFC0FD81F0CACC81F1D9AA81F2D9A781F381F4D9B081F581F6B6B181F781F881F9B9A981FAD2C081FB81FCCFC081FD81FEC2C28240BDC4D5ECB2E0C7C8BFEBD9AD8241D9AF8242CEEABAEE82438244824582468247C7D682488249824A824B824C824D824E824F8250B1E3825182528253B4D9B6EDD9B48254825582568257BFA182588259825AD9DEC7CEC0FED9B8825B825C825D825E825FCBD7B7FD8260D9B58261D9B7B1A3D3E1D9B98262D0C58263D9B682648265D9B18266D9B2C1A9D9B382678268BCF3D0DEB8A98269BEE3826AD9BD826B826C826D826ED9BA826FB0B3827082718272D9C28273827482758276827782788279827A827B827C827D827E8280D9C4B1B68281D9BF82828283B5B98284BEF3828582868287CCC8BAF2D2D08288D9C38289828ABDE8828BB3AB828C828D828ED9C5BEEB828FD9C6D9BBC4DF8290D9BED9C1D9C0829182928293829482958296829782988299829A829BD5AE829CD6B5829DC7E3829E829F82A082A1D9C882A282A382A4BCD9D9CA82A582A682A7D9BC82A8D9CBC6AB82A982AA82AB82AC82ADD9C982AE82AF82B082B1D7F682B2CDA382B382B482B582B682B782B882B982BABDA182BB82BC82BD82BE82BF82C0D9CC82C182C282C382C482C582C682C782C882C9C5BCCDB582CA82CB82CCD9CD82CD82CED9C7B3A5BFFE82CF82D082D182D2B8B582D382D4C0FC82D582D682D782D8B0F882D982DA82DB82DC82DD82DE82DF82E082E182E282E382E482E582E682E782E882E982EA82EB82EC82EDB4F682EED9CE82EFD9CFB4A2D9D082F082F1B4DF82F282F382F482F582F6B0C182F782F882F982FA82FB82FC82FDD9D1C9B582FE8340834183428343834483458346834783488349834A834B834C834D834E834F83508351CFF1835283538354835583568357D9D283588359835AC1C5835B835C835D835E835F836083618362836383648365D9D6C9AE8366836783688369D9D5D9D4D9D7836A836B836C836DCBDB836EBDA9836F8370837183728373C6A7837483758376837783788379837A837B837C837DD9D3D9D8837E83808381D9D9838283838384838583868387C8E583888389838A838B838C838D838E838F839083918392839383948395C0DC8396839783988399839A839B839C839D839E839F83A083A183A283A383A483A583A683A783A883A983AA83AB83AC83AD83AE83AF83B083B183B2B6F9D8A3D4CA83B3D4AAD0D6B3E4D5D783B4CFC8B9E283B5BFCB83B6C3E283B783B883B9B6D283BA83BBCDC3D9EED9F083BC83BD83BEB5B383BFB6B583C083C183C283C383C4BEA483C583C6C8EB83C783C8C8AB83C983CAB0CBB9ABC1F9D9E283CBC0BCB9B283CCB9D8D0CBB1F8C6E4BEDFB5E4D7C883CDD1F8BCE6CADE83CE83CFBCBDD9E6D8E783D083D1C4DA83D283D3B8D4C8BD83D483D5B2E1D4D983D683D783D883D9C3B083DA83DBC3E1DAA2C8DF83DCD0B483DDBEFCC5A983DE83DF83E0B9DA83E1DAA383E2D4A9DAA483E383E483E583E683E7D9FBB6AC83E883E9B7EBB1F9D9FCB3E5BEF683EABFF6D2B1C0E483EB83EC83EDB6B3D9FED9FD83EE83EFBEBB83F083F183F2C6E083F3D7BCDAA183F4C1B983F5B5F2C1E883F683F7BCF583F8B4D583F983FA83FB83FC83FD83FE844084418442C1DD8443C4FD84448445BCB8B7B284468447B7EF84488449844A844B844C844DD9EC844EC6BE844FBFADBBCB84508451B5CA8452DBC9D0D78453CDB9B0BCB3F6BBF7DBCABAAF8454D4E4B5B6B5F3D8D6C8D084558456B7D6C7D0D8D78457BFAF84588459DBBBD8D8845A845BD0CCBBAE845C845D845EEBBEC1D0C1F5D4F2B8D5B4B4845FB3F584608461C9BE846284638464C5D0846584668467C5D9C0FB8468B1F08469D8D9B9CE846AB5BD846B846CD8DA846D846ED6C6CBA2C8AFC9B2B4CCBFCC846FB9F48470D8DBD8DCB6E7BCC1CCEA847184728473847484758476CFF78477D8DDC7B084788479B9D0BDA3847A847BCCDE847CC6CA847D847E848084818482D8E08483D8DE84848485D8DF848684878488B0FE8489BEE7848ACAA3BCF4848B848C848D848EB8B1848F8490B8EE849184928493849484958496849784988499849AD8E2849BBDCB849CD8E4D8E3849D849E849F84A084A1C5FC84A284A384A484A584A684A784A8D8E584A984AAD8E684AB84AC84AD84AE84AF84B084B1C1A684B2C8B0B0ECB9A6BCD3CEF1DBBDC1D384B384B484B584B6B6AFD6FAC5ACBDD9DBBEDBBF84B784B884B9C0F8BEA2C0CD84BA84BB84BC84BD84BE84BF84C084C184C284C3DBC0CAC684C484C584C6B2AA84C784C884C9D3C284CAC3E384CBD1AB84CC84CD84CE84CFDBC284D0C0D584D184D284D3DBC384D4BFB184D584D684D784D884D984DAC4BC84DB84DC84DD84DEC7DA84DF84E084E184E284E384E484E584E684E784E884E9DBC484EA84EB84EC84ED84EE84EF84F084F1D9E8C9D784F284F384F4B9B4CEF0D4C884F584F684F784F8B0FCB4D284F9D0D984FA84FB84FC84FDD9E984FEDECBD9EB8540854185428543D8B0BBAFB1B18544B3D7D8CE85458546D4D185478548BDB3BFEF8549CFBB854A854BD8D0854C854D854EB7CB854F85508551D8D185528553855485558556855785588559855A855BC6A5C7F8D2BD855C855DD8D2C4E4855ECAAE855FC7A78560D8A68561C9FDCEE7BBDCB0EB856285638564BBAAD0AD8565B1B0D7E4D7BF8566B5A5C2F4C4CF85678568B2A98569B2B7856AB1E5DFB2D5BCBFA8C2ACD8D5C2B1856BD8D4CED4856CDAE0856DCEC0856E856FD8B4C3AED3A1CEA38570BCB4C8B4C2D18571BEEDD0B68572DAE18573857485758576C7E485778578B3A78579B6F2CCFCC0FA857A857BC0F7857CD1B9D1E1D8C7857D857E85808581858285838584B2DE85858586C0E58587BAF185888589D8C8858AD4AD858B858CCFE1D8C9858DD8CACFC3858EB3F8BEC7858F859085918592D8CB8593859485958596859785988599DBCC859A859B859C859DC8A5859E859F85A0CFD885A1C8FEB2CE85A285A385A485A585A6D3D6B2E6BCB0D3D1CBABB7B485A785A885A9B7A285AA85ABCAE585ACC8A1CADCB1E4D0F085ADC5D185AE85AF85B0DBC5B5FE85B185B2BFDAB9C5BEE4C1ED85B3DFB6DFB5D6BBBDD0D5D9B0C8B6A3BFC9CCA8DFB3CAB7D3D285B4D8CFD2B6BAC5CBBECCBE85B5DFB7B5F0DFB485B685B785B8D3F585B9B3D4B8F785BADFBA85BBBACFBCAAB5F585BCCDACC3FBBAF3C0F4CDC2CFF2DFB8CFC585BDC2C0DFB9C2F085BE85BF85C0BEFD85C1C1DFCDCCD2F7B7CDDFC185C2DFC485C385C4B7F1B0C9B6D6B7D485C5BAACCCFDBFD4CBB1C6F485C6D6A8DFC585C7CEE2B3B385C885C9CEFCB4B585CACEC7BAF085CBCEE185CCD1BD85CD85CEDFC085CF85D0B4F485D1B3CA85D2B8E6DFBB85D385D485D585D6C4C585D7DFBCDFBDDFBEC5BBDFBFDFC2D4B1DFC385D8C7BACED885D985DA85DB85DC85DDC4D885DEDFCA85DFDFCF85E0D6DC85E185E285E385E485E585E685E785E8DFC9DFDACEB685E9BAC7DFCEDFC8C5DE85EA85EBC9EBBAF4C3FC85EC85EDBED785EEDFC685EFDFCD85F0C5D885F185F285F385F4D5A6BACD85F5BECCD3BDB8C085F6D6E485F7DFC7B9BEBFA785F885F9C1FCDFCBDFCC85FADFD085FB85FC85FD85FE8640DFDBDFE58641DFD7DFD6D7C9DFE3DFE4E5EBD2A7DFD28642BFA98643D4DB8644BFC8DFD4864586468647CFCC86488649DFDD864AD1CA864BDFDEB0A7C6B7DFD3864CBAE5864DB6DFCDDBB9FED4D5864E864FDFDFCFECB0A5DFE7DFD1D1C6DFD5DFD8DFD9DFDC8650BBA98651DFE0DFE18652DFE2DFE6DFE8D3B486538654865586568657B8E7C5B6DFEAC9DAC1A8C4C486588659BFDECFF8865A865B865CD5DCDFEE865D865E865F866086618662B2B88663BADFDFEC8664DBC18665D1E48666866786688669CBF4B4BD866AB0A6866B866C866D866E866FDFF1CCC6DFF286708671DFED867286738674867586768677DFE986788679867A867BDFEB867CDFEFDFF0BBBD867D867EDFF386808681DFF48682BBA38683CADBCEA8E0A7B3AA8684E0A6868586868687E0A186888689868A868BDFFE868CCDD9DFFC868DDFFA868EBFD0D7C4868FC9CC86908691DFF8B0A186928693869486958696DFFD869786988699869ADFFBE0A2869B869C869D869E869FE0A886A086A186A286A3B7C886A486A5C6A1C9B6C0B2DFF586A686A7C5BE86A8D8C4DFF9C4F686A986AA86AB86AC86AD86AEE0A3E0A4E0A5D0A586AF86B0E0B4CCE486B1E0B186B2BFA6E0AFCEB9E0ABC9C686B386B4C0AEE0AEBAEDBAB0E0A986B586B686B7DFF686B8E0B386B986BAE0B886BB86BC86BDB4ADE0B986BE86BFCFB2BAC886C0E0B086C186C286C386C486C586C686C7D0FA86C886C986CA86CB86CC86CD86CE86CF86D0E0AC86D1D4FB86D2DFF786D3C5E786D4E0AD86D5D3F786D6E0B6E0B786D786D886D986DA86DBE0C4D0E186DC86DD86DEE0BC86DF86E0E0C9E0CA86E186E286E3E0BEE0AAC9A4E0C186E4E0B286E586E686E786E886E9CAC8E0C386EAE0B586EBCECB86ECCBC3E0CDE0C6E0C286EDE0CB86EEE0BAE0BFE0C086EF86F0E0C586F186F2E0C7E0C886F3E0CC86F4E0BB86F586F686F786F886F9CBD4E0D586FAE0D6E0D286FB86FC86FD86FE87408741E0D0BCCE87428743E0D18744B8C2D8C587458746874787488749874A874B874CD0EA874D874EC2EF874F8750E0CFE0BD875187528753E0D4E0D387548755E0D78756875787588759E0DCE0D8875A875B875CD6F6B3B0875DD7EC875ECBBB875F8760E0DA8761CEFB876287638764BAD987658766876787688769876A876B876C876D876E876F8770E0E1E0DDD2AD87718772877387748775E0E287768777E0DBE0D9E0DF87788779E0E0877A877B877C877D877EE0DE8780E0E4878187828783C6F7D8ACD4EBE0E6CAC98784878587868787E0E587888789878A878BB8C1878C878D878E878FE0E7E0E887908791879287938794879587968797E0E9E0E387988799879A879B879C879D879EBABFCCE7879F87A087A1E0EA87A287A387A487A587A687A787A887A987AA87AB87AC87AD87AE87AF87B0CFF987B187B287B387B487B587B687B787B887B987BA87BBE0EB87BC87BD87BE87BF87C087C187C2C8C287C387C487C587C6BDC087C787C887C987CA87CB87CC87CD87CE87CF87D087D187D287D3C4D287D487D587D687D787D887D987DA87DB87DCE0EC87DD87DEE0ED87DF87E0C7F4CBC487E1E0EEBBD8D8B6D2F2E0EFCDC587E2B6DA87E387E487E587E687E787E8E0F187E9D4B087EA87EBC0A7B4D187EC87EDCEA7E0F087EE87EF87F0E0F2B9CC87F187F2B9FACDBCE0F387F387F487F5C6D4E0F487F6D4B287F7C8A6E0F6E0F587F887F987FA87FB87FC87FD87FE8840884188428843884488458846884788488849E0F7884A884BCDC1884C884D884ECAA5884F885088518852D4DADBD7DBD98853DBD8B9E7DBDCDBDDB5D888548855DBDA8856885788588859885ADBDBB3A1DBDF885B885CBBF8885DD6B7885EDBE0885F886088618862BEF988638864B7BB8865DBD0CCAEBFB2BBB5D7F8BFD38866886788688869886ABFE9886B886CBCE1CCB3DBDEB0D3CEEBB7D8D7B9C6C2886D886EC0A4886FCCB98870DBE7DBE1C6BADBE38871DBE88872C5F7887388748875DBEA88768877DBE9BFC088788879887ADBE6DBE5887B887C887D887E8880B4B9C0ACC2A2DBE2DBE48881888288838884D0CDDBED88858886888788888889C0DDDBF2888A888B888C888D888E888F8890B6E28891889288938894DBF3DBD2B9B8D4ABDBEC8895BFD1DBF08896DBD18897B5E68898DBEBBFE58899889A889BDBEE889CDBF1889D889E889FDBF988A088A188A288A388A488A588A688A788A8B9A1B0A388A988AA88AB88AC88AD88AE88AFC2F188B088B1B3C7DBEF88B288B3DBF888B4C6D2DBF488B588B6DBF5DBF7DBF688B788B8DBFE88B9D3F2B2BA88BA88BB88BCDBFD88BD88BE88BF88C088C188C288C388C4DCA488C5DBFB88C688C788C888C9DBFA88CA88CB88CCDBFCC5E0BBF988CD88CEDCA388CF88D0DCA588D1CCC388D288D388D4B6D1DDC088D588D688D7DCA188D8DCA288D988DA88DBC7B588DC88DD88DEB6E988DF88E088E1DCA788E288E388E488E5DCA688E6DCA9B1A488E788E8B5CC88E988EA88EB88EC88EDBFB088EE88EF88F088F188F2D1DF88F388F488F588F6B6C288F788F888F988FA88FB88FC88FD88FE894089418942894389448945DCA88946894789488949894A894B894CCBFAEBF3894D894E894FCBDC89508951CBFE895289538954CCC189558956895789588959C8FB895A895B895C895D895E895FDCAA89608961896289638964CCEEDCAB89658966896789688969896A896B896C896D896E896F897089718972897389748975DBD38976DCAFDCAC8977BEB38978CAFB8979897A897BDCAD897C897D897E89808981898289838984C9CAC4B989858986898789888989C7BDDCAE898A898B898CD4F6D0E6898D898E898F89908991899289938994C4ABB6D589958996899789988999899A899B899C899D899E899F89A089A189A289A389A489A589A6DBD489A789A889A989AAB1DA89AB89AC89ADDBD589AE89AF89B089B189B289B389B489B589B689B789B8DBD689B989BA89BBBABE89BC89BD89BE89BF89C089C189C289C389C489C589C689C789C889C9C8C089CA89CB89CC89CD89CE89CFCABFC8C989D0D7B389D1C9F989D289D3BFC789D489D5BAF889D689D7D2BC89D889D989DA89DB89DC89DD89DE89DFE2BA89E0B4A689E189E2B1B889E389E489E589E689E7B8B489E8CFC489E989EA89EB89ECD9E7CFA6CDE289ED89EED9EDB6E089EFD2B989F089F1B9BB89F289F389F489F5E2B9E2B789F6B4F389F7CCECCCABB7F289F8D8B2D1EBBABB89F9CAA789FA89FBCDB789FC89FDD2C4BFE4BCD0B6E189FEDEC58A408A418A428A43DEC6DBBC8A44D1D98A458A46C6E6C4CEB7EE8A47B7DC8A488A49BFFCD7E08A4AC6F58A4B8A4CB1BCDEC8BDB1CCD7DECA8A4DDEC98A4E8A4F8A508A518A52B5EC8A53C9DD8A548A55B0C28A568A578A588A598A5A8A5B8A5C8A5D8A5E8A5F8A608A618A62C5AEC5AB8A63C4CC8A64BCE9CBFD8A658A668A67BAC38A688A698A6AE5F9C8E7E5FACDFD8A6BD7B1B8BEC2E88A6CC8D18A6D8A6EE5FB8A6F8A708A718A72B6CABCCB8A738A74D1FDE6A18A75C3EE8A768A778A788A79E6A48A7A8A7B8A7C8A7DE5FEE6A5CDD78A7E8A80B7C1E5FCE5FDE6A38A818A82C4DDE6A88A838A84E6A78A858A868A878A888A898A8AC3C38A8BC6DE8A8C8A8DE6AA8A8E8A8F8A908A918A928A938A94C4B78A958A968A97E6A2CABC8A988A998A9A8A9BBDE3B9C3E6A6D0D5CEAF8A9C8A9DE6A9E6B08A9ED2A68A9FBDAAE6AD8AA08AA18AA28AA38AA4E6AF8AA5C0D18AA68AA7D2CC8AA88AA98AAABCA78AAB8AAC8AAD8AAE8AAF8AB08AB18AB28AB38AB48AB58AB6E6B18AB7D2F68AB88AB98ABAD7CB8ABBCDFE8ABCCDDEC2A6E6ABE6ACBDBFE6AEE6B38ABD8ABEE6B28ABF8AC08AC18AC2E6B68AC3E6B88AC48AC58AC68AC7C4EF8AC88AC98ACAC4C88ACB8ACCBEEAC9EF8ACD8ACEE6B78ACFB6F08AD08AD18AD2C3E48AD38AD48AD58AD68AD78AD88AD9D3E9E6B48ADAE6B58ADBC8A28ADC8ADD8ADE8ADF8AE0E6BD8AE18AE28AE3E6B98AE48AE58AE68AE78AE8C6C58AE98AEACDF1E6BB8AEB8AEC8AED8AEE8AEF8AF08AF18AF28AF38AF4E6BC8AF58AF68AF78AF8BBE98AF98AFA8AFB8AFC8AFD8AFE8B40E6BE8B418B428B438B44E6BA8B458B46C0B78B478B488B498B4A8B4B8B4C8B4D8B4E8B4FD3A4E6BFC9F4E6C38B508B51E6C48B528B538B548B55D0F68B568B578B588B598B5A8B5B8B5C8B5D8B5E8B5F8B608B618B628B638B648B658B668B67C3BD8B688B698B6A8B6B8B6C8B6D8B6EC3C4E6C28B6F8B708B718B728B738B748B758B768B778B788B798B7A8B7B8B7CE6C18B7D8B7E8B808B818B828B838B84E6C7CFB18B85EBF48B868B87E6CA8B888B898B8A8B8B8B8CE6C58B8D8B8EBCDEC9A98B8F8B908B918B928B938B94BCB58B958B96CFD38B978B988B998B9A8B9BE6C88B9CE6C98B9DE6CE8B9EE6D08B9F8BA08BA1E6D18BA28BA38BA4E6CBB5D58BA5E6CC8BA68BA7E6CF8BA88BA9C4DB8BAAE6C68BAB8BAC8BAD8BAE8BAFE6CD8BB08BB18BB28BB38BB48BB58BB68BB78BB88BB98BBA8BBB8BBC8BBD8BBE8BBF8BC08BC18BC28BC38BC48BC58BC6E6D28BC78BC88BC98BCA8BCB8BCC8BCD8BCE8BCF8BD08BD18BD2E6D4E6D38BD38BD48BD58BD68BD78BD88BD98BDA8BDB8BDC8BDD8BDE8BDF8BE08BE18BE28BE38BE48BE58BE68BE78BE88BE98BEA8BEB8BECE6D58BEDD9F88BEE8BEFE6D68BF08BF18BF28BF38BF48BF58BF68BF7E6D78BF88BF98BFA8BFB8BFC8BFD8BFE8C408C418C428C438C448C458C468C47D7D3E6DD8C48E6DEBFD7D4D08C49D7D6B4E6CBEFE6DAD8C3D7CED0A28C4AC3CF8C4B8C4CE6DFBCBEB9C2E6DBD1A78C4D8C4EBAA2C2CF8C4FD8AB8C508C518C52CAEBE5EE8C53E6DC8C54B7F58C558C568C578C58C8E68C598C5AC4F58C5B8C5CE5B2C4FE8C5DCBFCE5B3D5AC8C5ED3EECAD8B0B28C5FCBCECDEA8C608C61BAEA8C628C638C64E5B58C65E5B48C66D7DAB9D9D6E6B6A8CDF0D2CBB1A6CAB58C67B3E8C9F3BFCDD0FBCAD2E5B6BBC28C688C698C6ACFDCB9AC8C6B8C6C8C6D8C6ED4D78C6F8C70BAA6D1E7CFFCBCD28C71E5B7C8DD8C728C738C74BFEDB1F6CBDE8C758C76BCC58C77BCC4D2FAC3DCBFDC8C788C798C7A8C7BB8BB8C7C8C7D8C7EC3C28C80BAAED4A28C818C828C838C848C858C868C878C888C89C7DEC4AFB2EC8C8AB9D18C8B8C8CE5BBC1C88C8D8C8ED5AF8C8F8C908C918C928C93E5BC8C94E5BE8C958C968C978C988C998C9A8C9BB4E7B6D4CBC2D1B0B5BC8C9C8C9DCAD98C9EB7E28C9F8CA0C9E48CA1BDAB8CA28CA3CEBED7F08CA48CA58CA68CA7D0A18CA8C9D98CA98CAAB6FBE6D8BCE28CABB3BE8CACC9D08CADE6D9B3A28CAE8CAF8CB08CB1DECC8CB2D3C8DECD8CB3D2A28CB48CB58CB68CB7DECE8CB88CB98CBA8CBBBECD8CBC8CBDDECF8CBE8CBF8CC0CAACD2FCB3DFE5EAC4E1BEA1CEB2C4F2BED6C6A8B2E38CC18CC2BED38CC38CC4C7FCCCEBBDECCEDD8CC58CC6CABAC6C1E5ECD0BC8CC78CC88CC9D5B98CCA8CCB8CCCE5ED8CCD8CCE8CCF8CD0CAF48CD1CDC0C2C58CD2E5EF8CD3C2C4E5F08CD48CD58CD68CD78CD88CD98CDAE5F8CDCD8CDBC9BD8CDC8CDD8CDE8CDF8CE08CE18CE2D2D9E1A88CE38CE48CE58CE6D3EC8CE7CBEAC6F18CE88CE98CEA8CEB8CECE1AC8CED8CEE8CEFE1A7E1A98CF08CF1E1AAE1AF8CF28CF3B2ED8CF4E1ABB8DAE1ADE1AEE1B0B5BAE1B18CF58CF68CF78CF88CF9E1B3E1B88CFA8CFB8CFC8CFD8CFED1D28D40E1B6E1B5C1EB8D418D428D43E1B78D44D4C08D45E1B28D46E1BAB0B68D478D488D498D4AE1B48D4BBFF98D4CE1B98D4D8D4EE1BB8D4F8D508D518D528D538D54E1BE8D558D568D578D588D598D5AE1BC8D5B8D5C8D5D8D5E8D5F8D60D6C58D618D628D638D648D658D668D67CFBF8D688D69E1BDE1BFC2CD8D6AB6EB8D6BD3F88D6C8D6DC7CD8D6E8D6FB7E58D708D718D728D738D748D758D768D778D788D79BEFE8D7A8D7B8D7C8D7D8D7E8D80E1C0E1C18D818D82E1C7B3E78D838D848D858D868D878D88C6E98D898D8A8D8B8D8C8D8DB4DE8D8ED1C28D8F8D908D918D92E1C88D938D94E1C68D958D968D978D988D99E1C58D9AE1C3E1C28D9BB1C08D9C8D9D8D9ED5B8E1C48D9F8DA08DA18DA28DA3E1CB8DA48DA58DA68DA78DA88DA98DAA8DABE1CCE1CA8DAC8DAD8DAE8DAF8DB08DB18DB28DB3EFFA8DB48DB5E1D3E1D2C7B68DB68DB78DB88DB98DBA8DBB8DBC8DBD8DBE8DBF8DC0E1C98DC18DC2E1CE8DC3E1D08DC48DC58DC68DC78DC88DC98DCA8DCB8DCC8DCD8DCEE1D48DCFE1D1E1CD8DD08DD1E1CF8DD28DD38DD48DD5E1D58DD68DD78DD88DD98DDA8DDB8DDC8DDD8DDE8DDF8DE08DE18DE2E1D68DE38DE48DE58DE68DE78DE88DE98DEA8DEB8DEC8DED8DEE8DEF8DF08DF18DF28DF38DF48DF58DF68DF78DF8E1D78DF98DFA8DFBE1D88DFC8DFD8DFE8E408E418E428E438E448E458E468E478E488E498E4A8E4B8E4C8E4D8E4E8E4F8E508E518E528E538E548E55E1DA8E568E578E588E598E5A8E5B8E5C8E5D8E5E8E5F8E608E618E62E1DB8E638E648E658E668E678E688E69CEA18E6A8E6B8E6C8E6D8E6E8E6F8E708E718E728E738E748E758E76E7DD8E77B4A8D6DD8E788E79D1B2B3B28E7A8E7BB9A4D7F3C7C9BEDEB9AE8E7CCED78E7D8E7EB2EEDBCF8E80BCBAD2D1CBC8B0CD8E818E82CFEF8E838E848E858E868E87D9E3BDED8E888E89B1D2CAD0B2BC8E8ACBA7B7AB8E8BCAA68E8C8E8D8E8ECFA38E8F8E90E0F8D5CAE0FB8E918E92E0FAC5C1CCFB8E93C1B1E0F9D6E3B2AFD6C4B5DB8E948E958E968E978E988E998E9A8E9BB4F8D6A18E9C8E9D8E9E8E9F8EA0CFAFB0EF8EA18EA2E0FC8EA38EA48EA58EA68EA7E1A1B3A38EA88EA9E0FDE0FEC3B18EAA8EAB8EAC8EADC3DD8EAEE1A2B7F98EAF8EB08EB18EB28EB38EB4BBCF8EB58EB68EB78EB88EB98EBA8EBBE1A3C4BB8EBC8EBD8EBE8EBF8EC0E1A48EC18EC2E1A58EC38EC4E1A6B4B18EC58EC68EC78EC88EC98ECA8ECB8ECC8ECD8ECE8ECF8ED08ED18ED28ED3B8C9C6BDC4EA8ED4B2A28ED5D0D28ED6E7DBBBC3D3D7D3C48ED7B9E3E2CF8ED88ED98EDAD7AF8EDBC7ECB1D38EDC8EDDB4B2E2D18EDE8EDF8EE0D0F2C2AEE2D08EE1BFE2D3A6B5D7E2D2B5EA8EE2C3EDB8FD8EE3B8AE8EE4C5D3B7CFE2D48EE58EE68EE78EE8E2D3B6C8D7F98EE98EEA8EEB8EEC8EEDCDA58EEE8EEF8EF08EF18EF2E2D88EF3E2D6CAFCBFB5D3B9E2D58EF48EF58EF68EF7E2D78EF88EF98EFA8EFB8EFC8EFD8EFE8F408F418F42C1AEC0C88F438F448F458F468F478F48E2DBE2DAC0AA8F498F4AC1CE8F4B8F4C8F4D8F4EE2DC8F4F8F508F518F528F538F548F558F568F578F588F598F5AE2DD8F5BE2DE8F5C8F5D8F5E8F5F8F608F618F628F638F64DBC88F65D1D3CDA28F668F67BDA88F688F698F6ADEC3D8A5BFAADBCDD2ECC6FAC5AA8F6B8F6C8F6DDEC48F6EB1D7DFAE8F6F8F708F71CABD8F72DFB18F73B9AD8F74D2FD8F75B8A5BAEB8F768F77B3DA8F788F798F7AB5DCD5C58F7B8F7C8F7D8F7EC3D6CFD2BBA18F80E5F3E5F28F818F82E5F48F83CDE48F84C8F58F858F868F878F888F898F8A8F8BB5AFC7BF8F8CE5F68F8D8F8E8F8FECB08F908F918F928F938F948F958F968F978F988F998F9A8F9B8F9C8F9D8F9EE5E68F9FB9E9B5B18FA0C2BCE5E8E5E7E5E98FA18FA28FA38FA4D2CD8FA58FA68FA7E1EAD0CE8FA8CDAE8FA9D1E58FAA8FABB2CAB1EB8FACB1F2C5ED8FAD8FAED5C3D3B08FAFE1DC8FB08FB18FB2E1DD8FB3D2DB8FB4B3B9B1CB8FB58FB68FB7CDF9D5F7E1DE8FB8BEB6B4FD8FB9E1DFBADCE1E0BBB2C2C9E1E18FBA8FBB8FBCD0EC8FBDCDBD8FBE8FBFE1E28FC0B5C3C5C7E1E38FC18FC2E1E48FC38FC48FC58FC6D3F98FC78FC88FC98FCA8FCB8FCCE1E58FCDD1AD8FCE8FCFE1E6CEA28FD08FD18FD28FD38FD48FD5E1E78FD6B5C28FD78FD88FD98FDAE1E8BBD58FDB8FDC8FDD8FDE8FDFD0C4E2E0B1D8D2E48FE08FE1E2E18FE28FE3BCC9C8CC8FE4E2E3ECFEECFDDFAF8FE58FE68FE7E2E2D6BECDFCC3A68FE88FE98FEAE3C38FEB8FECD6D2E2E78FED8FEEE2E88FEF8FF0D3C78FF18FF2E2ECBFEC8FF3E2EDE2E58FF48FF5B3C08FF68FF78FF8C4EE8FF98FFAE2EE8FFB8FFCD0C38FFDBAF6E2E9B7DEBBB3CCACCBCBE2E4E2E6E2EAE2EB8FFE90409041E2F790429043E2F4D4F5E2F390449045C5AD9046D5FAC5C2B2C090479048E2EF9049E2F2C1AFCBBC904A904BB5A1E2F9904C904D904EBCB1E2F1D0D4D4B9E2F5B9D6E2F6904F90509051C7D390529053905490559056E2F0905790589059905A905BD7DCEDA1905C905DE2F8905EEDA5E2FECAD1905F906090619062906390649065C1B59066BBD090679068BFD69069BAE3906A906BCBA1906C906D906EEDA6EDA3906F9070EDA29071907290739074BBD6EDA7D0F490759076EDA4BADEB6F7E3A1B6B2CCF1B9A79077CFA2C7A190789079BFD2907A907BB6F1907CE2FAE2FBE2FDE2FCC4D5E3A2907DD3C1907E90809081E3A7C7C49082908390849085CFA490869087E3A9BAB790889089908A908BE3A8908CBBDA908DE3A3908E908F9090E3A4E3AA9091E3A69092CEF2D3C690939094BBBC90959096D4C39097C4FA90989099EDA8D0FCE3A5909AC3F5909BE3ADB1AF909CE3B2909D909E909FBCC290A090A1E3ACB5BF90A290A390A490A590A690A790A890A9C7E9E3B090AA90AB90ACBEAACDEF90AD90AE90AF90B090B1BBF390B290B390B4CCE890B590B6E3AF90B7E3B190B8CFA7E3AE90B9CEA9BBDD90BA90BB90BC90BD90BEB5EBBEE5B2D2B3CD90BFB1B9E3ABB2D1B5ACB9DFB6E890C090C1CFEBE3B790C2BBCC90C390C4C8C7D0CA90C590C690C790C890C9E3B8B3EE90CA90CB90CC90CDEDA990CED3FAD3E490CF90D090D1EDAAE3B9D2E290D290D390D490D590D6E3B590D790D890D990DAD3DE90DB90DC90DD90DEB8D0E3B390DF90E0E3B6B7DF90E1E3B4C0A290E290E390E4E3BA90E590E690E790E890E990EA90EB90EC90ED90EE90EF90F090F190F290F390F490F590F690F7D4B890F890F990FA90FB90FC90FD90FE9140B4C89141E3BB9142BBC59143C9F791449145C9E5914691479148C4BD9149914A914B914C914D914E914FEDAB9150915191529153C2FD9154915591569157BBDBBFAE91589159915A915B915C915D915ECEBF915F916091619162E3BC9163BFB6916491659166916791689169916A916B916C916D916E916F9170917191729173917491759176B1EF91779178D4F79179917A917B917C917DE3BE917E9180918191829183918491859186EDAD918791889189918A918B918C918D918E918FE3BFBAA9EDAC91909191E3BD91929193919491959196919791989199919A919BE3C0919C919D919E919F91A091A1BAB691A291A391A4B6AE91A591A691A791A891A9D0B891AAB0C3EDAE91AB91AC91AD91AE91AFEDAFC0C191B0E3C191B191B291B391B491B591B691B791B891B991BA91BB91BC91BD91BE91BF91C091C1C5B391C291C391C491C591C691C791C891C991CA91CB91CC91CD91CE91CFE3C291D091D191D291D391D491D591D691D791D8DCB291D991DA91DB91DC91DD91DEEDB091DFB8EA91E0CEECEAA7D0E7CAF9C8D6CFB7B3C9CED2BDE491E191E2E3DEBBF2EAA8D5BD91E3C6DDEAA991E491E591E6EAAA91E7EAACEAAB91E8EAAEEAAD91E991EA91EB91ECBDD891EDEAAF91EEC2BE91EF91F091F191F2B4C1B4F791F391F4BBA791F591F691F791F891F9ECE6ECE5B7BFCBF9B1E291FAECE791FB91FC91FDC9C8ECE8ECE991FECAD6DED0B2C5D4FA92409241C6CBB0C7B4F2C8D3924292439244CDD092459246BFB8924792489249924A924B924C924DBFDB924E924FC7A4D6B49250C0A9DED1C9A8D1EFC5A4B0E7B3B6C8C592519252B0E292539254B7F692559256C5FA92579258B6F39259D5D2B3D0BCBC925A925B925CB3AD925D925E925F9260BEF1B0D1926192629263926492659266D2D6CAE3D7A59267CDB6B6B6BFB9D5DB9268B8A7C5D79269926A926BDED2BFD9C2D5C7C0926CBBA4B1A8926D926EC5EA926F9270C5FBCCA79271927292739274B1A7927592769277B5D692789279927AC4A8927BDED3D1BAB3E9927CC3F2927D927EB7F79280D6F4B5A3B2F0C4B4C4E9C0ADDED49281B0E8C5C4C1E09282B9D59283BEDCCDD8B0CE9284CDCFDED6BED0D7BEDED5D5D0B0DD92859286C4E292879288C2A3BCF09289D3B5C0B9C5A1B2A6D4F1928A928BC0A8CAC3DED7D5FC928CB9B0928DC8ADCBA9928EDED9BFBD928F929092919292C6B4D7A7CAB0C4C39293B3D6B9D29294929592969297D6B8EAFCB0B492989299929A929BBFE6929C929DCCF4929E929F92A092A1CDDA92A292A392A4D6BFC2CE92A5CECECCA2D0AEC4D3B5B2DED8D5F5BCB7BBD392A692A7B0A492A8C5B2B4EC92A992AA92ABD5F192AC92ADEAFD92AE92AF92B092B192B292B3DEDACDA692B492B5CDEC92B692B792B892B9CEE6DEDC92BACDB1C0A692BB92BCD7BD92BDDEDBB0C6BAB4C9D3C4F3BEE892BE92BF92C092C1B2B692C292C392C492C592C692C792C892C9C0CCCBF092CABCF1BBBBB5B792CB92CC92CDC5F592CEDEE692CF92D092D1DEE3BEDD92D292D3DEDF92D492D592D692D7B4B7BDDD92D892D9DEE0C4ED92DA92DB92DC92DDCFC692DEB5E092DF92E092E192E2B6DECADAB5F4DEE592E3D5C692E4DEE1CCCDC6FE92E5C5C592E692E792E8D2B492E9BEF292EA92EB92EC92ED92EE92EF92F0C2D392F1CCBDB3B892F2BDD392F3BFD8CDC6D1DAB4EB92F4DEE4DEDDDEE792F5EAFE92F692F7C2B0DEE292F892F9D6C0B5A792FAB2F492FBDEE892FCDEF292FD92FE934093419342DEED9343DEF193449345C8E0934693479348D7E1DEEFC3E8CCE19349B2E5934A934B934CD2BE934D934E934F9350935193529353DEEE9354DEEBCED59355B4A79356935793589359935ABFABBEBE935B935CBDD2935D935E935F9360DEE99361D4AE9362DEDE9363DEEA9364936593669367C0BF9368DEECB2F3B8E9C2A79369936ABDC1936B936C936D936E936FDEF5DEF893709371B2ABB4A493729373B4EAC9A6937493759376937793789379DEF6CBD1937AB8E3937BDEF7DEFA937C937D937E9380DEF9938193829383CCC29384B0E1B4EE93859386938793889389938AE5BA938B938C938D938E938FD0AF93909391B2EB9392EBA19393DEF493949395C9E3DEF3B0DAD2A1B1F79396CCAF939793989399939A939B939C939DDEF0939ECBA4939F93A093A1D5AA93A293A393A493A593A6DEFB93A793A893A993AA93AB93AC93AD93AEB4DD93AFC4A693B093B193B2DEFD93B393B493B593B693B793B893B993BA93BB93BCC3FEC4A1DFA193BD93BE93BF93C093C193C293C3C1CC93C4DEFCBEEF93C5C6B293C693C793C893C993CA93CB93CC93CD93CEB3C5C8F693CF93D0CBBADEFE93D193D2DFA493D393D493D593D6D7B293D793D893D993DA93DBB3B793DC93DD93DE93DFC1C393E093E1C7CBB2A5B4E993E2D7AB93E393E493E593E6C4EC93E7DFA2DFA393E8DFA593E9BAB393EA93EB93ECDFA693EDC0DE93EE93EFC9C393F093F193F293F393F493F593F6B2D9C7E693F7DFA793F8C7DC93F993FA93FB93FCDFA8EBA293FD93FE944094419442CBD3944394449445DFAA9446DFA99447B2C194489449944A944B944C944D944E944F9450945194529453945494559456945794589459945A945B945C945D945E945F9460C5CA94619462946394649465946694679468DFAB9469946A946B946C946D946E946F9470D4DC94719472947394749475C8C19476947794789479947A947B947C947D947E948094819482DFAC94839484948594869487BEF094889489DFADD6A7948A948B948C948DEAB7EBB6CAD5948ED8FCB8C4948FB9A594909491B7C5D5FE94929493949494959496B9CA94979498D0A7F4CD9499949AB5D0949B949CC3F4949DBEC8949E949F94A0EBB7B0BD94A194A2BDCC94A3C1B294A4B1D6B3A894A594A694A7B8D2C9A294A894A9B6D894AA94AB94AC94ADEBB8BEB494AE94AF94B0CAFD94B1C7C394B2D5FB94B394B4B7F394B594B694B794B894B994BA94BB94BC94BD94BE94BF94C094C194C294C3CEC494C494C594C6D5ABB1F394C794C894C9ECB3B0DF94CAECB594CB94CC94CDB6B794CEC1CF94CFF5FAD0B194D094D1D5E594D2CED394D394D4BDEFB3E294D5B8AB94D6D5B694D7EDBD94D8B6CF94D9CBB9D0C294DA94DB94DC94DD94DE94DF94E094E1B7BD94E294E3ECB6CAA994E494E594E6C5D494E7ECB9ECB8C2C3ECB794E894E994EA94EBD0FDECBA94ECECBBD7E594ED94EEECBC94EF94F094F1ECBDC6EC94F294F394F494F594F694F794F894F9CEDE94FABCC894FB94FCC8D5B5A9BEC9D6BCD4E794FD94FED1AED0F1EAB8EAB9EABABAB59540954195429543CAB1BFF595449545CDFA9546954795489549954AEAC0954BB0BAEABE954C954DC0A5954E954F9550EABB9551B2FD9552C3F7BBE8955395549555D2D7CEF4EABF955695579558EABC9559955A955BEAC3955CD0C7D3B3955D955E955F9560B4BA9561C3C1D7F29562956395649565D5D19566CAC79567EAC595689569EAC4EAC7EAC6956A956B956C956D956ED6E7956FCFD495709571EACB9572BBCE9573957495759576957795789579BDFAC9CE957A957BEACC957C957DC9B9CFFEEACAD4CEEACDEACF957E9580CDED9581958295839584EAC99585EACE95869587CEEE9588BBDE9589B3BF958A958B958C958D958EC6D5BEB0CEFA958F95909591C7E79592BEA7EAD095939594D6C7959595969597C1C095989599959AD4DD959BEAD1959C959DCFBE959E959F95A095A1EAD295A295A395A495A5CAEE95A695A795A895A9C5AFB0B595AA95AB95AC95AD95AEEAD495AF95B095B195B295B395B495B595B695B7EAD3F4DF95B895B995BA95BB95BCC4BA95BD95BE95BF95C095C1B1A995C295C395C495C5E5DF95C695C795C895C9EAD595CA95CB95CC95CD95CE95CF95D095D195D295D395D495D595D695D795D895D995DA95DB95DC95DD95DE95DF95E095E195E295E3CAEF95E4EAD6EAD7C6D895E595E695E795E895E995EA95EB95ECEAD895ED95EEEAD995EF95F095F195F295F395F4D4BB95F5C7FAD2B7B8FC95F695F7EAC295F8B2DC95F995FAC2FC95FBD4F8CCE6D7EE95FC95FD95FE9640964196429643D4C2D3D0EBC3C5F39644B7FE96459646EBD4964796489649CBB7EBDE964AC0CA964B964C964DCDFB964EB3AF964FC6DA965096519652965396549655EBFC9656C4BE9657CEB4C4A9B1BED4FD9658CAF59659D6EC965A965BC6D3B6E4965C965D965E965FBBFA96609661D0E096629663C9B19664D4D3C8A896659666B8CB9667E8BEC9BC96689669E8BB966AC0EED0D3B2C4B4E5966BE8BC966C966DD5C8966E966F967096719672B6C59673E8BDCAF8B8DCCCF5967496759676C0B496779678D1EEE8BFE8C29679967ABABC967BB1ADBDDC967CEABDE8C3967DE8C6967EE8CB9680968196829683E8CC9684CBC9B0E59685BCAB96869687B9B996889689E8C1968ACDF7968BE8CA968C968D968E968FCEF69690969196929693D5ED9694C1D6E8C49695C3B69696B9FBD6A6E8C8969796989699CAE0D4E6969AE8C0969BE8C5E8C7969CC7B9B7E3969DE8C9969EBFDDE8D2969F96A0E8D796A1E8D5BCDCBCCFE8DB96A296A396A496A596A696A796A896A9E8DE96AAE8DAB1FA96AB96AC96AD96AE96AF96B096B196B296B396B4B0D8C4B3B8CCC6E2C8BEC8E196B596B696B7E8CFE8D4E8D696B8B9F1E8D8D7F596B9C4FB96BAE8DC96BB96BCB2E996BD96BE96BFE8D196C096C1BCED96C296C3BFC2E8CDD6F996C4C1F8B2F196C596C696C796C896C996CA96CB96CCE8DF96CDCAC1E8D996CE96CF96D096D1D5A496D2B1EAD5BBE8CEE8D0B6B0E8D396D3E8DDC0B896D4CAF796D5CBA896D696D7C6DCC0F596D896D996DA96DB96DCE8E996DD96DE96DFD0A396E096E196E296E396E496E596E6E8F2D6EA96E796E896E996EA96EB96EC96EDE8E0E8E196EE96EF96F0D1F9BACBB8F996F196F2B8F1D4D4E8EF96F3E8EEE8ECB9F0CCD2E8E6CEA6BFF296F4B0B8E8F1E8F096F5D7C096F6E8E496F7CDA9C9A396F8BBB8BDDBE8EA96F996FA96FB96FC96FD96FE9740974197429743E8E2E8E3E8E5B5B5E8E7C7C5E8EBE8EDBDB0D7AE9744E8F897459746974797489749974A974B974CE8F5974DCDB0E8F6974E974F9750975197529753975497559756C1BA9757E8E89758C3B7B0F09759975A975B975C975D975E975F9760E8F4976197629763E8F7976497659766B9A3976797689769976A976B976C976D976E976F9770C9D2977197729773C3CECEE0C0E69774977597769777CBF39778CCDDD0B59779977ACAE1977BE8F3977C977D977E9780978197829783978497859786BCEC9787E8F997889789978A978B978C978DC3DE978EC6E5978FB9F79790979197929793B0F497949795D7D897969797BCAC9798C5EF9799979A979B979C979DCCC4979E979FE9A697A097A197A297A397A497A597A697A797A897A9C9AD97AAE9A2C0E297AB97AC97ADBFC397AE97AF97B0E8FEB9D797B1E8FB97B297B397B497B5E9A497B697B797B8D2CE97B997BA97BB97BC97BDE9A397BED6B2D7B597BFE9A797C0BDB797C197C297C397C497C597C697C797C897C997CA97CB97CCE8FCE8FD97CD97CE97CFE9A197D097D197D297D397D497D597D697D7CDD697D897D9D2AC97DA97DB97DCE9B297DD97DE97DF97E0E9A997E197E297E3B4AA97E4B4BB97E597E6E9AB97E797E897E997EA97EB97EC97ED97EE97EF97F097F197F297F397F497F597F697F7D0A897F897F9E9A597FA97FBB3FE97FC97FDE9ACC0E397FEE9AA98409841E9B998429843E9B89844984598469847E9AE98489849E8FA984A984BE9A8984C984D984E984F9850BFACE9B1E9BA98519852C2A5985398549855E9AF9856B8C59857E9AD9858D3DCE9B4E9B5E9B79859985A985BE9C7985C985D985E985F98609861C0C6E9C598629863E9B098649865E9BBB0F19866986798689869986A986B986C986D986E986FE9BCD5A598709871E9BE9872E9BF987398749875E9C198769877C1F198789879C8B6987A987B987CE9BD987D987E988098819882E9C29883988498859886988798889889988AE9C3988BE9B3988CE9B6988DBBB1988E988F9890E9C0989198929893989498959896BCF7989798989899E9C4E9C6989A989B989C989D989E989F98A098A198A298A398A498A5E9CA98A698A798A898A9E9CE98AA98AB98AC98AD98AE98AF98B098B198B298B3B2DB98B4E9C898B598B698B798B898B998BA98BB98BC98BD98BEB7AE98BF98C098C198C298C398C498C598C698C798C898C998CAE9CBE9CC98CB98CC98CD98CE98CF98D0D5C198D1C4A398D298D398D498D598D698D7E9D898D8BAE198D998DA98DB98DCE9C998DDD3A398DE98DF98E0E9D498E198E298E398E498E598E698E7E9D7E9D098E898E998EA98EB98ECE9CF98ED98EEC7C198EF98F098F198F298F398F498F598F6E9D298F798F898F998FA98FB98FC98FDE9D9B3C898FEE9D399409941994299439944CFF0994599469947E9CD99489949994A994B994C994D994E994F995099519952B3F79953995499559956995799589959E9D6995A995BE9DA995C995D995ECCB4995F99609961CFAD99629963996499659966996799689969996AE9D5996BE9DCE9DB996C996D996E996F9970E9DE99719972997399749975997699779978E9D19979997A997B997C997D997E99809981E9DD9982E9DFC3CA9983998499859986998799889989998A998B998C998D998E998F9990999199929993999499959996999799989999999A999B999C999D999E999F99A099A199A299A399A499A599A699A799A899A999AA99AB99AC99AD99AE99AF99B099B199B299B399B499B599B699B799B899B999BA99BB99BC99BD99BE99BF99C099C199C299C399C499C599C699C799C899C999CA99CB99CC99CD99CE99CF99D099D199D299D399D499D599D699D799D899D999DA99DB99DC99DD99DE99DF99E099E199E299E399E499E599E699E799E899E999EA99EB99EC99ED99EE99EF99F099F199F299F399F499F5C7B7B4CEBBB6D0C0ECA399F699F7C5B799F899F999FA99FB99FC99FD99FE9A409A419A42D3FB9A439A449A459A46ECA49A47ECA5C6DB9A489A499A4ABFEE9A4B9A4C9A4D9A4EECA69A4F9A50ECA7D0AA9A51C7B89A529A53B8E89A549A559A569A579A589A599A5A9A5B9A5C9A5D9A5E9A5FECA89A609A619A629A639A649A659A669A67D6B9D5FDB4CBB2BDCEE4C6E79A689A69CDE19A6A9A6B9A6C9A6D9A6E9A6F9A709A719A729A739A749A759A769A77B4F59A78CBC0BCDF9A799A7A9A7B9A7CE9E2E9E3D1EAE9E59A7DB4F9E9E49A7ED1B3CAE2B2D09A80E9E89A819A829A839A84E9E6E9E79A859A86D6B39A879A889A89E9E9E9EA9A8A9A8B9A8C9A8D9A8EE9EB9A8F9A909A919A929A939A949A959A96E9EC9A979A989A999A9A9A9B9A9C9A9D9A9EECAFC5B9B6CE9A9FD2F39AA09AA19AA29AA39AA49AA59AA6B5EE9AA7BBD9ECB19AA89AA9D2E39AAA9AAB9AAC9AAD9AAECEE39AAFC4B89AB0C3BF9AB19AB2B6BED8B9B1C8B1CFB1D1C5FE9AB3B1D09AB4C3AB9AB59AB69AB79AB89AB9D5B19ABA9ABB9ABC9ABD9ABE9ABF9AC09AC1EBA4BAC19AC29AC39AC4CCBA9AC59AC69AC7EBA59AC8EBA79AC99ACA9ACBEBA89ACC9ACD9ACEEBA69ACF9AD09AD19AD29AD39AD49AD5EBA9EBABEBAA9AD69AD79AD89AD99ADAEBAC9ADBCACFD8B5C3F19ADCC3A5C6F8EBADC4CA9ADDEBAEEBAFEBB0B7D59ADE9ADF9AE0B7FA9AE1EBB1C7E29AE2EBB39AE3BAA4D1F5B0B1EBB2EBB49AE49AE59AE6B5AAC2C8C7E89AE7EBB59AE8CBAEE3DF9AE99AEAD3C09AEB9AEC9AED9AEED9DB9AEF9AF0CDA1D6ADC7F39AF19AF29AF3D9E0BBE39AF4BABAE3E29AF59AF69AF79AF89AF9CFAB9AFA9AFB9AFCE3E0C9C79AFDBAB99AFE9B409B41D1B4E3E1C8EAB9AFBDADB3D8CEDB9B429B43CCC09B449B459B46E3E8E3E9CDF49B479B489B499B4A9B4BCCAD9B4CBCB39B4DE3EA9B4EE3EB9B4F9B50D0DA9B519B529B53C6FBB7DA9B549B55C7DFD2CACED69B56E3E4E3EC9B57C9F2B3C19B589B59E3E79B5A9B5BC6E3E3E59B5C9B5DEDB3E3E69B5E9B5F9B609B61C9B39B62C5E69B639B649B65B9B59B66C3BB9B67E3E3C5BDC1A4C2D9B2D79B68E3EDBBA6C4AD9B69E3F0BEDA9B6A9B6BE3FBE3F5BAD39B6C9B6D9B6E9B6FB7D0D3CD9B70D6CED5D3B9C1D5B4D1D89B719B729B739B74D0B9C7F69B759B769B77C8AAB2B49B78C3DA9B799B7A9B7BE3EE9B7C9B7DE3FCE3EFB7A8E3F7E3F49B7E9B809B81B7BA9B829B83C5A29B84E3F6C5DDB2A8C6FC9B85C4E09B869B87D7A29B88C0E1E3F99B899B8AE3FAE3FDCCA9E3F39B8BD3BE9B8CB1C3EDB4E3F1E3F29B8DE3F8D0BAC6C3D4F3E3FE9B8E9B8FBDE09B909B91E4A79B929B93E4A69B949B959B96D1F3E4A39B97E4A99B989B999B9AC8F79B9B9B9C9B9D9B9ECFB49B9FE4A8E4AEC2E59BA09BA1B6B49BA29BA39BA49BA59BA69BA7BDF29BA8E4A29BA99BAABAE9E4AA9BAB9BACE4AC9BAD9BAEB6FDD6DEE4B29BAFE4AD9BB09BB19BB2E4A19BB3BBEECDDDC7A2C5C99BB49BB5C1F79BB6E4A49BB7C7B3BDACBDBDE4A59BB8D7C7B2E29BB9E4ABBCC3E4AF9BBABBEBE4B0C5A8E4B19BBB9BBC9BBD9BBED5E3BFA39BBFE4BA9BC0E4B79BC1E4BB9BC29BC3E4BD9BC49BC5C6D69BC69BC7BAC6C0CB9BC89BC99BCAB8A1E4B49BCB9BCC9BCD9BCED4A19BCF9BD0BAA3BDFE9BD19BD29BD3E4BC9BD49BD59BD69BD79BD8CDBF9BD99BDAC4F99BDB9BDCCFFBC9E69BDD9BDED3BF9BDFCFD19BE09BE1E4B39BE2E4B8E4B9CCE99BE39BE49BE59BE69BE7CCCE9BE8C0D4E4B5C1B0E4B6CED09BE9BBC1B5D39BEAC8F3BDA7D5C7C9ACB8A2E4CA9BEB9BECE4CCD1C49BED9BEED2BA9BEF9BF0BAAD9BF19BF2BAD49BF39BF49BF59BF69BF79BF8E4C3B5ED9BF99BFA9BFBD7CDE4C0CFFDE4BF9BFC9BFD9BFEC1DCCCCA9C409C419C429C43CAE79C449C459C469C47C4D79C48CCD4E4C89C499C4A9C4BE4C7E4C19C4CE4C4B5AD9C4D9C4ED3D99C4FE4C69C509C519C529C53D2F9B4E39C54BBB49C559C56C9EE9C57B4BE9C589C599C5ABBEC9C5BD1CD9C5CCCEDEDB59C5D9C5E9C5F9C609C619C629C639C64C7E59C659C669C679C68D4A89C69E4CBD7D5E4C29C6ABDA5E4C59C6B9C6CD3E69C6DE4C9C9F89C6E9C6FE4BE9C709C71D3E59C729C73C7FEB6C99C74D4FCB2B3E4D79C759C769C77CEC29C78E4CD9C79CEBC9C7AB8DB9C7B9C7CE4D69C7DBFCA9C7E9C809C81D3CE9C82C3EC9C839C849C859C869C879C889C899C8AC5C8E4D89C8B9C8C9C8D9C8E9C8F9C909C919C92CDC4E4CF9C939C949C959C96E4D4E4D59C97BAFE9C98CFE69C999C9AD5BF9C9B9C9C9C9DE4D29C9E9C9F9CA09CA19CA29CA39CA49CA59CA69CA79CA8E4D09CA99CAAE4CE9CAB9CAC9CAD9CAE9CAF9CB09CB19CB29CB39CB49CB59CB69CB79CB89CB9CDE5CAAA9CBA9CBB9CBCC0A39CBDBDA6E4D39CBE9CBFB8C89CC09CC19CC29CC39CC4E4E7D4B49CC59CC69CC79CC89CC99CCA9CCBE4DB9CCC9CCD9CCEC1EF9CCF9CD0E4E99CD19CD2D2E79CD39CD4E4DF9CD5E4E09CD69CD7CFAA9CD89CD99CDA9CDBCBDD9CDCE4DAE4D19CDDE4E59CDEC8DCE4E39CDF9CE0C4E7E4E29CE1E4E19CE29CE39CE4B3FCE4E89CE59CE69CE79CE8B5E19CE99CEA9CEBD7CC9CEC9CED9CEEE4E69CEFBBAC9CF0D7D2CCCFEBF89CF1E4E49CF29CF3B9F69CF49CF59CF6D6CDE4D9E4DCC2FAE4DE9CF7C2CBC0C4C2D09CF8B1F5CCB29CF99CFA9CFB9CFC9CFD9CFE9D409D419D429D43B5CE9D449D459D469D47E4EF9D489D499D4A9D4B9D4C9D4D9D4E9D4FC6AF9D509D519D52C6E19D539D54E4F59D559D569D579D589D59C2A99D5A9D5B9D5CC0ECD1DDE4EE9D5D9D5E9D5F9D609D619D629D639D649D659D66C4AE9D679D689D69E4ED9D6A9D6B9D6C9D6DE4F6E4F4C2FE9D6EE4DD9D6FE4F09D70CAFE9D71D5C49D729D73E4F19D749D759D769D779D789D799D7AD1FA9D7B9D7C9D7D9D7E9D809D819D82E4EBE4EC9D839D849D85E4F29D86CEAB9D879D889D899D8A9D8B9D8C9D8D9D8E9D8F9D90C5CB9D919D929D93C7B19D94C2BA9D959D969D97E4EA9D989D999D9AC1CA9D9B9D9C9D9D9D9E9D9F9DA0CCB6B3B19DA19DA29DA3E4FB9DA4E4F39DA59DA69DA7E4FA9DA8E4FD9DA9E4FC9DAA9DAB9DAC9DAD9DAE9DAF9DB0B3CE9DB19DB29DB3B3BAE4F79DB49DB5E4F9E4F8C5EC9DB69DB79DB89DB99DBA9DBB9DBC9DBD9DBE9DBF9DC09DC19DC2C0BD9DC39DC49DC59DC6D4E89DC79DC89DC99DCA9DCBE5A29DCC9DCD9DCE9DCF9DD09DD19DD29DD39DD49DD59DD6B0C49DD79DD8E5A49DD99DDAE5A39DDB9DDC9DDD9DDE9DDF9DE0BCA49DE1E5A59DE29DE39DE49DE59DE69DE7E5A19DE89DE99DEA9DEB9DEC9DED9DEEE4FEB1F49DEF9DF09DF19DF29DF39DF49DF59DF69DF79DF89DF9E5A89DFAE5A9E5A69DFB9DFC9DFD9DFE9E409E419E429E439E449E459E469E47E5A7E5AA9E489E499E4A9E4B9E4C9E4D9E4E9E4F9E509E519E529E539E549E559E569E579E589E599E5A9E5B9E5C9E5D9E5E9E5F9E609E619E629E639E649E659E669E679E68C6D99E699E6A9E6B9E6C9E6D9E6E9E6F9E70E5ABE5AD9E719E729E739E749E759E769E77E5AC9E789E799E7A9E7B9E7C9E7D9E7E9E809E819E829E839E849E859E869E879E889E89E5AF9E8A9E8B9E8CE5AE9E8D9E8E9E8F9E909E919E929E939E949E959E969E979E989E999E9A9E9B9E9C9E9D9E9EB9E09E9F9EA0E5B09EA19EA29EA39EA49EA59EA69EA79EA89EA99EAA9EAB9EAC9EAD9EAEE5B19EAF9EB09EB19EB29EB39EB49EB59EB69EB79EB89EB99EBABBF0ECE1C3F09EBBB5C6BBD29EBC9EBD9EBE9EBFC1E9D4EE9EC0BEC49EC19EC29EC3D7C69EC4D4D6B2D3ECBE9EC59EC69EC79EC8EAC19EC99ECA9ECBC2AFB4B69ECC9ECD9ECED1D79ECF9ED09ED1B3B49ED2C8B2BFBBECC09ED39ED4D6CB9ED59ED6ECBFECC19ED79ED89ED99EDA9EDB9EDC9EDD9EDE9EDF9EE09EE19EE29EE3ECC5BEE6CCBFC5DABEBC9EE4ECC69EE5B1FE9EE69EE79EE8ECC4D5A8B5E39EE9ECC2C1B6B3E39EEA9EEBECC3CBB8C0C3CCFE9EEC9EED9EEE9EEFC1D29EF0ECC89EF19EF29EF39EF49EF59EF69EF79EF89EF99EFA9EFB9EFC9EFDBAE6C0D39EFED6F29F409F419F42D1CC9F439F449F459F46BFBE9F47B7B3C9D5ECC7BBE29F48CCCCBDFDC8C89F49CFA99F4A9F4B9F4C9F4D9F4E9F4F9F50CDE99F51C5EB9F529F539F54B7E99F559F569F579F589F599F5A9F5B9F5C9F5D9F5E9F5FD1C9BAB89F609F619F629F639F64ECC99F659F66ECCA9F67BBC0ECCB9F68ECE2B1BAB7D99F699F6A9F6B9F6C9F6D9F6E9F6F9F709F719F729F73BDB99F749F759F769F779F789F799F7A9F7BECCCD1E6ECCD9F7C9F7D9F7E9F80C8BB9F819F829F839F849F859F869F879F889F899F8A9F8B9F8C9F8D9F8EECD19F8F9F909F919F92ECD39F93BBCD9F94BCE59F959F969F979F989F999F9A9F9B9F9C9F9D9F9E9F9F9FA09FA1ECCF9FA2C9B79FA39FA49FA59FA69FA7C3BA9FA8ECE3D5D5ECD09FA99FAA9FAB9FAC9FADD6F39FAE9FAF9FB0ECD2ECCE9FB19FB29FB39FB4ECD49FB5ECD59FB69FB7C9BF9FB89FB99FBA9FBB9FBC9FBDCFA89FBE9FBF9FC09FC19FC2D0DC9FC39FC49FC59FC6D1AC9FC79FC89FC99FCAC8DB9FCB9FCC9FCDECD6CEF59FCE9FCF9FD09FD19FD2CAECECDA9FD39FD49FD59FD69FD79FD89FD9ECD99FDA9FDB9FDCB0BE9FDD9FDE9FDF9FE09FE19FE2ECD79FE3ECD89FE49FE59FE6ECE49FE79FE89FE99FEA9FEB9FEC9FED9FEE9FEFC8BC9FF09FF19FF29FF39FF49FF59FF69FF79FF89FF9C1C79FFA9FFB9FFC9FFD9FFEECDCD1E0A040A041A042A043A044A045A046A047A048A049ECDBA04AA04BA04CA04DD4EFA04EECDDA04FA050A051A052A053A054DBC6A055A056A057A058A059A05AA05BA05CA05DA05EECDEA05FA060A061A062A063A064A065A066A067A068A069A06AB1ACA06BA06CA06DA06EA06FA070A071A072A073A074A075A076A077A078A079A07AA07BA07CA07DA07EA080A081ECDFA082A083A084A085A086A087A088A089A08AA08BECE0A08CD7A6A08DC5C0A08EA08FA090EBBCB0AEA091A092A093BEF4B8B8D2AFB0D6B5F9A094D8B3A095CBACA096E3DDA097A098A099A09AA09BA09CA09DC6ACB0E6A09EA09FA0A0C5C6EBB9A0A1A0A2A0A3A0A4EBBAA0A5A0A6A0A7EBBBA0A8A0A9D1C0A0AAC5A3A0ABEAF2A0ACC4B2A0ADC4B5C0CEA0AEA0AFA0B0EAF3C4C1A0B1CEEFA0B2A0B3A0B4A0B5EAF0EAF4A0B6A0B7C9FCA0B8A0B9C7A3A0BAA0BBA0BCCCD8CEFEA0BDA0BEA0BFEAF5EAF6CFACC0E7A0C0A0C1EAF7A0C2A0C3A0C4A0C5A0C6B6BFEAF8A0C7EAF9A0C8EAFAA0C9A0CAEAFBA0CBA0CCA0CDA0CEA0CFA0D0A0D1A0D2A0D3A0D4A0D5A0D6EAF1A0D7A0D8A0D9A0DAA0DBA0DCA0DDA0DEA0DFA0E0A0E1A0E2C8AEE1EBA0E3B7B8E1ECA0E4A0E5A0E6E1EDA0E7D7B4E1EEE1EFD3CCA0E8A0E9A0EAA0EBA0ECA0EDA0EEE1F1BFF1E1F0B5D2A0EFA0F0A0F1B1B7A0F2A0F3A0F4A0F5E1F3E1F2A0F6BAFCA0F7E1F4A0F8A0F9A0FAA0FBB9B7A0FCBED1A0FDA0FEAA40AA41C4FCAA42BADDBDC6AA43AA44AA45AA46AA47AA48E1F5E1F7AA49AA4AB6C0CFC1CAA8E1F6D5F8D3FCE1F8E1FCE1F9AA4BAA4CE1FAC0EAAA4DE1FEE2A1C0C7AA4EAA4FAA50AA51E1FBAA52E1FDAA53AA54AA55AA56AA57AA58E2A5AA59AA5AAA5BC1D4AA5CAA5DAA5EAA5FE2A3AA60E2A8B2FEE2A2AA61AA62AA63C3CDB2C2E2A7E2A6AA64AA65E2A4E2A9AA66AA67E2ABAA68AA69AA6AD0C9D6EDC3A8E2ACAA6BCFD7AA6CAA6DE2AEAA6EAA6FBAEFAA70AA71E9E0E2ADE2AAAA72AA73AA74AA75BBABD4B3AA76AA77AA78AA79AA7AAA7BAA7CAA7DAA7EAA80AA81AA82AA83E2B0AA84AA85E2AFAA86E9E1AA87AA88AA89AA8AE2B1AA8BAA8CAA8DAA8EAA8FAA90AA91AA92E2B2AA93AA94AA95AA96AA97AA98AA99AA9AAA9BAA9CAA9DE2B3CCA1AA9EE2B4AA9FAAA0AB40AB41AB42AB43AB44AB45AB46AB47AB48AB49AB4AAB4BE2B5AB4CAB4DAB4EAB4FAB50D0FEAB51AB52C2CAAB53D3F1AB54CDF5AB55AB56E7E0AB57AB58E7E1AB59AB5AAB5BAB5CBEC1AB5DAB5EAB5FAB60C2EAAB61AB62AB63E7E4AB64AB65E7E3AB66AB67AB68AB69AB6AAB6BCDE6AB6CC3B5AB6DAB6EE7E2BBB7CFD6AB6FC1E1E7E9AB70AB71AB72E7E8AB73AB74E7F4B2A3AB75AB76AB77AB78E7EAAB79E7E6AB7AAB7BAB7CAB7DAB7EE7ECE7EBC9BAAB80AB81D5E4AB82E7E5B7A9E7E7AB83AB84AB85AB86AB87AB88AB89E7EEAB8AAB8BAB8CAB8DE7F3AB8ED6E9AB8FAB90AB91AB92E7EDAB93E7F2AB94E7F1AB95AB96AB97B0E0AB98AB99AB9AAB9BE7F5AB9CAB9DAB9EAB9FABA0AC40AC41AC42AC43AC44AC45AC46AC47AC48AC49AC4AC7F2AC4BC0C5C0EDAC4CAC4DC1F0E7F0AC4EAC4FAC50AC51E7F6CBF6AC52AC53AC54AC55AC56AC57AC58AC59AC5AE8A2E8A1AC5BAC5CAC5DAC5EAC5FAC60D7C1AC61AC62E7FAE7F9AC63E7FBAC64E7F7AC65E7FEAC66E7FDAC67E7FCAC68AC69C1D5C7D9C5FDC5C3AC6AAC6BAC6CAC6DAC6EC7EDAC6FAC70AC71AC72E8A3AC73AC74AC75AC76AC77AC78AC79AC7AAC7BAC7CAC7DAC7EAC80AC81AC82AC83AC84AC85AC86E8A6AC87E8A5AC88E8A7BAF7E7F8E8A4AC89C8F0C9AAAC8AAC8BAC8CAC8DAC8EAC8FAC90AC91AC92AC93AC94AC95AC96E8A9AC97AC98B9E5AC99AC9AAC9BAC9CAC9DD1FEE8A8AC9EAC9FACA0AD40AD41AD42E8AAAD43E8ADE8AEAD44C1A7AD45AD46AD47E8AFAD48AD49AD4AE8B0AD4BAD4CE8ACAD4DE8B4AD4EAD4FAD50AD51AD52AD53AD54AD55AD56AD57AD58E8ABAD59E8B1AD5AAD5BAD5CAD5DAD5EAD5FAD60AD61E8B5E8B2E8B3AD62AD63AD64AD65AD66AD67AD68AD69AD6AAD6BAD6CAD6DAD6EAD6FAD70AD71E8B7AD72AD73AD74AD75AD76AD77AD78AD79AD7AAD7BAD7CAD7DAD7EAD80AD81AD82AD83AD84AD85AD86AD87AD88AD89E8B6AD8AAD8BAD8CAD8DAD8EAD8FAD90AD91AD92B9CFAD93F0ACAD94F0ADAD95C6B0B0EAC8BFAD96CDDFAD97AD98AD99AD9AAD9BAD9CAD9DCECDEAB1AD9EAD9FADA0AE40EAB2AE41C6BFB4C9AE42AE43AE44AE45AE46AE47AE48EAB3AE49AE4AAE4BAE4CD5E7AE4DAE4EAE4FAE50AE51AE52AE53AE54DDF9AE55EAB4AE56EAB5AE57EAB6AE58AE59AE5AAE5BB8CADFB0C9F5AE5CCCF0AE5DAE5EC9FAAE5FAE60AE61AE62AE63C9FBAE64AE65D3C3CBA6AE66B8A6F0AEB1C2AE67E5B8CCEFD3C9BCD7C9EAAE68B5E7AE69C4D0B5E9AE6AEEAEBBADAE6BAE6CE7DEAE6DEEAFAE6EAE6FAE70AE71B3A9AE72AE73EEB2AE74AE75EEB1BDE7AE76EEB0CEB7AE77AE78AE79AE7AC5CFAE7BAE7CAE7DAE7EC1F4DBCEEEB3D0F3AE80AE81AE82AE83AE84AE85AE86AE87C2D4C6E8AE88AE89AE8AB7ACAE8BAE8CAE8DAE8EAE8FAE90AE91EEB4AE92B3EBAE93AE94AE95BBFBEEB5AE96AE97AE98AE99AE9AE7DCAE9BAE9CAE9DEEB6AE9EAE9FBDAEAEA0AF40AF41AF42F1E2AF43AF44AF45CAE8AF46D2C9F0DAAF47F0DBAF48F0DCC1C6AF49B8EDBECEAF4AAF4BF0DEAF4CC5B1F0DDD1F1AF4DF0E0B0CCBDEAAF4EAF4FAF50AF51AF52D2DFF0DFAF53B4AFB7E8F0E6F0E5C6A3F0E1F0E2B4C3AF54AF55F0E3D5EEAF56AF57CCDBBED2BCB2AF58AF59AF5AF0E8F0E7F0E4B2A1AF5BD6A2D3B8BEB7C8ACAF5CAF5DF0EAAF5EAF5FAF60AF61D1F7AF62D6CCBADBF0E9AF63B6BBAF64AF65CDB4AF66AF67C6A6AF68AF69AF6AC1A1F0EBF0EEAF6BF0EDF0F0F0ECAF6CBBBEF0EFAF6DAF6EAF6FAF70CCB5F0F2AF71AF72B3D5AF73AF74AF75AF76B1D4AF77AF78F0F3AF79AF7AF0F4F0F6B4E1AF7BF0F1AF7CF0F7AF7DAF7EAF80AF81F0FAAF82F0F8AF83AF84AF85F0F5AF86AF87AF88AF89F0FDAF8AF0F9F0FCF0FEAF8BF1A1AF8CAF8DAF8ECEC1F1A4AF8FF1A3AF90C1F6F0FBCADDAF91AF92B4F1B1F1CCB1AF93F1A6AF94AF95F1A7AF96AF97F1ACD5CEF1A9AF98AF99C8B3AF9AAF9BAF9CF1A2AF9DF1ABF1A8F1A5AF9EAF9FF1AAAFA0B040B041B042B043B044B045B046B0A9F1ADB047B048B049B04AB04BB04CF1AFB04DF1B1B04EB04FB050B051B052F1B0B053F1AEB054B055B056B057D1A2B058B059B05AB05BB05CB05DB05EF1B2B05FB060B061F1B3B062B063B064B065B066B067B068B069B9EFB06AB06BB5C7B06CB0D7B0D9B06DB06EB06FD4EDB070B5C4B071BDD4BBCAF0A7B072B073B8DEB074B075F0A8B076B077B0A8B078F0A9B079B07ACDEEB07BB07CF0AAB07DB07EB080B081B082B083B084B085B086B087F0ABB088B089B08AB08BB08CB08DB08EB08FB090C6A4B091B092D6E5F1E4B093F1E5B094B095B096B097B098B099B09AB09BB09CB09DC3F3B09EB09FD3DBB0A0B140D6D1C5E8B141D3AFB142D2E6B143B144EEC1B0BBD5B5D1CEBCE0BAD0B145BFF8B146B8C7B5C1C5CCB147B148CAA2B149B14AB14BC3CBB14CB14DB14EB14FB150EEC2B151B152B153B154B155B156B157B158C4BFB6A2B159EDECC3A4B15AD6B1B15BB15CB15DCFE0EDEFB15EB15FC5CEB160B6DCB161B162CAA1B163B164EDEDB165B166EDF0EDF1C3BCB167BFB4B168EDEEB169B16AB16BB16CB16DB16EB16FB170B171B172B173EDF4EDF2B174B175B176B177D5E6C3DFB178EDF3B179B17AB17BEDF6B17CD5A3D1A3B17DB17EB180EDF5B181C3D0B182B183B184B185B186EDF7BFF4BEECEDF8B187CCF7B188D1DBB189B18AB18BD7C5D5F6B18CEDFCB18DB18EB18FEDFBB190B191B192B193B194B195B196B197EDF9EDFAB198B199B19AB19BB19CB19DB19EB19FEDFDBEA6B1A0B240B241B242B243CBAFEEA1B6BDB244EEA2C4C0B245EDFEB246B247BDDEB2C7B248B249B24AB24BB24CB24DB24EB24FB250B251B252B253B6C3B254B255B256EEA5D8BAEEA3EEA6B257B258B259C3E9B3F2B25AB25BB25CB25DB25EB25FEEA7EEA4CFB9B260B261EEA8C2F7B262B263B264B265B266B267B268B269B26AB26BB26CB26DEEA9EEAAB26EDEABB26FB270C6B3B271C7C6B272D6F5B5C9B273CBB2B274B275B276EEABB277B278CDABB279EEACB27AB27BB27CB27DB27ED5B0B280EEADB281F6C4B282B283B284B285B286B287B288B289B28AB28BB28CB28DB28EDBC7B28FB290B291B292B293B294B295B296B297B4A3B298B299B29AC3ACF1E6B29BB29CB29DB29EB29FCAB8D2D3B2A0D6AAB340EFF2B341BED8B342BDC3EFF3B6CCB0ABB343B344B345B346CAAFB347B348EDB6B349EDB7B34AB34BB34CB34DCEF9B7AFBFF3EDB8C2EBC9B0B34EB34FB350B351B352B353EDB9B354B355C6F6BFB3B356B357B358EDBCC5F8B359D1D0B35AD7A9EDBAEDBBB35BD1E2B35CEDBFEDC0B35DEDC4B35EB35FB360EDC8B361EDC6EDCED5E8B362EDC9B363B364EDC7EDBEB365B366C5E9B367B368B369C6C6B36AB36BC9E9D4D2EDC1EDC2EDC3EDC5B36CC0F9B36DB4A1B36EB36FB370B371B9E8B372EDD0B373B374B375B376EDD1B377EDCAB378EDCFB379CEF8B37AB37BCBB6EDCCEDCDB37CB37DB37EB380B381CFF5B382B383B384B385B386B387B388B389B38AB38BB38CB38DEDD2C1F2D3B2EDCBC8B7B38EB38FB390B391B392B393B394B395BCEFB396B397B398B399C5F0B39AB39BB39CB39DB39EB39FB3A0B440B441B442EDD6B443B5EFB444B445C2B5B0ADCBE9B446B447B1AEB448EDD4B449B44AB44BCDEBB5E2B44CEDD5EDD3EDD7B44DB44EB5FAB44FEDD8B450EDD9B451EDDCB452B1CCB453B454B455B456B457B458B459B45AC5F6BCEEEDDACCBCB2EAB45BB45CB45DB45EEDDBB45FB460B461B462C4EBB463B464B4C5B465B466B467B0F5B468B469B46AEDDFC0DAB4E8B46BB46CB46DB46EC5CDB46FB470B471EDDDBFC4B472B473B474EDDEB475B476B477B478B479B47AB47BB47CB47DB47EB480B481B482B483C4A5B484B485B486EDE0B487B488B489B48AB48BEDE1B48CEDE3B48DB48EC1D7B48FB490BBC7B491B492B493B494B495B496BDB8B497B498B499EDE2B49AB49BB49CB49DB49EB49FB4A0B540B541B542B543B544B545EDE4B546B547B548B549B54AB54BB54CB54DB54EB54FEDE6B550B551B552B553B554EDE5B555B556B557B558B559B55AB55BB55CB55DB55EB55FB560B561B562B563EDE7B564B565B566B567B568CABEECEAC0F1B569C9E7B56AECEBC6EEB56BB56CB56DB56EECECB56FC6EDECEDB570B571B572B573B574B575B576B577B578ECF0B579B57AD7E6ECF3B57BB57CECF1ECEEECEFD7A3C9F1CBEEECF4B57DECF2B57EB580CFE9B581ECF6C6B1B582B583B584B585BCC0B586ECF5B587B588B589B58AB58BB58CB58DB5BBBBF6B58EECF7B58FB590B591B592B593D9F7BDFBB594B595C2BBECF8B596B597B598B599ECF9B59AB59BB59CB59DB8A3B59EB59FB5A0B640B641B642B643B644B645B646ECFAB647B648B649B64AB64BB64CB64DB64EB64FB650B651B652ECFBB653B654B655B656B657B658B659B65AB65BB65CB65DECFCB65EB65FB660B661B662D3EDD8AEC0EBB663C7DDBACCB664D0E3CBBDB665CDBAB666B667B8D1B668B669B1FCB66AC7EFB66BD6D6B66CB66DB66EBFC6C3EBB66FB670EFF5B671B672C3D8B673B674B675B676B677B678D7E2B679B67AB67BEFF7B3D3B67CC7D8D1EDB67DD6C8B67EEFF8B680EFF6B681BBFDB3C6B682B683B684B685B686B687B688BDD5B689B68AD2C6B68BBBE0B68CB68DCFA1B68EEFFCEFFBB68FB690EFF9B691B692B693B694B3CCB695C9D4CBB0B696B697B698B699B69AEFFEB69BB69CB0DEB69DB69ED6C9B69FB6A0B740EFFDB741B3EDB742B743F6D5B744B745B746B747B748B749B74AB74BB74CB74DB74EB74FB750B751B752CEC8B753B754B755F0A2B756F0A1B757B5BEBCDABBFCB758B8E5B759B75AB75BB75CB75DB75EC4C2B75FB760B761B762B763B764B765B766B767B768F0A3B769B76AB76BB76CB76DCBEBB76EB76FB770B771B772B773B774B775B776B777B778B779B77AB77BB77CB77DB77EB780B781B782B783B784B785B786F0A6B787B788B789D1A8B78ABEBFC7EEF1B6F1B7BFD5B78BB78CB78DB78EB4A9F1B8CDBBB78FC7D4D5ADB790F1B9B791F1BAB792B793B794B795C7CFB796B797B798D2A4D6CFB799B79AF1BBBDD1B4B0BEBDB79BB79CB79DB4DCCED1B79EBFDFF1BDB79FB7A0B840B841BFFAF1BCB842F1BFB843B844B845F1BEF1C0B846B847B848B849B84AF1C1B84BB84CB84DB84EB84FB850B851B852B853B854B855C1FEB856B857B858B859B85AB85BB85CB85DB85EB85FB860C1A2B861B862B863B864B865B866B867B868B869B86ACAFAB86BB86CD5BEB86DB86EB86FB870BEBABEB9D5C2B871B872BFA2B873CDAFF1B5B874B875B876B877B878B879BDDFB87AB6CBB87BB87CB87DB87EB880B881B882B883B884D6F1F3C3B885B886F3C4B887B8CDB888B889B88AF3C6F3C7B88BB0CAB88CF3C5B88DF3C9CBF1B88EB88FB890F3CBB891D0A6B892B893B1CAF3C8B894B895B896F3CFB897B5D1B898B899F3D7B89AF3D2B89BB89CB89DF3D4F3D3B7FBB89EB1BFB89FF3CEF3CAB5DAB8A0F3D0B940B941F3D1B942F3D5B943B944B945B946F3CDB947BCE3B948C1FDB949F3D6B94AB94BB94CB94DB94EB94FF3DAB950F3CCB951B5C8B952BDEEF3DCB953B954B7A4BFF0D6FECDB2B955B4F0B956B2DFB957F3D8B958F3D9C9B8B959F3DDB95AB95BF3DEB95CF3E1B95DB95EB95FB960B961B962B963B964B965B966B967F3DFB968B969F3E3F3E2B96AB96BF3DBB96CBFEAB96DB3EFB96EF3E0B96FB970C7A9B971BCF2B972B973B974B975F3EBB976B977B978B979B97AB97BB97CB9BFB97DB97EF3E4B980B981B982B2ADBBFEB983CBE3B984B985B986B987F3EDF3E9B988B989B98AB9DCF3EEB98BB98CB98DF3E5F3E6F3EAC2E1F3ECF3EFF3E8BCFDB98EB98FB990CFE4B991B992F3F0B993B994B995F3E7B996B997B998B999B99AB99BB99CB99DF3F2B99EB99FB9A0BA40D7ADC6AABA41BA42BA43BA44F3F3BA45BA46BA47BA48F3F1BA49C2A8BA4ABA4BBA4CBA4DBA4EB8DDF3F5BA4FBA50F3F4BA51BA52BA53B4DBBA54BA55BA56F3F6F3F7BA57BA58BA59F3F8BA5ABA5BBA5CC0BABA5DBA5EC0E9BA5FBA60BA61BA62BA63C5F1BA64BA65BA66BA67F3FBBA68F3FABA69BA6ABA6BBA6CBA6DBA6EBA6FBA70B4D8BA71BA72BA73F3FEF3F9BA74BA75F3FCBA76BA77BA78BA79BA7ABA7BF3FDBA7CBA7DBA7EBA80BA81BA82BA83BA84F4A1BA85BA86BA87BA88BA89BA8AF4A3BBC9BA8BBA8CF4A2BA8DBA8EBA8FBA90BA91BA92BA93BA94BA95BA96BA97BA98BA99F4A4BA9ABA9BBA9CBA9DBA9EBA9FB2BEF4A6F4A5BAA0BB40BB41BB42BB43BB44BB45BB46BB47BB48BB49BCAEBB4ABB4BBB4CBB4DBB4EBB4FBB50BB51BB52BB53BB54BB55BB56BB57BB58BB59BB5ABB5BBB5CBB5DBB5EBB5FBB60BB61BB62BB63BB64BB65BB66BB67BB68BB69BB6ABB6BBB6CBB6DBB6EC3D7D9E1BB6FBB70BB71BB72BB73BB74C0E0F4CCD7D1BB75BB76BB77BB78BB79BB7ABB7BBB7CBB7DBB7EBB80B7DBBB81BB82BB83BB84BB85BB86BB87F4CEC1A3BB88BB89C6C9BB8AB4D6D5B3BB8BBB8CBB8DF4D0F4CFF4D1CBDABB8EBB8FF4D2BB90D4C1D6E0BB91BB92BB93BB94B7E0BB95BB96BB97C1B8BB98BB99C1BBF4D3BEACBB9ABB9BBB9CBB9DBB9EB4E2BB9FBBA0F4D4F4D5BEABBC40BC41F4D6BC42BC43BC44F4DBBC45F4D7F4DABC46BAFDBC47F4D8F4D9BC48BC49BC4ABC4BBC4CBC4DBC4EB8E2CCC7F4DCBC4FB2DABC50BC51C3D3BC52BC53D4E3BFB7BC54BC55BC56BC57BC58BC59BC5AF4DDBC5BBC5CBC5DBC5EBC5FBC60C5B4BC61BC62BC63BC64BC65BC66BC67BC68F4E9BC69BC6ACFB5BC6BBC6CBC6DBC6EBC6FBC70BC71BC72BC73BC74BC75BC76BC77BC78CEC9BC79BC7ABC7BBC7CBC7DBC7EBC80BC81BC82BC83BC84BC85BC86BC87BC88BC89BC8ABC8BBC8CBC8DBC8ECBD8BC8FCBF7BC90BC91BC92BC93BDF4BC94BC95BC96D7CFBC97BC98BC99C0DBBC9ABC9BBC9CBC9DBC9EBC9FBCA0BD40BD41BD42BD43BD44BD45BD46BD47BD48BD49BD4ABD4BBD4CBD4DBD4EBD4FBD50BD51BD52BD53BD54BD55BD56BD57BD58BD59BD5ABD5BBD5CBD5DBD5EBD5FBD60BD61BD62BD63BD64BD65BD66BD67BD68BD69BD6ABD6BBD6CBD6DBD6EBD6FBD70BD71BD72BD73BD74BD75BD76D0F5BD77BD78BD79BD7ABD7BBD7CBD7DBD7EF4EABD80BD81BD82BD83BD84BD85BD86BD87BD88BD89BD8ABD8BBD8CBD8DBD8EBD8FBD90BD91BD92BD93BD94BD95BD96BD97BD98BD99BD9ABD9BBD9CBD9DBD9EBD9FBDA0BE40BE41BE42BE43BE44BE45BE46BE47BE48BE49BE4ABE4BBE4CF4EBBE4DBE4EBE4FBE50BE51BE52BE53F4ECBE54BE55BE56BE57BE58BE59BE5ABE5BBE5CBE5DBE5EBE5FBE60BE61BE62BE63BE64BE65BE66BE67BE68BE69BE6ABE6BBE6CBE6DBE6EBE6FBE70BE71BE72BE73BE74BE75BE76BE77BE78BE79BE7ABE7BBE7CBE7DBE7EBE80BE81BE82BE83BE84BE85BE86BE87BE88BE89BE8ABE8BBE8CBE8DBE8EBE8FBE90BE91BE92BE93BE94BE95BE96BE97BE98BE99BE9ABE9BBE9CBE9DBE9EBE9FBEA0BF40BF41BF42BF43BF44BF45BF46BF47BF48BF49BF4ABF4BBF4CBF4DBF4EBF4FBF50BF51BF52BF53BF54BF55BF56BF57BF58BF59BF5ABF5BBF5CBF5DBF5EBF5FBF60BF61BF62BF63BF64BF65BF66BF67BF68BF69BF6ABF6BBF6CBF6DBF6EBF6FBF70BF71BF72BF73BF74BF75BF76BF77BF78BF79BF7ABF7BBF7CBF7DBF7EBF80F7E3BF81BF82BF83BF84BF85B7B1BF86BF87BF88BF89BF8AF4EDBF8BBF8CBF8DBF8EBF8FBF90BF91BF92BF93BF94BF95BF96BF97BF98BF99BF9ABF9BBF9CBF9DBF9EBF9FBFA0C040C041C042C043C044C045C046C047C048C049C04AC04BC04CC04DC04EC04FC050C051C052C053C054C055C056C057C058C059C05AC05BC05CC05DC05EC05FC060C061C062C063D7EBC064C065C066C067C068C069C06AC06BC06CC06DC06EC06FC070C071C072C073C074C075C076C077C078C079C07AC07BF4EEC07CC07DC07EE6F9BEC0E6FABAECE6FBCFCBE6FCD4BCBCB6E6FDE6FEBCCDC8D2CEB3E7A1C080B4BFE7A2C9B4B8D9C4C9C081D7DDC2DAB7D7D6BDCEC6B7C4C082C083C5A6E7A3CFDFE7A4E7A5E7A6C1B7D7E9C9F0CFB8D6AFD6D5E7A7B0EDE7A8E7A9C9DCD2EFBEADE7AAB0F3C8DEBDE1E7ABC8C6C084E7ACBBE6B8F8D1A4E7ADC2E7BEF8BDCACDB3E7AEE7AFBEEED0E5C085CBE7CCD0BCCCE7B0BCA8D0F7E7B1C086D0F8E7B2E7B3B4C2E7B4E7B5C9FECEACC3E0E7B7B1C1B3F1C087E7B8E7B9D7DBD5C0E7BAC2CCD7BAE7BBE7BCE7BDBCEAC3E5C0C2E7BEE7BFBCA9C088E7C0E7C1E7B6B6D0E7C2C089E7C3E7C4BBBAB5DEC2C6B1E0E7C5D4B5E7C6B8BFE7C8E7C7B7ECC08AE7C9B2F8E7CAE7CBE7CCE7CDE7CEE7CFE7D0D3A7CBF5E7D1E7D2E7D3E7D4C9C9E7D5E7D6E7D7E7D8E7D9BDC9E7DAF3BEC08BB8D7C08CC8B1C08DC08EC08FC090C091C092C093F3BFC094F3C0F3C1C095C096C097C098C099C09AC09BC09CC09DC09EB9DECDF8C09FC0A0D8E8BAB1C140C2DEEEB7C141B7A3C142C143C144C145EEB9C146EEB8B0D5C147C148C149C14AC14BEEBBD5D6D7EFC14CC14DC14ED6C3C14FC150EEBDCAF0C151EEBCC152C153C154C155EEBEC156C157C158C159EEC0C15AC15BEEBFC15CC15DC15EC15FC160C161C162C163D1F2C164C7BCC165C3C0C166C167C168C169C16AB8E1C16BC16CC16DC16EC16FC1E7C170C171F4C6D0DFF4C7C172CFDBC173C174C8BAC175C176F4C8C177C178C179C17AC17BC17CC17DF4C9F4CAC17EF4CBC180C181C182C183C184D9FAB8FEC185C186E5F1D3F0C187F4E0C188CECCC189C18AC18BB3E1C18CC18DC18EC18FF1B4C190D2EEC191F4E1C192C193C194C195C196CFE8F4E2C197C198C7CCC199C19AC19BC19CC19DC19EB5D4B4E4F4E4C19FC1A0C240F4E3F4E5C241C242F4E6C243C244C245C246F4E7C247BAB2B0BFC248F4E8C249C24AC24BC24CC24DC24EC24FB7ADD2EDC250C251C252D2ABC0CFC253BFBCEBA3D5DFEAC8C254C255C256C257F1F3B6F8CBA3C258C259C4CDC25AF1E7C25BF1E8B8FBF1E9BAC4D4C5B0D2C25CC25DF1EAC25EC25FC260F1EBC261F1ECC262C263F1EDF1EEF1EFF1F1F1F0C5D5C264C265C266C267C268C269F1F2C26AB6FAC26BF1F4D2AEDEC7CBCAC26CC26DB3DCC26EB5A2C26FB9A2C270C271C4F4F1F5C272C273F1F6C274C275C276C1C4C1FBD6B0F1F7C277C278C279C27AF1F8C27BC1AAC27CC27DC27EC6B8C280BEDBC281C282C283C284C285C286C287C288C289C28AC28BC28CC28DC28EF1F9B4CFC28FC290C291C292C293C294F1FAC295C296C297C298C299C29AC29BC29CC29DC29EC29FC2A0C340EDB2EDB1C341C342CBE0D2DEC343CBC1D5D8C344C8E2C345C0DFBCA1C346C347C348C349C34AC34BEBC1C34CC34DD0A4C34ED6E2C34FB6C7B8D8EBC0B8CEC350EBBFB3A6B9C9D6ABC351B7F4B7CAC352C353C354BCE7B7BEEBC6C355EBC7B0B9BFCFC356EBC5D3FDC357EBC8C358C359EBC9C35AC35BB7CEC35CEBC2EBC4C9F6D6D7D5CDD0B2EBCFCEB8EBD0C35DB5A8C35EC35FC360C361C362B1B3EBD2CCA5C363C364C365C366C367C368C369C5D6EBD3C36AEBD1C5DFEBCECAA4EBD5B0FBC36BC36CBAFAC36DC36ED8B7F1E3C36FEBCAEBCBEBCCEBCDEBD6E6C0EBD9C370BFE8D2C8EBD7EBDCB8ECEBD8C371BDBAC372D0D8C373B0B7C374EBDDC4DCC375C376C377C378D6ACC379C37AC37BB4E0C37CC37DC2F6BCB9C37EC380EBDAEBDBD4E0C6EAC4D4EBDFC5A7D9F5C381B2B1C382EBE4C383BDC5C384C385C386EBE2C387C388C389C38AC38BC38CC38DC38EC38FC390C391C392C393EBE3C394C395B8ACC396CDD1EBE5C397C398C399EBE1C39AC1B3C39BC39CC39DC39EC39FC6A2C3A0C440C441C442C443C444C445CCF3C446EBE6C447C0B0D2B8EBE7C448C449C44AB8AFB8ADC44BEBE8C7BBCDF3C44CC44DC44EEBEAEBEBC44FC450C451C452C453EBEDC454C455C456C457D0C8C458EBF2C459EBEEC45AC45BC45CEBF1C8F9C45DD1FCEBECC45EC45FEBE9C460C461C462C463B8B9CFD9C4E5EBEFEBF0CCDACDC8B0F2C464EBF6C465C466C467C468C469EBF5C46AB2B2C46BC46CC46DC46EB8E0C46FEBF7C470C471C472C473C474C475B1ECC476C477CCC5C4A4CFA5C478C479C47AC47BC47CEBF9C47DC47EECA2C480C5F2C481EBFAC482C483C484C485C486C487C488C489C9C5C48AC48BC48CC48DC48EC48FE2DFEBFEC490C491C492C493CDCEECA1B1DBD3B7C494C495D2DCC496C497C498EBFDC499EBFBC49AC49BC49CC49DC49EC49FC4A0C540C541C542C543C544C545C546C547C548C549C54AC54BC54CC54DC54EB3BCC54FC550C551EAB0C552C553D7D4C554F4ABB3F4C555C556C557C558C559D6C1D6C2C55AC55BC55CC55DC55EC55FD5E9BECAC560F4A7C561D2A8F4A8F4A9C562F4AABECBD3DFC563C564C565C566C567C9E0C9E1C568C569F3C2C56ACAE6C56BCCF2C56CC56DC56EC56FC570C571E2B6CBB4C572CEE8D6DBC573F4ADF4AEF4AFC574C575C576C577F4B2C578BABDF4B3B0E3F4B0C579F4B1BDA2B2D5C57AF4B6F4B7B6E6B2B0CFCFF4B4B4ACC57BF4B5C57CC57DF4B8C57EC580C581C582C583F4B9C584C585CDA7C586F4BAC587F4BBC588C589C58AF4BCC58BC58CC58DC58EC58FC590C591C592CBD2C593F4BDC594C595C596C597F4BEC598C599C59AC59BC59CC59DC59EC59FF4BFC5A0C640C641C642C643F4DEC1BCBCE8C644C9ABD1DEE5F5C645C646C647C648DCB3D2D5C649C64ADCB4B0ACDCB5C64BC64CBDDAC64DDCB9C64EC64FC650D8C2C651DCB7D3F3C652C9D6DCBADCB6C653DCBBC3A2C654C655C656C657DCBCDCC5DCBDC658C659CEDFD6A5C65ADCCFC65BDCCDC65CC65DDCD2BDE6C2ABC65EDCB8DCCBDCCEDCBEB7D2B0C5DCC7D0BEDCC1BBA8C65FB7BCDCCCC660C661DCC6DCBFC7DBC662C663C664D1BFDCC0C665C666DCCAC667C668DCD0C669C66ACEADDCC2C66BDCC3DCC8DCC9B2D4DCD1CBD5C66CD4B7DCDBDCDFCCA6DCE6C66DC3E7DCDCC66EC66FBFC1DCD9C670B0FAB9B6DCE5DCD3C671DCC4DCD6C8F4BFE0C672C673C674C675C9BBC676C677C678B1BDC679D3A2C67AC67BDCDAC67CC67DDCD5C67EC6BBC680DCDEC681C682C683C684C685D7C2C3AFB7B6C7D1C3A9DCE2DCD8DCEBDCD4C686C687DCDDC688BEA5DCD7C689DCE0C68AC68BDCE3DCE4C68CDCF8C68DC68EDCE1DDA2DCE7C68FC690C691C692C693C694C695C696C697C698BCEBB4C4C699C69AC3A3B2E7DCFAC69BDCF2C69CDCEFC69DDCFCDCEED2F0B2E8C69EC8D7C8E3DCFBC69FDCEDC6A0C740C741DCF7C742C743DCF5C744C745BEA3DCF4C746B2DDC747C748C749C74AC74BDCF3BCF6DCE8BBC4C74CC0F3C74DC74EC74FC750C751BCD4DCE9DCEAC752DCF1DCF6DCF9B5B4C753C8D9BBE7DCFEDCFDD3ABDDA1DDA3DDA5D2F1DDA4DDA6DDA7D2A9C754C755C756C757C758C759C75ABAC9DDA9C75BC75CDDB6DDB1DDB4C75DC75EC75FC760C761C762C763DDB0C6CEC764C765C0F2C766C767C768C769C9AFC76AC76BC76CDCECDDAEC76DC76EC76FC770DDB7C771C772DCF0DDAFC773DDB8C774DDACC775C776C777C778C779C77AC77BDDB9DDB3DDADC4AAC77CC77DC77EC780DDA8C0B3C1ABDDAADDABC781DDB2BBF1DDB5D3A8DDBAC782DDBBC3A7C783C784DDD2DDBCC785C786C787DDD1C788B9BDC789C78ABED5C78BBEFAC78CC78DBACAC78EC78FC790C791DDCAC792DDC5C793DDBFC794C795C796B2CBDDC3C797DDCBB2A4DDD5C798C799C79ADDBEC79BC79CC79DC6D0DDD0C79EC79FC7A0C840C841DDD4C1E2B7C6C842C843C844C845C846DDCEDDCFC847C848C849DDC4C84AC84BC84CDDBDC84DDDCDCCD1C84EDDC9C84FC850C851C852DDC2C3C8C6BCCEAEDDCCC853DDC8C854C855C856C857C858C859DDC1C85AC85BC85CDDC6C2DCC85DC85EC85FC860C861C862D3A9D3AADDD3CFF4C8F8C863C864C865C866C867C868C869C86ADDE6C86BC86CC86DC86EC86FC870DDC7C871C872C873DDE0C2E4C874C875C876C877C878C879C87AC87BDDE1C87CC87DC87EC880C881C882C883C884C885C886DDD7C887C888C889C88AC88BD6F8C88CDDD9DDD8B8F0DDD6C88DC88EC88FC890C6CFC891B6ADC892C893C894C895C896DDE2C897BAF9D4E1DDE7C898C899C89AB4D0C89BDDDAC89CBFFBDDE3C89DDDDFC89EDDDDC89FC8A0C940C941C942C943C944B5D9C945C946C947C948DDDBDDDCDDDEC949BDAFDDE4C94ADDE5C94BC94CC94DC94EC94FC950C951C952DDF5C953C3C9C954C955CBE2C956C957C958C959DDF2C95AC95BC95CC95DC95EC95FC960C961C962C963C964C965C966D8E1C967C968C6D1C969DDF4C96AC96BC96CD5F4DDF3DDF0C96DC96EDDECC96FDDEFC970DDE8C971C972D0EEC973C974C975C976C8D8DDEEC977C978DDE9C979C97ADDEACBF2C97BDDEDC97CC97DB1CDC97EC980C981C982C983C984C0B6C985BCBBDDF1C986C987DDF7C988DDF6DDEBC989C98AC98BC98CC98DC5EEC98EC98FC990DDFBC991C992C993C994C995C996C997C998C999C99AC99BDEA4C99CC99DDEA3C99EC99FC9A0CA40CA41CA42CA43CA44CA45CA46CA47CA48DDF8CA49CA4ACA4BCA4CC3EFCA4DC2FBCA4ECA4FCA50D5E1CA51CA52CEB5CA53CA54CA55CA56DDFDCA57B2CCCA58CA59CA5ACA5BCA5CCA5DCA5ECA5FCA60C4E8CADFCA61CA62CA63CA64CA65CA66CA67CA68CA69CA6AC7BEDDFADDFCDDFEDEA2B0AAB1CECA6BCA6CCA6DCA6ECA6FDEACCA70CA71CA72CA73DEA6BDB6C8EFCA74CA75CA76CA77CA78CA79CA7ACA7BCA7CCA7DCA7EDEA1CA80CA81DEA5CA82CA83CA84CA85DEA9CA86CA87CA88CA89CA8ADEA8CA8BCA8CCA8DDEA7CA8ECA8FCA90CA91CA92CA93CA94CA95CA96DEADCA97D4CCCA98CA99CA9ACA9BDEB3DEAADEAECA9CCA9DC0D9CA9ECA9FCAA0CB40CB41B1A1DEB6CB42DEB1CB43CB44CB45CB46CB47CB48CB49DEB2CB4ACB4BCB4CCB4DCB4ECB4FCB50CB51CB52CB53CB54D1A6DEB5CB55CB56CB57CB58CB59CB5ACB5BDEAFCB5CCB5DCB5EDEB0CB5FD0BDCB60CB61CB62DEB4CAEDDEB9CB63CB64CB65CB66CB67CB68DEB8CB69DEB7CB6ACB6BCB6CCB6DCB6ECB6FCB70DEBBCB71CB72CB73CB74CB75CB76CB77BDE5CB78CB79CB7ACB7BCB7CB2D8C3EACB7DCB7EDEBACB80C5BACB81CB82CB83CB84CB85CB86DEBCCB87CB88CB89CB8ACB8BCB8CCB8DCCD9CB8ECB8FCB90CB91B7AACB92CB93CB94CB95CB96CB97CB98CB99CB9ACB9BCB9CCB9DCB9ECB9FCBA0CC40CC41D4E5CC42CC43CC44DEBDCC45CC46CC47CC48CC49DEBFCC4ACC4BCC4CCC4DCC4ECC4FCC50CC51CC52CC53CC54C4A2CC55CC56CC57CC58DEC1CC59CC5ACC5BCC5CCC5DCC5ECC5FCC60CC61CC62CC63CC64CC65CC66CC67CC68DEBECC69DEC0CC6ACC6BCC6CCC6DCC6ECC6FCC70CC71CC72CC73CC74CC75CC76CC77D5BACC78CC79CC7ADEC2CC7BCC7CCC7DCC7ECC80CC81CC82CC83CC84CC85CC86CC87CC88CC89CC8ACC8BF2AEBBA2C2B2C5B0C2C7CC8CCC8DF2AFCC8ECC8FCC90CC91CC92D0E9CC93CC94CC95D3DDCC96CC97CC98EBBDCC99CC9ACC9BCC9CCC9DCC9ECC9FCCA0B3E6F2B0CD40F2B1CD41CD42CAADCD43CD44CD45CD46CD47CD48CD49BAE7F2B3F2B5F2B4CBE4CFBAF2B2CAB4D2CFC2ECCD4ACD4BCD4CCD4DCD4ECD4FCD50CEC3F2B8B0F6F2B7CD51CD52CD53CD54CD55F2BECD56B2CFCD57CD58CD59CD5ACD5BCD5CD1C1F2BACD5DCD5ECD5FCD60CD61F2BCD4E9CD62CD63F2BBF2B6F2BFF2BDCD64F2B9CD65CD66F2C7F2C4F2C6CD67CD68F2CAF2C2F2C0CD69CD6ACD6BF2C5CD6CCD6DCD6ECD6FCD70D6FBCD71CD72CD73F2C1CD74C7F9C9DFCD75F2C8B9C6B5B0CD76CD77F2C3F2C9F2D0F2D6CD78CD79BBD7CD7ACD7BCD7CF2D5CDDCCD7DD6EBCD7ECD80F2D2F2D4CD81CD82CD83CD84B8F2CD85CD86CD87CD88F2CBCD89CD8ACD8BF2CEC2F9CD8CD5DDF2CCF2CDF2CFF2D3CD8DCD8ECD8FF2D9D3BCCD90CD91CD92CD93B6EACD94CAF1CD95B7E4F2D7CD96CD97CD98F2D8F2DAF2DDF2DBCD99CD9AF2DCCD9BCD9CCD9DCD9ED1D1F2D1CD9FCDC9CDA0CECFD6A9CE40F2E3CE41C3DBCE42F2E0CE43CE44C0AFF2ECF2DECE45F2E1CE46CE47CE48F2E8CE49CE4ACE4BCE4CF2E2CE4DCE4EF2E7CE4FCE50F2E6CE51CE52F2E9CE53CE54CE55F2DFCE56CE57F2E4F2EACE58CE59CE5ACE5BCE5CCE5DCE5ED3ACF2E5B2F5CE5FCE60F2F2CE61D0ABCE62CE63CE64CE65F2F5CE66CE67CE68BBC8CE69F2F9CE6ACE6BCE6CCE6DCE6ECE6FF2F0CE70CE71F2F6F2F8F2FACE72CE73CE74CE75CE76CE77CE78CE79F2F3CE7AF2F1CE7BCE7CCE7DBAFBCE7EB5FBCE80CE81CE82CE83F2EFF2F7F2EDF2EECE84CE85CE86F2EBF3A6CE87F3A3CE88CE89F3A2CE8ACE8BF2F4CE8CC8DACE8DCE8ECE8FCE90CE91F2FBCE92CE93CE94F3A5CE95CE96CE97CE98CE99CE9ACE9BC3F8CE9CCE9DCE9ECE9FCEA0CF40CF41CF42F2FDCF43CF44F3A7F3A9F3A4CF45F2FCCF46CF47CF48F3ABCF49F3AACF4ACF4BCF4CCF4DC2DDCF4ECF4FF3AECF50CF51F3B0CF52CF53CF54CF55CF56F3A1CF57CF58CF59F3B1F3ACCF5ACF5BCF5CCF5DCF5EF3AFF2FEF3ADCF5FCF60CF61CF62CF63CF64CF65F3B2CF66CF67CF68CF69F3B4CF6ACF6BCF6CCF6DF3A8CF6ECF6FCF70CF71F3B3CF72CF73CF74F3B5CF75CF76CF77CF78CF79CF7ACF7BCF7CCF7DCF7ED0B7CF80CF81CF82CF83F3B8CF84CF85CF86CF87D9F9CF88CF89CF8ACF8BCF8CCF8DF3B9CF8ECF8FCF90CF91CF92CF93CF94CF95F3B7CF96C8E4F3B6CF97CF98CF99CF9AF3BACF9BCF9CCF9DCF9ECF9FF3BBB4C0CFA0D040D041D042D043D044D045D046D047D048D049D04AD04BD04CD04DEEC3D04ED04FD050D051D052D053F3BCD054D055F3BDD056D057D058D1AAD059D05AD05BF4ACD0C6D05CD05DD05ED05FD060D061D0D0D1DCD062D063D064D065D066D067CFCED068D069BDD6D06AD1C3D06BD06CD06DD06ED06FD070D071BAE2E1E9D2C2F1C2B2B9D072D073B1EDF1C3D074C9C0B3C4D075D9F2D076CBA5D077F1C4D078D079D07AD07BD6D4D07CD07DD07ED080D081F1C5F4C0F1C6D082D4ACF1C7D083B0C0F4C1D084D085F4C2D086D087B4FCD088C5DBD089D08AD08BD08CCCBBD08DD08ED08FD0E4D090D091D092D093D094CDE0D095D096D097D098D099F1C8D09AD9F3D09BD09CD09DD09ED09FD0A0B1BBD140CFAED141D142D143B8A4D144D145D146D147D148F1CAD149D14AD14BD14CF1CBD14DD14ED14FD150B2C3C1D1D151D152D7B0F1C9D153D154F1CCD155D156D157D158F1CED159D15AD15BD9F6D15CD2E1D4A3D15DD15EF4C3C8B9D15FD160D161D162D163F4C4D164D165F1CDF1CFBFE3F1D0D166D167F1D4D168D169D16AD16BD16CD16DD16EF1D6F1D1D16FC9D1C5E1D170D171D172C2E3B9FCD173D174F1D3D175F1D5D176D177D178B9D3D179D17AD17BD17CD17DD17ED180F1DBD181D182D183D184D185BAD6D186B0FDF1D9D187D188D189D18AD18BF1D8F1D2F1DAD18CD18DD18ED18FD190F1D7D191D192D193C8ECD194D195D196D197CDCAF1DDD198D199D19AD19BE5BDD19CD19DD19EF1DCD19FF1DED1A0D240D241D242D243D244D245D246D247D248F1DFD249D24ACFE5D24BD24CD24DD24ED24FD250D251D252D253D254D255D256D257D258D259D25AD25BD25CD25DD25ED25FD260D261D262D263F4C5BDF3D264D265D266D267D268D269F1E0D26AD26BD26CD26DD26ED26FD270D271D272D273D274D275D276D277D278D279D27AD27BD27CD27DF1E1D27ED280D281CEF7D282D2AAD283F1FBD284D285B8B2D286D287D288D289D28AD28BD28CD28DD28ED28FD290D291D292D293D294D295D296D297D298D299D29AD29BD29CD29DD29ED29FD2A0D340D341D342D343D344D345D346D347D348D349D34AD34BD34CD34DD34ED34FD350D351D352D353D354D355D356D357D358D359D35AD35BD35CD35DD35EBCFBB9DBD35FB9E6C3D9CAD3EAE8C0C0BEF5EAE9EAEAEAEBD360EAECEAEDEAEEEAEFBDC7D361D362D363F5FBD364D365D366F5FDD367F5FED368F5FCD369D36AD36BD36CBDE2D36DF6A1B4A5D36ED36FD370D371F6A2D372D373D374F6A3D375D376D377ECB2D378D379D37AD37BD37CD37DD37ED380D381D382D383D384D1D4D385D386D387D388D389D38AD9EAD38BD38CD38DD38ED38FD390D391D392D393D394D395D396D397D398D399D39AD39BD39CD39DD39ED39FD3A0D440D441D442D443D444D445D446D447D448D449D44AD44BD44CD44DD44ED44FD450D451D452D453D454D455D456D457D458D459D45AD45BD45CD45DD45ED45FF6A4D460D461D462D463D464D465D466D467D468EEBAD469D46AD46BD46CD46DD46ED46FD470D471D472D473D474D475D476D477D478D479D47AD47BD47CD47DD47ED480D481D482D483D484D485D486D487D488D489D48AD48BD48CD48DD48ED48FD490D491D492D493D494D495D496D497D498D499D5B2D49AD49BD49CD49DD49ED49FD4A0D540D541D542D543D544D545D546D547D3FECCDCD548D549D54AD54BD54CD54DD54ED54FCAC4D550D551D552D553D554D555D556D557D558D559D55AD55BD55CD55DD55ED55FD560D561D562D563D564D565D566D567D568D569D56AD56BD56CD56DD56ED56FD570D571D572D573D574D575D576D577D578D579D57AD57BD57CD57DD57ED580D581D582D583D584D585D586D587D588D589D58AD58BD58CD58DD58ED58FD590D591D592D593D594D595D596D597D598D599D59AD59BD59CD59DD59ED59FD5A0D640D641D642D643D644D645D646D647D648D649D64AD64BD64CD64DD64ED64FD650D651D652D653D654D655D656D657D658D659D65AD65BD65CD65DD65ED65FD660D661D662E5C0D663D664D665D666D667D668D669D66AD66BD66CD66DD66ED66FD670D671D672D673D674D675D676D677D678D679D67AD67BD67CD67DD67ED680D681F6A5D682D683D684D685D686D687D688D689D68AD68BD68CD68DD68ED68FD690D691D692D693D694D695D696D697D698D699D69AD69BD69CD69DD69ED69FD6A0D740D741D742D743D744D745D746D747D748D749D74AD74BD74CD74DD74ED74FD750D751D752D753D754D755D756D757D758D759D75AD75BD75CD75DD75ED75FBEAFD760D761D762D763D764C6A9D765D766D767D768D769D76AD76BD76CD76DD76ED76FD770D771D772D773D774D775D776D777D778D779D77AD77BD77CD77DD77ED780D781D782D783D784D785D786D787D788D789D78AD78BD78CD78DD78ED78FD790D791D792D793D794D795D796D797D798DAA5BCC6B6A9B8BCC8CFBCA5DAA6DAA7CCD6C8C3DAA8C6FDD799D1B5D2E9D1B6BCC7D79ABDB2BBE4DAA9DAAAD1C8DAABD0EDB6EFC2DBD79BCBCFB7EDC9E8B7C3BEF7D6A4DAACDAADC6C0D7E7CAB6D79CD5A9CBDFD5EFDAAED6DFB4CADAB0DAAFD79DD2EBDAB1DAB2DAB3CAD4DAB4CAABDAB5DAB6B3CFD6EFDAB7BBB0B5AEDAB8DAB9B9EED1AFD2E8DABAB8C3CFEAB2EFDABBDABCD79EBDEBCEDCD3EFDABDCEF3DABED3D5BBE5DABFCBB5CBD0DAC0C7EBD6EEDAC1C5B5B6C1DAC2B7CCBFCEDAC3DAC4CBADDAC5B5F7DAC6C1C2D7BBDAC7CCB8D79FD2EAC4B1DAC8B5FDBBD1DAC9D0B3DACADACBCEBDDACCDACDDACEB2F7DAD1DACFD1E8DAD0C3D5DAD2D7A0DAD3DAD4DAD5D0BBD2A5B0F9DAD6C7ABDAD7BDF7C3A1DAD8DAD9C3FDCCB7DADADADBC0BEC6D7DADCDADDC7B4DADEDADFB9C8D840D841D842D843D844D845D846D847D848BBEDD849D84AD84BD84CB6B9F4F8D84DF4F9D84ED84FCDE3D850D851D852D853D854D855D856D857F5B9D858D859D85AD85BEBE0D85CD85DD85ED85FD860D861CFF3BBBFD862D863D864D865D866D867D868BAC0D4A5D869D86AD86BD86CD86DD86ED86FE1D9D870D871D872D873F5F4B1AAB2F2D874D875D876D877D878D879D87AF5F5D87BD87CF5F7D87DD87ED880BAD1F5F6D881C3B2D882D883D884D885D886D887D888F5F9D889D88AD88BF5F8D88CD88DD88ED88FD890D891D892D893D894D895D896D897D898D899D89AD89BD89CD89DD89ED89FD8A0D940D941D942D943D944D945D946D947D948D949D94AD94BD94CD94DD94ED94FD950D951D952D953D954D955D956D957D958D959D95AD95BD95CD95DD95ED95FD960D961D962D963D964D965D966D967D968D969D96AD96BD96CD96DD96ED96FD970D971D972D973D974D975D976D977D978D979D97AD97BD97CD97DD97ED980D981D982D983D984D985D986D987D988D989D98AD98BD98CD98DD98ED98FD990D991D992D993D994D995D996D997D998D999D99AD99BD99CD99DD99ED99FD9A0DA40DA41DA42DA43DA44DA45DA46DA47DA48DA49DA4ADA4BDA4CDA4DDA4EB1B4D5EAB8BADA4FB9B1B2C6D4F0CFCDB0DCD5CBBBF5D6CAB7B7CCB0C6B6B1E1B9BAD6FCB9E1B7A1BCFAEADAEADBCCF9B9F3EADCB4FBC3B3B7D1BAD8EADDD4F4EADEBCD6BBDFEADFC1DEC2B8D4DFD7CAEAE0EAE1EAE4EAE2EAE3C9DEB8B3B6C4EAE5CAEAC9CDB4CDDA50DA51E2D9C5E2EAE6C0B5DA52D7B8EAE7D7ACC8FCD8D3D8CDD4DEDA53D4F9C9C4D3AEB8D3B3E0DA54C9E2F4F6DA55DA56DA57BAD5DA58F4F7DA59DA5AD7DFDA5BDA5CF4F1B8B0D5D4B8CFC6F0DA5DDA5EDA5FDA60DA61DA62DA63DA64DA65B3C3DA66DA67F4F2B3ACDA68DA69DA6ADA6BD4BDC7F7DA6CDA6DDA6EDA6FDA70F4F4DA71DA72F4F3DA73DA74DA75DA76DA77DA78DA79DA7ADA7BDA7CCCCBDA7DDA7EDA80C8A4DA81DA82DA83DA84DA85DA86DA87DA88DA89DA8ADA8BDA8CDA8DF4F5DA8ED7E3C5BFF5C0DA8FDA90F5BBDA91F5C3DA92F5C2DA93D6BAF5C1DA94DA95DA96D4BEF5C4DA97F5CCDA98DA99DA9ADA9BB0CFB5F8DA9CF5C9F5CADA9DC5DCDA9EDA9FDAA0DB40F5C5F5C6DB41DB42F5C7F5CBDB43BEE0F5C8B8FADB44DB45DB46F5D0F5D3DB47DB48DB49BFE7DB4AB9F2F5BCF5CDDB4BDB4CC2B7DB4DDB4EDB4FCCF8DB50BCF9DB51F5CEF5CFF5D1B6E5F5D2DB52F5D5DB53DB54DB55DB56DB57DB58DB59F5BDDB5ADB5BDB5CF5D4D3BBDB5DB3ECDB5EDB5FCCA4DB60DB61DB62DB63F5D6DB64DB65DB66DB67DB68DB69DB6ADB6BF5D7BEE1F5D8DB6CDB6DCCDFF5DBDB6EDB6FDB70DB71DB72B2C8D7D9DB73F5D9DB74F5DAF5DCDB75F5E2DB76DB77DB78F5E0DB79DB7ADB7BF5DFF5DDDB7CDB7DF5E1DB7EDB80F5DEF5E4F5E5DB81CCE3DB82DB83E5BFB5B8F5E3F5E8CCA3DB84DB85DB86DB87DB88F5E6F5E7DB89DB8ADB8BDB8CDB8DDB8EF5BEDB8FDB90DB91DB92DB93DB94DB95DB96DB97DB98DB99DB9AB1C4DB9BDB9CF5BFDB9DDB9EB5C5B2E4DB9FF5ECF5E9DBA0B6D7DC40F5EDDC41F5EADC42DC43DC44DC45DC46F5EBDC47DC48B4DADC49D4EADC4ADC4BDC4CF5EEDC4DB3F9DC4EDC4FDC50DC51DC52DC53DC54F5EFF5F1DC55DC56DC57F5F0DC58DC59DC5ADC5BDC5CDC5DDC5EF5F2DC5FF5F3DC60DC61DC62DC63DC64DC65DC66DC67DC68DC69DC6ADC6BC9EDB9AADC6CDC6DC7FBDC6EDC6FB6E3DC70DC71DC72DC73DC74DC75DC76CCC9DC77DC78DC79DC7ADC7BDC7CDC7DDC7EDC80DC81DC82DC83DC84DC85DC86DC87DC88DC89DC8AEAA6DC8BDC8CDC8DDC8EDC8FDC90DC91DC92DC93DC94DC95DC96DC97DC98DC99DC9ADC9BDC9CDC9DDC9EDC9FDCA0DD40DD41DD42DD43DD44DD45DD46DD47DD48DD49DD4ADD4BDD4CDD4DDD4EDD4FDD50DD51DD52DD53DD54DD55DD56DD57DD58DD59DD5ADD5BDD5CDD5DDD5EDD5FDD60DD61DD62DD63DD64DD65DD66DD67DD68DD69DD6ADD6BDD6CDD6DDD6EDD6FDD70DD71DD72DD73DD74DD75DD76DD77DD78DD79DD7ADD7BDD7CDD7DDD7EDD80DD81DD82DD83DD84DD85DD86DD87DD88DD89DD8ADD8BDD8CDD8DDD8EDD8FDD90DD91DD92DD93DD94DD95DD96DD97DD98DD99DD9ADD9BDD9CDD9DDD9EDD9FDDA0DE40DE41DE42DE43DE44DE45DE46DE47DE48DE49DE4ADE4BDE4CDE4DDE4EDE4FDE50DE51DE52DE53DE54DE55DE56DE57DE58DE59DE5ADE5BDE5CDE5DDE5EDE5FDE60B3B5D4FEB9ECD0F9DE61E9EDD7AAE9EEC2D6C8EDBAE4E9EFE9F0E9F1D6E1E9F2E9F3E9F5E9F4E9F6E9F7C7E1E9F8D4D8E9F9BDCEDE62E9FAE9FBBDCFE9FCB8A8C1BEE9FDB1B2BBD4B9F5E9FEDE63EAA1EAA2EAA3B7F8BCADDE64CAE4E0CED4AFCFBDD5B7EAA4D5DEEAA5D0C1B9BCDE65B4C7B1D9DE66DE67DE68C0B1DE69DE6ADE6BDE6CB1E6B1E7DE6DB1E8DE6EDE6FDE70DE71B3BDC8E8DE72DE73DE74DE75E5C1DE76DE77B1DFDE78DE79DE7AC1C9B4EFDE7BDE7CC7A8D3D8DE7DC6F9D1B8DE7EB9FDC2F5DE80DE81DE82DE83DE84D3ADDE85D4CBBDFCDE86E5C2B7B5E5C3DE87DE88BBB9D5E2DE89BDF8D4B6CEA5C1ACB3D9DE8ADE8BCCF6DE8CE5C6E5C4E5C8DE8DE5CAE5C7B5CFC6C8DE8EB5FCE5C5DE8FCAF6DE90DE91E5C9DE92DE93DE94C3D4B1C5BCA3DE95DE96DE97D7B7DE98DE99CDCBCBCDCACACCD3E5CCE5CBC4E6DE9ADE9BD1A1D1B7E5CDDE9CE5D0DE9DCDB8D6F0E5CFB5DDDE9ECDBEDE9FE5D1B6BADEA0DF40CDA8B9E4DF41CAC5B3D1CBD9D4ECE5D2B7EADF42DF43DF44E5CEDF45DF46DF47DF48DF49DF4AE5D5B4FEE5D6DF4BDF4CDF4DDF4EDF4FE5D3E5D4DF50D2DDDF51DF52C2DFB1C6DF53D3E2DF54DF55B6DDCBECDF56E5D7DF57DF58D3F6DF59DF5ADF5BDF5CDF5DB1E9DF5EB6F4E5DAE5D8E5D9B5C0DF5FDF60DF61D2C5E5DCDF62DF63E5DEDF64DF65DF66DF67DF68DF69E5DDC7B2DF6AD2A3DF6BDF6CE5DBDF6DDF6EDF6FDF70D4E2D5DADF71DF72DF73DF74DF75E5E0D7F1DF76DF77DF78DF79DF7ADF7BDF7CE5E1DF7DB1DCD1FBDF7EE5E2E5E4DF80DF81DF82DF83E5E3DF84DF85E5E5DF86DF87DF88DF89DF8AD2D8DF8BB5CBDF8CE7DFDF8DDAF5DF8EDAF8DF8FDAF6DF90DAF7DF91DF92DF93DAFAD0CFC4C7DF94DF95B0EEDF96DF97DF98D0B0DF99DAF9DF9AD3CABAAADBA2C7F1DF9BDAFCDAFBC9DBDAFDDF9CDBA1D7DEDAFEC1DADF9DDF9EDBA5DF9FDFA0D3F4E040E041DBA7DBA4E042DBA8E043E044BDBCE045E046E047C0C9DBA3DBA6D6A3E048DBA9E049E04AE04BDBADE04CE04DE04EDBAEDBACBAC2E04FE050E051BFA4DBABE052E053E054DBAAD4C7B2BFE055E056DBAFE057B9F9E058DBB0E059E05AE05BE05CB3BBE05DE05EE05FB5A6E060E061E062E063B6BCDBB1E064E065E066B6F5E067DBB2E068E069E06AE06BE06CE06DE06EE06FE070E071E072E073E074E075E076E077E078E079E07AE07BB1C9E07CE07DE07EE080DBB4E081E082E083DBB3DBB5E084E085E086E087E088E089E08AE08BE08CE08DE08EDBB7E08FDBB6E090E091E092E093E094E095E096DBB8E097E098E099E09AE09BE09CE09DE09EE09FDBB9E0A0E140DBBAE141E142D3CFF4FAC7F5D7C3C5E4F4FCF4FDF4FBE143BEC6E144E145E146E147D0EFE148E149B7D3E14AE14BD4CDCCAAE14CE14DF5A2F5A1BAA8F4FECBD6E14EE14FE150F5A4C0D2E151B3EAE152CDAAF5A5F5A3BDB4F5A8E153F5A9BDCDC3B8BFE1CBE1F5AAE154E155E156F5A6F5A7C4F0E157E158E159E15AE15BF5ACE15CB4BCE15DD7EDE15EB4D7F5ABF5AEE15FE160F5ADF5AFD0D1E161E162E163E164E165E166E167C3D1C8A9E168E169E16AE16BE16CE16DF5B0F5B1E16EE16FE170E171E172E173F5B2E174E175F5B3F5B4F5B5E176E177E178E179F5B7F5B6E17AE17BE17CE17DF5B8E17EE180E181E182E183E184E185E186E187E188E189E18AB2C9E18BD3D4CACDE18CC0EFD6D8D2B0C1BFE18DBDF0E18EE18FE190E191E192E193E194E195E196E197B8AAE198E199E19AE19BE19CE19DE19EE19FE1A0E240E241E242E243E244E245E246E247E248E249E24AE24BE24CE24DE24EE24FE250E251E252E253E254E255E256E257E258E259E25AE25BE25CE25DE25EE25FE260E261E262E263E264E265E266E267E268E269E26AE26BE26CE26DE26EE26FE270E271E272E273E274E275E276E277E278E279E27AE27BE27CE27DE27EE280E281E282E283E284E285E286E287E288E289E28AE28BE28CE28DE28EE28FE290E291E292E293E294E295E296E297E298E299E29AE29BE29CE29DE29EE29FE2A0E340E341E342E343E344E345E346E347E348E349E34AE34BE34CE34DE34EE34FE350E351E352E353E354E355E356E357E358E359E35AE35BE35CE35DE35EE35FE360E361E362E363E364E365E366E367E368E369E36AE36BE36CE36DBCF8E36EE36FE370E371E372E373E374E375E376E377E378E379E37AE37BE37CE37DE37EE380E381E382E383E384E385E386E387F6C6E388E389E38AE38BE38CE38DE38EE38FE390E391E392E393E394E395E396E397E398E399E39AE39BE39CE39DE39EE39FE3A0E440E441E442E443E444E445F6C7E446E447E448E449E44AE44BE44CE44DE44EE44FE450E451E452E453E454E455E456E457E458E459E45AE45BE45CE45DE45EF6C8E45FE460E461E462E463E464E465E466E467E468E469E46AE46BE46CE46DE46EE46FE470E471E472E473E474E475E476E477E478E479E47AE47BE47CE47DE47EE480E481E482E483E484E485E486E487E488E489E48AE48BE48CE48DE48EE48FE490E491E492E493E494E495E496E497E498E499E49AE49BE49CE49DE49EE49FE4A0E540E541E542E543E544E545E546E547E548E549E54AE54BE54CE54DE54EE54FE550E551E552E553E554E555E556E557E558E559E55AE55BE55CE55DE55EE55FE560E561E562E563E564E565E566E567E568E569E56AE56BE56CE56DE56EE56FE570E571E572E573F6C9E574E575E576E577E578E579E57AE57BE57CE57DE57EE580E581E582E583E584E585E586E587E588E589E58AE58BE58CE58DE58EE58FE590E591E592E593E594E595E596E597E598E599E59AE59BE59CE59DE59EE59FF6CAE5A0E640E641E642E643E644E645E646E647E648E649E64AE64BE64CE64DE64EE64FE650E651E652E653E654E655E656E657E658E659E65AE65BE65CE65DE65EE65FE660E661E662F6CCE663E664E665E666E667E668E669E66AE66BE66CE66DE66EE66FE670E671E672E673E674E675E676E677E678E679E67AE67BE67CE67DE67EE680E681E682E683E684E685E686E687E688E689E68AE68BE68CE68DE68EE68FE690E691E692E693E694E695E696E697E698E699E69AE69BE69CE69DF6CBE69EE69FE6A0E740E741E742E743E744E745E746E747F7E9E748E749E74AE74BE74CE74DE74EE74FE750E751E752E753E754E755E756E757E758E759E75AE75BE75CE75DE75EE75FE760E761E762E763E764E765E766E767E768E769E76AE76BE76CE76DE76EE76FE770E771E772E773E774E775E776E777E778E779E77AE77BE77CE77DE77EE780E781E782E783E784E785E786E787E788E789E78AE78BE78CE78DE78EE78FE790E791E792E793E794E795E796E797E798E799E79AE79BE79CE79DE79EE79FE7A0E840E841E842E843E844E845E846E847E848E849E84AE84BE84CE84DE84EF6CDE84FE850E851E852E853E854E855E856E857E858E859E85AE85BE85CE85DE85EE85FE860E861E862E863E864E865E866E867E868E869E86AE86BE86CE86DE86EE86FE870E871E872E873E874E875E876E877E878E879E87AF6CEE87BE87CE87DE87EE880E881E882E883E884E885E886E887E888E889E88AE88BE88CE88DE88EE88FE890E891E892E893E894EEC4EEC5EEC6D5EBB6A4EEC8EEC7EEC9EECAC7A5EECBEECCE895B7B0B5F6EECDEECFE896EECEE897B8C6EED0EED1EED2B6DBB3AED6D3C4C6B1B5B8D6EED3EED4D4BFC7D5BEFBCED9B9B3EED6EED5EED8EED7C5A5EED9EEDAC7AEEEDBC7AFEEDCB2A7EEDDEEDEEEDFEEE0EEE1D7EAEEE2EEE3BCD8EEE4D3CBCCFAB2ACC1E5EEE5C7A6C3ADE898EEE6EEE7EEE8EEE9EEEAEEEBEEECE899EEEDEEEEEEEFE89AE89BEEF0EEF1EEF2EEF4EEF3E89CEEF5CDADC2C1EEF6EEF7EEF8D5A1EEF9CFB3EEFAEEFBE89DEEFCEEFDEFA1EEFEEFA2B8F5C3FAEFA3EFA4BDC2D2BFB2F9EFA5EFA6EFA7D2F8EFA8D6FDEFA9C6CCE89EEFAAEFABC1B4EFACCFFACBF8EFAEEFADB3FAB9F8EFAFEFB0D0E2EFB1EFB2B7E6D0BFEFB3EFB4EFB5C8F1CCE0EFB6EFB7EFB8EFB9EFBAD5E0EFBBB4EDC3AAEFBCE89FEFBDEFBEEFBFE8A0CEFDEFC0C2E0B4B8D7B6BDF5E940CFC7EFC3EFC1EFC2EFC4B6A7BCFCBEE2C3CCEFC5EFC6E941EFC7EFCFEFC8EFC9EFCAC7C2EFF1B6CDEFCBE942EFCCEFCDB6C6C3BEEFCEE943EFD0EFD1EFD2D5F2E944EFD3C4F7E945EFD4C4F8EFD5EFD6B8E4B0F7EFD7EFD8EFD9E946EFDAEFDBEFDCEFDDE947EFDEBEB5EFE1EFDFEFE0E948EFE2EFE3C1CDEFE4EFE5EFE6EFE7EFE8EFE9EFEAEFEBEFECC0D8E949EFEDC1ADEFEEEFEFEFF0E94AE94BCFE2E94CE94DE94EE94FE950E951E952E953B3A4E954E955E956E957E958E959E95AE95BE95CE95DE95EE95FE960E961E962E963E964E965E966E967E968E969E96AE96BE96CE96DE96EE96FE970E971E972E973E974E975E976E977E978E979E97AE97BE97CE97DE97EE980E981E982E983E984E985E986E987E988E989E98AE98BE98CE98DE98EE98FE990E991E992E993E994E995E996E997E998E999E99AE99BE99CE99DE99EE99FE9A0EA40EA41EA42EA43EA44EA45EA46EA47EA48EA49EA4AEA4BEA4CEA4DEA4EEA4FEA50EA51EA52EA53EA54EA55EA56EA57EA58EA59EA5AEA5BC3C5E3C5C9C1E3C6EA5CB1D5CECAB4B3C8F2E3C7CFD0E3C8BCE4E3C9E3CAC3C6D5A2C4D6B9EBCEC5E3CBC3F6E3CCEA5DB7A7B8F3BAD2E3CDE3CED4C4E3CFEA5EE3D0D1CBE3D1E3D2E3D3E3D4D1D6E3D5B2FBC0BBE3D6EA5FC0ABE3D7E3D8E3D9EA60E3DAE3DBEA61B8B7DAE2EA62B6D3EA63DAE4DAE3EA64EA65EA66EA67EA68EA69EA6ADAE6EA6BEA6CEA6DC8EEEA6EEA6FDAE5B7C0D1F4D2F5D5F3BDD7EA70EA71EA72EA73D7E8DAE8DAE7EA74B0A2CDD3EA75DAE9EA76B8BDBCCAC2BDC2A4B3C2DAEAEA77C2AAC4B0BDB5EA78EA79CFDEEA7AEA7BEA7CDAEBC9C2EA7DEA7EEA80EA81EA82B1DDEA83EA84EA85DAECEA86B6B8D4BAEA87B3FDEA88EA89DAEDD4C9CFD5C5E3EA8ADAEEEA8BEA8CEA8DEA8EEA8FDAEFEA90DAF0C1EACCD5CFDDEA91EA92EA93EA94EA95EA96EA97EA98EA99EA9AEA9BEA9CEA9DD3E7C2A1EA9EDAF1EA9FEAA0CBE5EB40DAF2EB41CBE6D2FEEB42EB43EB44B8F4EB45EB46DAF3B0AFCFB6EB47EB48D5CFEB49EB4AEB4BEB4CEB4DEB4EEB4FEB50EB51EB52CBEDEB53EB54EB55EB56EB57EB58EB59EB5ADAF4EB5BEB5CE3C4EB5DEB5EC1A5EB5FEB60F6BFEB61EB62F6C0F6C1C4D1EB63C8B8D1E3EB64EB65D0DBD1C5BCAFB9CDEB66EFF4EB67EB68B4C6D3BAF6C2B3FBEB69EB6AF6C3EB6BEB6CB5F1EB6DEB6EEB6FEB70EB71EB72EB73EB74EB75EB76F6C5EB77EB78EB79EB7AEB7BEB7CEB7DD3EAF6A7D1A9EB7EEB80EB81EB82F6A9EB83EB84EB85F6A8EB86EB87C1E3C0D7EB88B1A2EB89EB8AEB8BEB8CCEEDEB8DD0E8F6ABEB8EEB8FCFF6EB90F6AAD5F0F6ACC3B9EB91EB92EB93BBF4F6AEF6ADEB94EB95EB96C4DEEB97EB98C1D8EB99EB9AEB9BEB9CEB9DCBAAEB9ECFBCEB9FEBA0EC40EC41EC42EC43EC44EC45EC46EC47EC48F6AFEC49EC4AF6B0EC4BEC4CF6B1EC4DC2B6EC4EEC4FEC50EC51EC52B0D4C5F9EC53EC54EC55EC56F6B2EC57EC58EC59EC5AEC5BEC5CEC5DEC5EEC5FEC60EC61EC62EC63EC64EC65EC66EC67EC68EC69C7E0F6A6EC6AEC6BBEB8EC6CEC6DBEB2EC6EB5E5EC6FEC70B7C7EC71BFBFC3D2C3E6EC72EC73D8CCEC74EC75EC76B8EFEC77EC78EC79EC7AEC7BEC7CEC7DEC7EEC80BDF9D1A5EC81B0D0EC82EC83EC84EC85EC86F7B0EC87EC88EC89EC8AEC8BEC8CEC8DEC8EF7B1EC8FEC90EC91EC92EC93D0ACEC94B0B0EC95EC96EC97F7B2F7B3EC98F7B4EC99EC9AEC9BC7CAEC9CEC9DEC9EEC9FECA0ED40ED41BECFED42ED43F7B7ED44ED45ED46ED47ED48ED49ED4AF7B6ED4BB1DEED4CF7B5ED4DED4EF7B8ED4FF7B9ED50ED51ED52ED53ED54ED55ED56ED57ED58ED59ED5AED5BED5CED5DED5EED5FED60ED61ED62ED63ED64ED65ED66ED67ED68ED69ED6AED6BED6CED6DED6EED6FED70ED71ED72ED73ED74ED75ED76ED77ED78ED79ED7AED7BED7CED7DED7EED80ED81CEA4C8CDED82BAABE8B8E8B9E8BABEC2ED83ED84ED85ED86ED87D2F4ED88D4CFC9D8ED89ED8AED8BED8CED8DED8EED8FED90ED91ED92ED93ED94ED95ED96ED97ED98ED99ED9AED9BED9CED9DED9EED9FEDA0EE40EE41EE42EE43EE44EE45EE46EE47EE48EE49EE4AEE4BEE4CEE4DEE4EEE4FEE50EE51EE52EE53EE54EE55EE56EE57EE58EE59EE5AEE5BEE5CEE5DEE5EEE5FEE60EE61EE62EE63EE64EE65EE66EE67EE68EE69EE6AEE6BEE6CEE6DEE6EEE6FEE70EE71EE72EE73EE74EE75EE76EE77EE78EE79EE7AEE7BEE7CEE7DEE7EEE80EE81EE82EE83EE84EE85EE86EE87EE88EE89EE8AEE8BEE8CEE8DEE8EEE8FEE90EE91EE92EE93EE94EE95EE96EE97EE98EE99EE9AEE9BEE9CEE9DEE9EEE9FEEA0EF40EF41EF42EF43EF44EF45D2B3B6A5C7EAF1FCCFEECBB3D0EBE7EFCDE7B9CBB6D9F1FDB0E4CBCCF1FED4A4C2ADC1ECC6C4BEB1F2A1BCD5EF46F2A2F2A3EF47F2A4D2C3C6B5EF48CDC7F2A5EF49D3B1BFC5CCE2EF4AF2A6F2A7D1D5B6EEF2A8F2A9B5DFF2AAF2ABEF4BB2FCF2ACF2ADC8A7EF4CEF4DEF4EEF4FEF50EF51EF52EF53EF54EF55EF56EF57EF58EF59EF5AEF5BEF5CEF5DEF5EEF5FEF60EF61EF62EF63EF64EF65EF66EF67EF68EF69EF6AEF6BEF6CEF6DEF6EEF6FEF70EF71B7E7EF72EF73ECA9ECAAECABEF74ECACEF75EF76C6AEECADECAEEF77EF78EF79B7C9CAB3EF7AEF7BEF7CEF7DEF7EEF80EF81E2B8F7CFEF82EF83EF84EF85EF86EF87EF88EF89EF8AEF8BEF8CEF8DEF8EEF8FEF90EF91EF92EF93EF94EF95EF96EF97EF98EF99EF9AEF9BEF9CEF9DEF9EEF9FEFA0F040F041F042F043F044F7D0F045F046B2CDF047F048F049F04AF04BF04CF04DF04EF04FF050F051F052F053F054F055F056F057F058F059F05AF05BF05CF05DF05EF05FF060F061F062F063F7D1F064F065F066F067F068F069F06AF06BF06CF06DF06EF06FF070F071F072F073F074F075F076F077F078F079F07AF07BF07CF07DF07EF080F081F082F083F084F085F086F087F088F089F7D3F7D2F08AF08BF08CF08DF08EF08FF090F091F092F093F094F095F096E2BBF097BCA2F098E2BCE2BDE2BEE2BFE2C0E2C1B7B9D2FBBDA4CACEB1A5CBC7F099E2C2B6FCC8C4E2C3F09AF09BBDC8F09CB1FDE2C4F09DB6F6E2C5C4D9F09EF09FE2C6CFDAB9DDE2C7C0A1F0A0E2C8B2F6F140E2C9F141C1F3E2CAE2CBC2F8E2CCE2CDE2CECAD7D8B8D9E5CFE3F142F143F144F145F146F147F148F149F14AF14BF14CF0A5F14DF14EDCB0F14FF150F151F152F153F154F155F156F157F158F159F15AF15BF15CF15DF15EF15FF160F161F162F163F164F165F166F167F168F169F16AF16BF16CF16DF16EF16FF170F171F172F173F174F175F176F177F178F179F17AF17BF17CF17DF17EF180F181F182F183F184F185F186F187F188F189F18AF18BF18CF18DF18EF18FF190F191F192F193F194F195F196F197F198F199F19AF19BF19CF19DF19EF19FF1A0F240F241F242F243F244F245F246F247F248F249F24AF24BF24CF24DF24EF24FF250F251F252F253F254F255F256F257F258F259F25AF25BF25CF25DF25EF25FF260F261F262F263F264F265F266F267F268F269F26AF26BF26CF26DF26EF26FF270F271F272F273F274F275F276F277F278F279F27AF27BF27CF27DF27EF280F281F282F283F284F285F286F287F288F289F28AF28BF28CF28DF28EF28FF290F291F292F293F294F295F296F297F298F299F29AF29BF29CF29DF29EF29FF2A0F340F341F342F343F344F345F346F347F348F349F34AF34BF34CF34DF34EF34FF350F351C2EDD4A6CDD4D1B1B3DBC7FDF352B2B5C2BFE6E0CABBE6E1E6E2BED4E6E3D7A4CDD5E6E5BCDDE6E4E6E6E6E7C2EEF353BDBEE6E8C2E6BAA7E6E9F354E6EAB3D2D1E9F355F356BFA5E6EBC6EFE6ECE6EDF357F358E6EEC6ADE6EFF359C9A7E6F0E6F1E6F2E5B9E6F3E6F4C2E2E6F5E6F6D6E8E6F7F35AE6F8B9C7F35BF35CF35DF35EF35FF360F361F7BBF7BAF362F363F364F365F7BEF7BCBAA1F366F7BFF367F7C0F368F369F36AF7C2F7C1F7C4F36BF36CF7C3F36DF36EF36FF370F371F7C5F7C6F372F373F374F375F7C7F376CBE8F377F378F379F37AB8DFF37BF37CF37DF37EF380F381F7D4F382F7D5F383F384F385F386F7D6F387F388F389F38AF7D8F38BF7DAF38CF7D7F38DF38EF38FF390F391F392F393F394F395F7DBF396F7D9F397F398F399F39AF39BF39CF39DD7D7F39EF39FF3A0F440F7DCF441F442F443F444F445F446F7DDF447F448F449F7DEF44AF44BF44CF44DF44EF44FF450F451F452F453F454F7DFF455F456F457F7E0F458F459F45AF45BF45CF45DF45EF45FF460F461F462DBCBF463F464D8AAF465F466F467F468F469F46AF46BF46CE5F7B9EDF46DF46EF46FF470BFFDBBEAF7C9C6C7F7C8F471F7CAF7CCF7CBF472F473F474F7CDF475CEBAF476F7CEF477F478C4A7F479F47AF47BF47CF47DF47EF480F481F482F483F484F485F486F487F488F489F48AF48BF48CF48DF48EF48FF490F491F492F493F494F495F496F497F498F499F49AF49BF49CF49DF49EF49FF4A0F540F541F542F543F544F545F546F547F548F549F54AF54BF54CF54DF54EF54FF550F551F552F553F554F555F556F557F558F559F55AF55BF55CF55DF55EF55FF560F561F562F563F564F565F566F567F568F569F56AF56BF56CF56DF56EF56FF570F571F572F573F574F575F576F577F578F579F57AF57BF57CF57DF57EF580F581F582F583F584F585F586F587F588F589F58AF58BF58CF58DF58EF58FF590F591F592F593F594F595F596F597F598F599F59AF59BF59CF59DF59EF59FF5A0F640F641F642F643F644F645F646F647F648F649F64AF64BF64CF64DF64EF64FF650F651F652F653F654F655F656F657F658F659F65AF65BF65CF65DF65EF65FF660F661F662F663F664F665F666F667F668F669F66AF66BF66CF66DF66EF66FF670F671F672F673F674F675F676F677F678F679F67AF67BF67CF67DF67EF680F681F682F683F684F685F686F687F688F689F68AF68BF68CF68DF68EF68FF690F691F692F693F694F695F696F697F698F699F69AF69BF69CF69DF69EF69FF6A0F740F741F742F743F744F745F746F747F748F749F74AF74BF74CF74DF74EF74FF750F751F752F753F754F755F756F757F758F759F75AF75BF75CF75DF75EF75FF760F761F762F763F764F765F766F767F768F769F76AF76BF76CF76DF76EF76FF770F771F772F773F774F775F776F777F778F779F77AF77BF77CF77DF77EF780D3E3F781F782F6CFF783C2B3F6D0F784F785F6D1F6D2F6D3F6D4F786F787F6D6F788B1ABF6D7F789F6D8F6D9F6DAF78AF6DBF6DCF78BF78CF78DF78EF6DDF6DECFCAF78FF6DFF6E0F6E1F6E2F6E3F6E4C0F0F6E5F6E6F6E7F6E8F6E9F790F6EAF791F6EBF6ECF792F6EDF6EEF6EFF6F0F6F1F6F2F6F3F6F4BEA8F793F6F5F6F6F6F7F6F8F794F795F796F797F798C8FAF6F9F6FAF6FBF6FCF799F79AF6FDF6FEF7A1F7A2F7A3F7A4F7A5F79BF79CF7A6F7A7F7A8B1EEF7A9F7AAF7ABF79DF79EF7ACF7ADC1DBF7AEF79FF7A0F7AFF840F841F842F843F844F845F846F847F848F849F84AF84BF84CF84DF84EF84FF850F851F852F853F854F855F856F857F858F859F85AF85BF85CF85DF85EF85FF860F861F862F863F864F865F866F867F868F869F86AF86BF86CF86DF86EF86FF870F871F872F873F874F875F876F877F878F879F87AF87BF87CF87DF87EF880F881F882F883F884F885F886F887F888F889F88AF88BF88CF88DF88EF88FF890F891F892F893F894F895F896F897F898F899F89AF89BF89CF89DF89EF89FF8A0F940F941F942F943F944F945F946F947F948F949F94AF94BF94CF94DF94EF94FF950F951F952F953F954F955F956F957F958F959F95AF95BF95CF95DF95EF95FF960F961F962F963F964F965F966F967F968F969F96AF96BF96CF96DF96EF96FF970F971F972F973F974F975F976F977F978F979F97AF97BF97CF97DF97EF980F981F982F983F984F985F986F987F988F989F98AF98BF98CF98DF98EF98FF990F991F992F993F994F995F996F997F998F999F99AF99BF99CF99DF99EF99FF9A0FA40FA41FA42FA43FA44FA45FA46FA47FA48FA49FA4AFA4BFA4CFA4DFA4EFA4FFA50FA51FA52FA53FA54FA55FA56FA57FA58FA59FA5AFA5BFA5CFA5DFA5EFA5FFA60FA61FA62FA63FA64FA65FA66FA67FA68FA69FA6AFA6BFA6CFA6DFA6EFA6FFA70FA71FA72FA73FA74FA75FA76FA77FA78FA79FA7AFA7BFA7CFA7DFA7EFA80FA81FA82FA83FA84FA85FA86FA87FA88FA89FA8AFA8BFA8CFA8DFA8EFA8FFA90FA91FA92FA93FA94FA95FA96FA97FA98FA99FA9AFA9BFA9CFA9DFA9EFA9FFAA0FB40FB41FB42FB43FB44FB45FB46FB47FB48FB49FB4AFB4BFB4CFB4DFB4EFB4FFB50FB51FB52FB53FB54FB55FB56FB57FB58FB59FB5AFB5BC4F1F0AFBCA6F0B0C3F9FB5CC5B8D1BBFB5DF0B1F0B2F0B3F0B4F0B5D1BCFB5ED1ECFB5FF0B7F0B6D4A7FB60CDD2F0B8F0BAF0B9F0BBF0BCFB61FB62B8EBF0BDBAE8FB63F0BEF0BFBEE9F0C0B6ECF0C1F0C2F0C3F0C4C8B5F0C5F0C6FB64F0C7C5F4FB65F0C8FB66FB67FB68F0C9FB69F0CAF7BDFB6AF0CBF0CCF0CDFB6BF0CEFB6CFB6DFB6EFB6FF0CFBAD7FB70F0D0F0D1F0D2F0D3F0D4F0D5F0D6F0D8FB71FB72D3A5F0D7FB73F0D9FB74FB75FB76FB77FB78FB79FB7AFB7BFB7CFB7DF5BAC2B9FB7EFB80F7E4FB81FB82FB83FB84F7E5F7E6FB85FB86F7E7FB87FB88FB89FB8AFB8BFB8CF7E8C2B4FB8DFB8EFB8FFB90FB91FB92FB93FB94FB95F7EAFB96F7EBFB97FB98FB99FB9AFB9BFB9CC2F3FB9DFB9EFB9FFBA0FC40FC41FC42FC43FC44FC45FC46FC47FC48F4F0FC49FC4AFC4BF4EFFC4CFC4DC2E9FC4EF7E1F7E2FC4FFC50FC51FC52FC53BBC6FC54FC55FC56FC57D9E4FC58FC59FC5ACAF2C0E8F0A4FC5BBADAFC5CFC5DC7ADFC5EFC5FFC60C4ACFC61FC62F7ECF7EDF7EEFC63F7F0F7EFFC64F7F1FC65FC66F7F4FC67F7F3FC68F7F2F7F5FC69FC6AFC6BFC6CF7F6FC6DFC6EFC6FFC70FC71FC72FC73FC74FC75EDE9FC76EDEAEDEBFC77F6BCFC78FC79FC7AFC7BFC7CFC7DFC7EFC80FC81FC82FC83FC84F6BDFC85F6BEB6A6FC86D8BEFC87FC88B9C4FC89FC8AFC8BD8BBFC8CDCB1FC8DFC8EFC8FFC90FC91FC92CAF3FC93F7F7FC94FC95FC96FC97FC98FC99FC9AFC9BFC9CF7F8FC9DFC9EF7F9FC9FFCA0FD40FD41FD42FD43FD44F7FBFD45F7FAFD46B1C7FD47F7FCF7FDFD48FD49FD4AFD4BFD4CF7FEFD4DFD4EFD4FFD50FD51FD52FD53FD54FD55FD56FD57C6EBECB4FD58FD59FD5AFD5BFD5CFD5DFD5EFD5FFD60FD61FD62FD63FD64FD65FD66FD67FD68FD69FD6AFD6BFD6CFD6DFD6EFD6FFD70FD71FD72FD73FD74FD75FD76FD77FD78FD79FD7AFD7BFD7CFD7DFD7EFD80FD81FD82FD83FD84FD85B3DDF6B3FD86FD87F6B4C1E4F6B5F6B6F6B7F6B8F6B9F6BAC8A3F6BBFD88FD89FD8AFD8BFD8CFD8DFD8EFD8FFD90FD91FD92FD93C1FAB9A8EDE8FD94FD95FD96B9EAD9DFFD97FD98FD99FD9AFD9';
+
+ for (var i = 0; i < str.length; i++) {
+ var c = str.charAt(i),
+ code = str.charCodeAt(i);
+ if (c == " ") strOut += "+";
+ else if (code >= 19968 && code <= 40869) {
+ var index = code - 19968;
+ strOut += "%" + z.substr(index * 4, 2) + "%" + z.substr(index * 4 + 2, 2);
+ } else {
+ strOut += "%" + str.charCodeAt(i).toString(16);
+ }
+ }
+ return strOut;
+ },
+ /* 改变图片大小 */
+ scale: function (img, w, h) {
+ var ow = img.width,
+ oh = img.height;
+
+ if (ow >= oh) {
+ img.width = w * ow / oh;
+ img.height = h;
+ img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';
+ } else {
+ img.width = w;
+ img.height = h * oh / ow;
+ img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';
+ }
+ },
+ getImageData: function(){
+ var _this = this,
+ key = $G('searchTxt').value,
+ type = $G('searchType').value,
+ keepOriginName = editor.options.keepOriginName ? "1" : "0",
+ url = "http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&st=-1&tn=baiduimagejson&istype=2&rn=32&fm=index&pv=&word=" + _this.encodeToGb2312(key) + type + "&keeporiginname=" + keepOriginName + "&" + +new Date;
+
+ $G('searchListUl').innerHTML = lang.searchLoading;
+ ajax.request(url, {
+ 'dataType': 'jsonp',
+ 'charset': 'GB18030',
+ 'onsuccess':function(json){
+ var list = [];
+ if(json && json.data) {
+ for(var i = 0; i < json.data.length; i++) {
+ if(json.data[i].objURL) {
+ list.push({
+ title: json.data[i].fromPageTitleEnc,
+ src: json.data[i].objURL,
+ url: json.data[i].fromURL
+ });
+ }
+ }
+ }
+ _this.setList(list);
+ },
+ 'onerror':function(){
+ $G('searchListUl').innerHTML = lang.searchRetry;
+ }
+ });
+ },
+ /* 添加图片到列表界面上 */
+ setList: function (list) {
+ var i, item, p, img, link, _this = this,
+ listUl = $G('searchListUl');
+
+ listUl.innerHTML = '';
+ if(list.length) {
+ for (i = 0; i < list.length; i++) {
+ item = document.createElement('li');
+ p = document.createElement('p');
+ img = document.createElement('img');
+ link = document.createElement('a');
+
+ img.onload = function () {
+ _this.scale(this, 113, 113);
+ };
+ img.width = 113;
+ img.setAttribute('src', list[i].src);
+
+ link.href = list[i].url;
+ link.target = '_blank';
+ link.title = list[i].title;
+ link.innerHTML = list[i].title;
+
+ p.appendChild(img);
+ item.appendChild(p);
+ item.appendChild(link);
+ listUl.appendChild(item);
+ }
+ } else {
+ listUl.innerHTML = lang.searchRetry;
+ }
+ },
+ getInsertList: function () {
+ var child,
+ src,
+ align = getAlign(),
+ list = [],
+ items = $G('searchListUl').children;
+ for(var i = 0; i < items.length; i++) {
+ child = items[i].firstChild && items[i].firstChild.firstChild;
+ if(child.tagName && child.tagName.toLowerCase() == 'img' && domUtils.hasClass(items[i], 'selected')) {
+ src = child.src;
+ list.push({
+ src: src,
+ _src: src,
+ alt: src.substr(src.lastIndexOf('/') + 1),
+ floatStyle: align
+ });
+ }
+ }
+ return list;
+ }
+ };
+
+})();
diff --git a/public/static/admin_static/lib/ueditor/dialogs/image/images/alignicon.jpg b/public/static/admin_static/lib/ueditor/dialogs/image/images/alignicon.jpg
new file mode 100644
index 0000000..754755b
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/image/images/alignicon.jpg differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/image/images/bg.png b/public/static/admin_static/lib/ueditor/dialogs/image/images/bg.png
new file mode 100644
index 0000000..580be0a
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/image/images/bg.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/image/images/icons.gif b/public/static/admin_static/lib/ueditor/dialogs/image/images/icons.gif
new file mode 100644
index 0000000..78459de
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/image/images/icons.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/image/images/icons.png b/public/static/admin_static/lib/ueditor/dialogs/image/images/icons.png
new file mode 100644
index 0000000..12e4700
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/image/images/icons.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/image/images/image.png b/public/static/admin_static/lib/ueditor/dialogs/image/images/image.png
new file mode 100644
index 0000000..19699f6
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/image/images/image.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/image/images/progress.png b/public/static/admin_static/lib/ueditor/dialogs/image/images/progress.png
new file mode 100644
index 0000000..717c486
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/image/images/progress.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/image/images/success.gif b/public/static/admin_static/lib/ueditor/dialogs/image/images/success.gif
new file mode 100644
index 0000000..8d4f311
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/image/images/success.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/image/images/success.png b/public/static/admin_static/lib/ueditor/dialogs/image/images/success.png
new file mode 100644
index 0000000..94f968d
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/image/images/success.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/insertframe/insertframe.html b/public/static/admin_static/lib/ueditor/dialogs/insertframe/insertframe.html
new file mode 100644
index 0000000..7f1f3e9
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/insertframe/insertframe.html
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/internal.js b/public/static/admin_static/lib/ueditor/dialogs/internal.js
new file mode 100644
index 0000000..44dc17f
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/internal.js
@@ -0,0 +1,81 @@
+(function () {
+ var parent = window.parent;
+ //dialog对象
+ dialog = parent.$EDITORUI[window.frameElement.id.replace( /_iframe$/, '' )];
+ //当前打开dialog的编辑器实例
+ editor = dialog.editor;
+
+ UE = parent.UE;
+
+ domUtils = UE.dom.domUtils;
+
+ utils = UE.utils;
+
+ browser = UE.browser;
+
+ ajax = UE.ajax;
+
+ $G = function ( id ) {
+ return document.getElementById( id )
+ };
+ //focus元素
+ $focus = function ( node ) {
+ setTimeout( function () {
+ if ( browser.ie ) {
+ var r = node.createTextRange();
+ r.collapse( false );
+ r.select();
+ } else {
+ node.focus()
+ }
+ }, 0 )
+ };
+ utils.loadFile(document,{
+ href:editor.options.themePath + editor.options.theme + "/dialogbase.css?cache="+Math.random(),
+ tag:"link",
+ type:"text/css",
+ rel:"stylesheet"
+ });
+ lang = editor.getLang(dialog.className.split( "-" )[2]);
+ if(lang){
+ domUtils.on(window,'load',function () {
+
+ var langImgPath = editor.options.langPath + editor.options.lang + "/images/";
+ //针对静态资源
+ for ( var i in lang["static"] ) {
+ var dom = $G( i );
+ if(!dom) continue;
+ var tagName = dom.tagName,
+ content = lang["static"][i];
+ if(content.src){
+ //clone
+ content = utils.extend({},content,false);
+ content.src = langImgPath + content.src;
+ }
+ if(content.style){
+ content = utils.extend({},content,false);
+ content.style = content.style.replace(/url\s*\(/g,"url(" + langImgPath)
+ }
+ switch ( tagName.toLowerCase() ) {
+ case "var":
+ dom.parentNode.replaceChild( document.createTextNode( content ), dom );
+ break;
+ case "select":
+ var ops = dom.options;
+ for ( var j = 0, oj; oj = ops[j]; ) {
+ oj.innerHTML = content.options[j++];
+ }
+ for ( var p in content ) {
+ p != "options" && dom.setAttribute( p, content[p] );
+ }
+ break;
+ default :
+ domUtils.setAttributes( dom, content);
+ }
+ }
+ } );
+ }
+
+
+})();
+
diff --git a/public/static/admin_static/lib/ueditor/dialogs/link/link.html b/public/static/admin_static/lib/ueditor/dialogs/link/link.html
new file mode 100644
index 0000000..55ab4d1
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/link/link.html
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/static/admin_static/lib/ueditor/dialogs/map/map.html b/public/static/admin_static/lib/ueditor/dialogs/map/map.html
new file mode 100644
index 0000000..e763b8e
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/map/map.html
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/static/admin_static/lib/ueditor/dialogs/map/show.html b/public/static/admin_static/lib/ueditor/dialogs/map/show.html
new file mode 100644
index 0000000..329cfeb
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/map/show.html
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
百度地图API自定义地图
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/music/music.css b/public/static/admin_static/lib/ueditor/dialogs/music/music.css
new file mode 100644
index 0000000..8fb7a94
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/music/music.css
@@ -0,0 +1,30 @@
+.wrapper{margin: 5px 10px;}
+
+.searchBar{height:30px;padding:7px 0 3px;text-align:center;}
+.searchBtn{font-size:13px;height:24px;}
+
+.resultBar{width:460px;margin:5px auto;border: 1px solid #CCC;border-radius: 5px;box-shadow: 2px 2px 5px #D3D6DA;overflow: hidden;}
+
+.listPanel{overflow: hidden;}
+.panelon{display:block;}
+.paneloff{display:none}
+
+.page{width:220px;margin:20px auto;overflow: hidden;}
+.pageon{float:right;width:24px;line-height:24px;height:24px;margin-right: 5px;background: none;border: none;color: #000;font-weight: bold;text-align:center}
+.pageoff{float:right;width:24px;line-height:24px;height:24px;cursor:pointer;background-color: #fff;
+ border: 1px solid #E7ECF0;color: #2D64B3;margin-right: 5px;text-decoration: none;text-align:center;}
+
+.m-box{width:460px;}
+.m-m{float: left;line-height: 20px;height: 20px;}
+.m-h{height:24px;line-height:24px;padding-left: 46px;background-color:#FAFAFA;border-bottom: 1px solid #DAD8D8;font-weight: bold;font-size: 12px;color: #333;}
+.m-l{float:left;width:40px; }
+.m-t{float:left;width:140px;}
+.m-s{float:left;width:110px;}
+.m-z{float:left;width:100px;}
+.m-try-t{float: left;width: 60px;;}
+
+.m-try{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/try_music.gif') no-repeat ;}
+.m-trying{float:left;width:20px;height:20px;background:url('http://static.tieba.baidu.com/tb/editor/images/stop_music.gif') no-repeat ;}
+
+.loading{width:95px;height:7px;font-size:7px;margin:60px auto;background:url(http://static.tieba.baidu.com/tb/editor/images/loading.gif) no-repeat}
+.empty{width:300px;height:40px;padding:2px;margin:50px auto;line-height:40px; color:#006699;text-align:center;}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/music/music.html b/public/static/admin_static/lib/ueditor/dialogs/music/music.html
new file mode 100644
index 0000000..e7ef04f
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/music/music.html
@@ -0,0 +1,32 @@
+
+
+
+
+
插入音乐
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/music/music.js b/public/static/admin_static/lib/ueditor/dialogs/music/music.js
new file mode 100644
index 0000000..1c538bf
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/music/music.js
@@ -0,0 +1,192 @@
+function Music() {
+ this.init();
+}
+(function () {
+ var pages = [],
+ panels = [],
+ selectedItem = null;
+ Music.prototype = {
+ total:70,
+ pageSize:10,
+ dataUrl:"http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.search.common",
+ playerUrl:"http://box.baidu.com/widget/flash/bdspacesong.swf",
+
+ init:function () {
+ var me = this;
+ domUtils.on($G("J_searchName"), "keyup", function (event) {
+ var e = window.event || event;
+ if (e.keyCode == 13) {
+ me.dosearch();
+ }
+ });
+ domUtils.on($G("J_searchBtn"), "click", function () {
+ me.dosearch();
+ });
+ },
+ callback:function (data) {
+ var me = this;
+ me.data = data.song_list;
+ setTimeout(function () {
+ $G('J_resultBar').innerHTML = me._renderTemplate(data.song_list);
+ }, 300);
+ },
+ dosearch:function () {
+ var me = this;
+ selectedItem = null;
+ var key = $G('J_searchName').value;
+ if (utils.trim(key) == "")return false;
+ key = encodeURIComponent(key);
+ me._sent(key);
+ },
+ doselect:function (i) {
+ var me = this;
+ if (typeof i == 'object') {
+ selectedItem = i;
+ } else if (typeof i == 'number') {
+ selectedItem = me.data[i];
+ }
+ },
+ onpageclick:function (id) {
+ var me = this;
+ for (var i = 0; i < pages.length; i++) {
+ $G(pages[i]).className = 'pageoff';
+ $G(panels[i]).className = 'paneloff';
+ }
+ $G('page' + id).className = 'pageon';
+ $G('panel' + id).className = 'panelon';
+ },
+ listenTest:function (elem) {
+ var me = this,
+ view = $G('J_preview'),
+ is_play_action = (elem.className == 'm-try'),
+ old_trying = me._getTryingElem();
+
+ if (old_trying) {
+ old_trying.className = 'm-try';
+ view.innerHTML = '';
+ }
+ if (is_play_action) {
+ elem.className = 'm-trying';
+ view.innerHTML = me._buildMusicHtml(me._getUrl(true));
+ }
+ },
+ _sent:function (param) {
+ var me = this;
+ $G('J_resultBar').innerHTML = '
';
+
+ utils.loadFile(document, {
+ src:me.dataUrl + '&query=' + param + '&page_size=' + me.total + '&callback=music.callback&.r=' + Math.random(),
+ tag:"script",
+ type:"text/javascript",
+ defer:"defer"
+ });
+ },
+ _removeHtml:function (str) {
+ var reg = /<\s*\/?\s*[^>]*\s*>/gi;
+ return str.replace(reg, "");
+ },
+ _getUrl:function (isTryListen) {
+ var me = this;
+ var param = 'from=tiebasongwidget&url=&name=' + encodeURIComponent(me._removeHtml(selectedItem.title)) + '&artist='
+ + encodeURIComponent(me._removeHtml(selectedItem.author)) + '&extra='
+ + encodeURIComponent(me._removeHtml(selectedItem.album_title))
+ + '&autoPlay='+isTryListen+'' + '&loop=true';
+ return me.playerUrl + "?" + param;
+ },
+ _getTryingElem:function () {
+ var s = $G('J_listPanel').getElementsByTagName('span');
+
+ for (var i = 0; i < s.length; i++) {
+ if (s[i].className == 'm-trying')
+ return s[i];
+ }
+ return null;
+ },
+ _buildMusicHtml:function (playerUrl) {
+ var html = '
';
+ return html;
+ },
+ _byteLength:function (str) {
+ return str.replace(/[^\u0000-\u007f]/g, "\u0061\u0061").length;
+ },
+ _getMaxText:function (s) {
+ var me = this;
+ s = me._removeHtml(s);
+ if (me._byteLength(s) > 12)
+ return s.substring(0, 5) + '...';
+ if (!s) s = " ";
+ return s;
+ },
+ _rebuildData:function (data) {
+ var me = this,
+ newData = [],
+ d = me.pageSize,
+ itembox;
+ for (var i = 0; i < data.length; i++) {
+ if ((i + d) % d == 0) {
+ itembox = [];
+ newData.push(itembox)
+ }
+ itembox.push(data[i]);
+ }
+ return newData;
+ },
+ _renderTemplate:function (data) {
+ var me = this;
+ if (data.length == 0)return '' + lang.emptyTxt + '
';
+ data = me._rebuildData(data);
+ var s = [], p = [], t = [];
+ s.push('');
+ p.push('
');
+ for (var i = 0, tmpList; tmpList = data[i++];) {
+ panels.push('panel' + i);
+ pages.push('page' + i);
+ if (i == 1) {
+ s.push('
');
+ if (data.length != 1) {
+ t.push('
' + (i ) + '
');
+ }
+ } else {
+ s.push('
');
+ t.push('
' + (i ) + '
');
+ }
+ s.push('
');
+ s.push('
' + lang.chapter + ' ' + lang.singer
+ + ' ' + lang.special + ' ' + lang.listenTest + '
');
+ for (var j = 0, tmpObj; tmpObj = tmpList[j++];) {
+ s.push('
');
+ s.push(' ');
+ s.push('' + me._getMaxText(tmpObj.title) + ' ');
+ s.push('' + me._getMaxText(tmpObj.author) + ' ');
+ s.push('' + me._getMaxText(tmpObj.album_title) + ' ');
+ s.push(' ');
+ s.push(' ');
+ }
+ s.push('
');
+ s.push('
');
+ }
+ t.reverse();
+ p.push(t.join(''));
+ s.push('
');
+ p.push('
');
+ return s.join('') + p.join('');
+ },
+ exec:function () {
+ var me = this;
+ if (selectedItem == null) return;
+ $G('J_preview').innerHTML = "";
+ editor.execCommand('music', {
+ url:me._getUrl(false),
+ width:400,
+ height:95
+ });
+ }
+ };
+})();
+
+
+
diff --git a/public/static/admin_static/lib/ueditor/dialogs/preview/preview.html b/public/static/admin_static/lib/ueditor/dialogs/preview/preview.html
new file mode 100644
index 0000000..f6b433b
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/preview/preview.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/addimg.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/addimg.png
new file mode 100644
index 0000000..03a8713
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/addimg.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/brush.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/brush.png
new file mode 100644
index 0000000..efa6fdb
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/brush.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/delimg.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/delimg.png
new file mode 100644
index 0000000..5a892e4
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/delimg.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/delimgH.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/delimgH.png
new file mode 100644
index 0000000..2f0c5c9
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/delimgH.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/empty.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/empty.png
new file mode 100644
index 0000000..0375196
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/empty.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/emptyH.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/emptyH.png
new file mode 100644
index 0000000..838ca72
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/emptyH.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/eraser.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/eraser.png
new file mode 100644
index 0000000..63e87ce
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/eraser.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/redo.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/redo.png
new file mode 100644
index 0000000..12cd9bb
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/redo.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/redoH.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/redoH.png
new file mode 100644
index 0000000..d9f33d3
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/redoH.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/scale.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/scale.png
new file mode 100644
index 0000000..935a3f3
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/scale.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/scaleH.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/scaleH.png
new file mode 100644
index 0000000..72e64a9
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/scaleH.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/size.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/size.png
new file mode 100644
index 0000000..8366845
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/size.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/undo.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/undo.png
new file mode 100644
index 0000000..084c7cc
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/undo.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/undoH.png b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/undoH.png
new file mode 100644
index 0000000..fde7eb3
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/scrawl/images/undoH.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/scrawl.css b/public/static/admin_static/lib/ueditor/dialogs/scrawl/scrawl.css
new file mode 100644
index 0000000..b18430d
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/scrawl/scrawl.css
@@ -0,0 +1,72 @@
+/*common
+*/
+body{margin: 0;}
+table{width:100%;}
+table td{padding:2px 4px;vertical-align: middle;}
+a{text-decoration: none;}
+em{font-style: normal;}
+.border_style1{border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}
+/*module
+*/
+.main{margin: 8px;overflow: hidden;}
+
+.hot{float:left;height:335px;}
+.drawBoard{position: relative; cursor: crosshair;}
+.brushBorad{position: absolute;left:0;top:0;z-index: 998;}
+.picBoard{border: none;text-align: center;line-height: 300px;cursor: default;}
+.operateBar{margin-top:10px;font-size:12px;text-align: center;}
+.operateBar span{margin-left: 10px;}
+
+.drawToolbar{float:right;width:110px;height:300px;overflow: hidden;}
+.colorBar{margin-top:10px;font-size: 12px;text-align: center;}
+.colorBar a{display:block;width: 10px;height: 10px;border:1px solid #1006F1;border-radius: 3px; box-shadow:2px 2px 5px #d3d6da;opacity: 0.3}
+.sectionBar{margin-top:15px;font-size: 12px;text-align: center;}
+.sectionBar a{display:inline-block;width:10px;height:12px;color: #888;text-indent: -999px;opacity: 0.3}
+.size1{background: url('images/size.png') 1px center no-repeat ;}
+.size2{background: url('images/size.png') -10px center no-repeat;}
+.size3{background: url('images/size.png') -22px center no-repeat;}
+.size4{background: url('images/size.png') -35px center no-repeat;}
+
+.addImgH{position: relative;}
+.addImgH_form{position: absolute;left: 18px;top: -1px;width: 75px;height: 21px;opacity: 0;cursor: pointer;}
+.addImgH_form input{width: 100%;}
+/*scrawl遮罩层
+*/
+.maskLayerNull{display: none;}
+.maskLayer{position: absolute;top:0;left:0;width: 100%; height: 100%;opacity: 0.7;
+ background-color: #fff;text-align:center;font-weight:bold;line-height:300px;z-index: 1000;}
+/*btn state
+*/
+.previousStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undoH.png');cursor: pointer;}
+.previousStepH .text{color:#888;cursor:pointer;}
+.previousStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undo.png');cursor:default;}
+.previousStep .text{color:#ccc;cursor:default;}
+
+.nextStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redoH.png');cursor: pointer;}
+.nextStepH .text{color:#888;cursor:pointer;}
+.nextStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redo.png');cursor:default;}
+.nextStep .text{color:#ccc;cursor:default;}
+
+.clearBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/emptyH.png');cursor: pointer;}
+.clearBoardH .text{color:#888;cursor:pointer;}
+.clearBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/empty.png');cursor:default;}
+.clearBoard .text{color:#ccc;cursor:default;}
+
+.scaleBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scaleH.png');cursor: pointer;}
+.scaleBoardH .text{color:#888;cursor:pointer;}
+.scaleBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scale.png');cursor:default;}
+.scaleBoard .text{color:#ccc;cursor:default;}
+
+.removeImgH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimgH.png');cursor: pointer;}
+.removeImgH .text{color:#888;cursor:pointer;}
+.removeImg .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimg.png');cursor:default;}
+.removeImg .text{color:#ccc;cursor:default;}
+
+.addImgH .icon{vertical-align:top;display: inline-block;width:16px;height:16px;background-image: url('images/addimg.png')}
+.addImgH .text{color:#888;cursor:pointer;}
+/*icon
+*/
+.brushIcon{display: inline-block;width:16px;height:16px;background-image: url('images/brush.png')}
+.eraserIcon{display: inline-block;width:16px;height:16px;background-image: url('images/eraser.png')}
+
+
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/scrawl.html b/public/static/admin_static/lib/ueditor/dialogs/scrawl/scrawl.html
new file mode 100644
index 0000000..9371abd
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/scrawl/scrawl.html
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/scrawl/scrawl.js b/public/static/admin_static/lib/ueditor/dialogs/scrawl/scrawl.js
new file mode 100644
index 0000000..e0c005e
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/scrawl/scrawl.js
@@ -0,0 +1,671 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: xuheng
+ * Date: 12-5-22
+ * Time: 上午11:38
+ * To change this template use File | Settings | File Templates.
+ */
+var scrawl = function (options) {
+ options && this.initOptions(options);
+};
+(function () {
+ var canvas = $G("J_brushBoard"),
+ context = canvas.getContext('2d'),
+ drawStep = [], //undo redo存储
+ drawStepIndex = 0; //undo redo指针
+
+ scrawl.prototype = {
+ isScrawl:false, //是否涂鸦
+ brushWidth:-1, //画笔粗细
+ brushColor:"", //画笔颜色
+
+ initOptions:function (options) {
+ var me = this;
+ me.originalState(options);//初始页面状态
+ me._buildToolbarColor(options.colorList);//动态生成颜色选择集合
+
+ me._addBoardListener(options.saveNum);//添加画板处理
+ me._addOPerateListener(options.saveNum);//添加undo redo clearBoard处理
+ me._addColorBarListener();//添加颜色选择处理
+ me._addBrushBarListener();//添加画笔大小处理
+ me._addEraserBarListener();//添加橡皮大小处理
+ me._addAddImgListener();//添加增添背景图片处理
+ me._addRemoveImgListenter();//删除背景图片处理
+ me._addScalePicListenter();//添加缩放处理
+ me._addClearSelectionListenter();//添加清楚选中状态处理
+
+ me._originalColorSelect(options.drawBrushColor);//初始化颜色选中
+ me._originalBrushSelect(options.drawBrushSize);//初始化画笔选中
+ me._clearSelection();//清楚选中状态
+ },
+
+ originalState:function (options) {
+ var me = this;
+
+ me.brushWidth = options.drawBrushSize;//同步画笔粗细
+ me.brushColor = options.drawBrushColor;//同步画笔颜色
+
+ context.lineWidth = me.brushWidth;//初始画笔大小
+ context.strokeStyle = me.brushColor;//初始画笔颜色
+ context.fillStyle = "transparent";//初始画布背景颜色
+ context.lineCap = "round";//去除锯齿
+ context.fill();
+ },
+ _buildToolbarColor:function (colorList) {
+ var tmp = null, arr = [];
+ arr.push("
");
+ for (var i = 0, color; color = colorList[i++];) {
+ if ((i - 1) % 5 == 0) {
+ if (i != 1) {
+ arr.push("");
+ }
+ arr.push("");
+ }
+ tmp = '#' + color;
+ arr.push(" ");
+ }
+ arr.push("
");
+ $G("J_colorBar").innerHTML = arr.join("");
+ },
+
+ _addBoardListener:function (saveNum) {
+ var me = this,
+ margin = 0,
+ startX = -1,
+ startY = -1,
+ isMouseDown = false,
+ isMouseMove = false,
+ isMouseUp = false,
+ buttonPress = 0, button, flag = '';
+
+ margin = parseInt(domUtils.getComputedStyle($G("J_wrap"), "margin-left"));
+ drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));
+ drawStepIndex += 1;
+
+ domUtils.on(canvas, ["mousedown", "mousemove", "mouseup", "mouseout"], function (e) {
+ button = browser.webkit ? e.which : buttonPress;
+ switch (e.type) {
+ case 'mousedown':
+ buttonPress = 1;
+ flag = 1;
+ isMouseDown = true;
+ isMouseUp = false;
+ isMouseMove = false;
+ me.isScrawl = true;
+ startX = e.clientX - margin;//10为外边距总和
+ startY = e.clientY - margin;
+ context.beginPath();
+ break;
+ case 'mousemove' :
+ if (!flag && button == 0) {
+ return;
+ }
+ if (!flag && button) {
+ startX = e.clientX - margin;//10为外边距总和
+ startY = e.clientY - margin;
+ context.beginPath();
+ flag = 1;
+ }
+ if (isMouseUp || !isMouseDown) {
+ return;
+ }
+ var endX = e.clientX - margin,
+ endY = e.clientY - margin;
+
+ context.moveTo(startX, startY);
+ context.lineTo(endX, endY);
+ context.stroke();
+ startX = endX;
+ startY = endY;
+ isMouseMove = true;
+ break;
+ case 'mouseup':
+ buttonPress = 0;
+ if (!isMouseDown)return;
+ if (!isMouseMove) {
+ context.arc(startX, startY, context.lineWidth, 0, Math.PI * 2, false);
+ context.fillStyle = context.strokeStyle;
+ context.fill();
+ }
+ context.closePath();
+ me._saveOPerate(saveNum);
+ isMouseDown = false;
+ isMouseMove = false;
+ isMouseUp = true;
+ startX = -1;
+ startY = -1;
+ break;
+ case 'mouseout':
+ flag = '';
+ buttonPress = 0;
+ if (button == 1) return;
+ context.closePath();
+ break;
+ }
+ });
+ },
+ _addOPerateListener:function (saveNum) {
+ var me = this;
+ domUtils.on($G("J_previousStep"), "click", function () {
+ if (drawStepIndex > 1) {
+ drawStepIndex -= 1;
+ context.clearRect(0, 0, context.canvas.width, context.canvas.height);
+ context.putImageData(drawStep[drawStepIndex - 1], 0, 0);
+ me.btn2Highlight("J_nextStep");
+ drawStepIndex == 1 && me.btn2disable("J_previousStep");
+ }
+ });
+ domUtils.on($G("J_nextStep"), "click", function () {
+ if (drawStepIndex > 0 && drawStepIndex < drawStep.length) {
+ context.clearRect(0, 0, context.canvas.width, context.canvas.height);
+ context.putImageData(drawStep[drawStepIndex], 0, 0);
+ drawStepIndex += 1;
+ me.btn2Highlight("J_previousStep");
+ drawStepIndex == drawStep.length && me.btn2disable("J_nextStep");
+ }
+ });
+ domUtils.on($G("J_clearBoard"), "click", function () {
+ context.clearRect(0, 0, context.canvas.width, context.canvas.height);
+ drawStep = [];
+ me._saveOPerate(saveNum);
+ drawStepIndex = 1;
+ me.isScrawl = false;
+ me.btn2disable("J_previousStep");
+ me.btn2disable("J_nextStep");
+ me.btn2disable("J_clearBoard");
+ });
+ },
+ _addColorBarListener:function () {
+ var me = this;
+ domUtils.on($G("J_colorBar"), "click", function (e) {
+ var target = me.getTarget(e),
+ color = target.title;
+ if (!!color) {
+ me._addColorSelect(target);
+
+ me.brushColor = color;
+ context.globalCompositeOperation = "source-over";
+ context.lineWidth = me.brushWidth;
+ context.strokeStyle = color;
+ }
+ });
+ },
+ _addBrushBarListener:function () {
+ var me = this;
+ domUtils.on($G("J_brushBar"), "click", function (e) {
+ var target = me.getTarget(e),
+ size = browser.ie ? target.innerText : target.text;
+ if (!!size) {
+ me._addBESelect(target);
+
+ context.globalCompositeOperation = "source-over";
+ context.lineWidth = parseInt(size);
+ context.strokeStyle = me.brushColor;
+ me.brushWidth = context.lineWidth;
+ }
+ });
+ },
+ _addEraserBarListener:function () {
+ var me = this;
+ domUtils.on($G("J_eraserBar"), "click", function (e) {
+ var target = me.getTarget(e),
+ size = browser.ie ? target.innerText : target.text;
+ if (!!size) {
+ me._addBESelect(target);
+
+ context.lineWidth = parseInt(size);
+ context.globalCompositeOperation = "destination-out";
+ context.strokeStyle = "#FFF";
+ }
+ });
+ },
+ _addAddImgListener:function () {
+ var file = $G("J_imgTxt");
+ if (!window.FileReader) {
+ $G("J_addImg").style.display = 'none';
+ $G("J_removeImg").style.display = 'none';
+ $G("J_sacleBoard").style.display = 'none';
+ }
+ domUtils.on(file, "change", function (e) {
+ var frm = file.parentNode;
+ addMaskLayer(lang.backgroundUploading);
+
+ var target = e.target || e.srcElement,
+ reader = new FileReader();
+ reader.onload = function(evt){
+ var target = evt.target || evt.srcElement;
+ ue_callback(target.result, 'SUCCESS');
+ };
+ reader.readAsDataURL(target.files[0]);
+ frm.reset();
+ });
+ },
+ _addRemoveImgListenter:function () {
+ var me = this;
+ domUtils.on($G("J_removeImg"), "click", function () {
+ $G("J_picBoard").innerHTML = "";
+ me.btn2disable("J_removeImg");
+ me.btn2disable("J_sacleBoard");
+ });
+ },
+ _addScalePicListenter:function () {
+ domUtils.on($G("J_sacleBoard"), "click", function () {
+ var picBoard = $G("J_picBoard"),
+ scaleCon = $G("J_scaleCon"),
+ img = picBoard.children[0];
+
+ if (img) {
+ if (!scaleCon) {
+ picBoard.style.cssText = "position:relative;z-index:999;"+picBoard.style.cssText;
+ img.style.cssText = "position: absolute;top:" + (canvas.height - img.height) / 2 + "px;left:" + (canvas.width - img.width) / 2 + "px;";
+ var scale = new ScaleBoy();
+ picBoard.appendChild(scale.init());
+ scale.startScale(img);
+ } else {
+ if (scaleCon.style.visibility == "visible") {
+ scaleCon.style.visibility = "hidden";
+ picBoard.style.position = "";
+ picBoard.style.zIndex = "";
+ } else {
+ scaleCon.style.visibility = "visible";
+ picBoard.style.cssText += "position:relative;z-index:999";
+ }
+ }
+ }
+ });
+ },
+ _addClearSelectionListenter:function () {
+ var doc = document;
+ domUtils.on(doc, 'mousemove', function (e) {
+ if (browser.ie && browser.version < 11)
+ doc.selection.clear();
+ else
+ window.getSelection().removeAllRanges();
+ });
+ },
+ _clearSelection:function () {
+ var list = ["J_operateBar", "J_colorBar", "J_brushBar", "J_eraserBar", "J_picBoard"];
+ for (var i = 0, group; group = list[i++];) {
+ domUtils.unSelectable($G(group));
+ }
+ },
+
+ _saveOPerate:function (saveNum) {
+ var me = this;
+ if (drawStep.length <= saveNum) {
+ if(drawStepIndex
");
+ }
+ scale.innerHTML = arr.join("");
+ return scale;
+ }
+
+ var rect = [
+ //[left, top, width, height]
+ [1, 1, -1, -1],
+ [0, 1, 0, -1],
+ [0, 1, 1, -1],
+ [1, 0, -1, 0],
+ [0, 0, 1, 0],
+ [1, 0, -1, 1],
+ [0, 0, 0, 1],
+ [0, 0, 1, 1]
+ ];
+ ScaleBoy.prototype = {
+ init:function () {
+ _appendStyle();
+ var me = this,
+ scale = me.dom = _getDom();
+
+ me.scaleMousemove.fp = me;
+ domUtils.on(scale, 'mousedown', function (e) {
+ var target = e.target || e.srcElement;
+ me.start = {x:e.clientX, y:e.clientY};
+ if (target.className.indexOf('hand') != -1) {
+ me.dir = target.className.replace('hand', '');
+ }
+ domUtils.on(document.body, 'mousemove', me.scaleMousemove);
+ e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;
+ });
+ domUtils.on(document.body, 'mouseup', function (e) {
+ if (me.start) {
+ domUtils.un(document.body, 'mousemove', me.scaleMousemove);
+ if (me.moved) {
+ me.updateScaledElement({position:{x:scale.style.left, y:scale.style.top}, size:{w:scale.style.width, h:scale.style.height}});
+ }
+ delete me.start;
+ delete me.moved;
+ delete me.dir;
+ }
+ });
+ return scale;
+ },
+ startScale:function (objElement) {
+ var me = this, Idom = me.dom;
+
+ Idom.style.cssText = 'visibility:visible;top:' + objElement.style.top + ';left:' + objElement.style.left + ';width:' + objElement.offsetWidth + 'px;height:' + objElement.offsetHeight + 'px;';
+ me.scalingElement = objElement;
+ },
+ updateScaledElement:function (objStyle) {
+ var cur = this.scalingElement,
+ pos = objStyle.position,
+ size = objStyle.size;
+ if (pos) {
+ typeof pos.x != 'undefined' && (cur.style.left = pos.x);
+ typeof pos.y != 'undefined' && (cur.style.top = pos.y);
+ }
+ if (size) {
+ size.w && (cur.style.width = size.w);
+ size.h && (cur.style.height = size.h);
+ }
+ },
+ updateStyleByDir:function (dir, offset) {
+ var me = this,
+ dom = me.dom, tmp;
+
+ rect['def'] = [1, 1, 0, 0];
+ if (rect[dir][0] != 0) {
+ tmp = parseInt(dom.style.left) + offset.x;
+ dom.style.left = me._validScaledProp('left', tmp) + 'px';
+ }
+ if (rect[dir][1] != 0) {
+ tmp = parseInt(dom.style.top) + offset.y;
+ dom.style.top = me._validScaledProp('top', tmp) + 'px';
+ }
+ if (rect[dir][2] != 0) {
+ tmp = dom.clientWidth + rect[dir][2] * offset.x;
+ dom.style.width = me._validScaledProp('width', tmp) + 'px';
+ }
+ if (rect[dir][3] != 0) {
+ tmp = dom.clientHeight + rect[dir][3] * offset.y;
+ dom.style.height = me._validScaledProp('height', tmp) + 'px';
+ }
+ if (dir === 'def') {
+ me.updateScaledElement({position:{x:dom.style.left, y:dom.style.top}});
+ }
+ },
+ scaleMousemove:function (e) {
+ var me = arguments.callee.fp,
+ start = me.start,
+ dir = me.dir || 'def',
+ offset = {x:e.clientX - start.x, y:e.clientY - start.y};
+
+ me.updateStyleByDir(dir, offset);
+ arguments.callee.fp.start = {x:e.clientX, y:e.clientY};
+ arguments.callee.fp.moved = 1;
+ },
+ _validScaledProp:function (prop, value) {
+ var ele = this.dom,
+ wrap = $G("J_picBoard");
+
+ value = isNaN(value) ? 0 : value;
+ switch (prop) {
+ case 'left':
+ return value < 0 ? 0 : (value + ele.clientWidth) > wrap.clientWidth ? wrap.clientWidth - ele.clientWidth : value;
+ case 'top':
+ return value < 0 ? 0 : (value + ele.clientHeight) > wrap.clientHeight ? wrap.clientHeight - ele.clientHeight : value;
+ case 'width':
+ return value <= 0 ? 1 : (value + ele.offsetLeft) > wrap.clientWidth ? wrap.clientWidth - ele.offsetLeft : value;
+ case 'height':
+ return value <= 0 ? 1 : (value + ele.offsetTop) > wrap.clientHeight ? wrap.clientHeight - ele.offsetTop : value;
+ }
+ }
+ };
+})();
+
+//后台回调
+function ue_callback(url, state) {
+ var doc = document,
+ picBorard = $G("J_picBoard"),
+ img = doc.createElement("img");
+
+ //图片缩放
+ function scale(img, max, oWidth, oHeight) {
+ var width = 0, height = 0, percent, ow = img.width || oWidth, oh = img.height || oHeight;
+ if (ow > max || oh > max) {
+ if (ow >= oh) {
+ if (width = ow - max) {
+ percent = (width / ow).toFixed(2);
+ img.height = oh - oh * percent;
+ img.width = max;
+ }
+ } else {
+ if (height = oh - max) {
+ percent = (height / oh).toFixed(2);
+ img.width = ow - ow * percent;
+ img.height = max;
+ }
+ }
+ }
+ }
+
+ //移除遮罩层
+ removeMaskLayer();
+ //状态响应
+ if (state == "SUCCESS") {
+ picBorard.innerHTML = "";
+ img.onload = function () {
+ scale(this, 300);
+ picBorard.appendChild(img);
+
+ var obj = new scrawl();
+ obj.btn2Highlight("J_removeImg");
+ //trace 2457
+ obj.btn2Highlight("J_sacleBoard");
+ };
+ img.src = url;
+ } else {
+ alert(state);
+ }
+}
+//去掉遮罩层
+function removeMaskLayer() {
+ var maskLayer = $G("J_maskLayer");
+ maskLayer.className = "maskLayerNull";
+ maskLayer.innerHTML = "";
+ dialog.buttons[0].setDisabled(false);
+}
+//添加遮罩层
+function addMaskLayer(html) {
+ var maskLayer = $G("J_maskLayer");
+ dialog.buttons[0].setDisabled(true);
+ maskLayer.className = "maskLayer";
+ maskLayer.innerHTML = html;
+}
+//执行确认按钮方法
+function exec(scrawlObj) {
+ if (scrawlObj.isScrawl) {
+ addMaskLayer(lang.scrawlUpLoading);
+ var base64 = scrawlObj.getCanvasData();
+ if (!!base64) {
+ var options = {
+ timeout:100000,
+ onsuccess:function (xhr) {
+ if (!scrawlObj.isCancelScrawl) {
+ var responseObj;
+ responseObj = eval("(" + xhr.responseText + ")");
+ if (responseObj.state == "SUCCESS") {
+ var imgObj = {},
+ url = editor.options.scrawlUrlPrefix + responseObj.url;
+ imgObj.src = url;
+ imgObj._src = url;
+ imgObj.alt = responseObj.original || '';
+ imgObj.title = responseObj.title || '';
+ editor.execCommand("insertImage", imgObj);
+ dialog.close();
+ } else {
+ alert(responseObj.state);
+ }
+
+ }
+ },
+ onerror:function () {
+ alert(lang.imageError);
+ dialog.close();
+ }
+ };
+ options[editor.getOpt('scrawlFieldName')] = base64;
+
+ var actionUrl = editor.getActionUrl(editor.getOpt('scrawlActionName')),
+ params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',
+ url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + params);
+ ajax.request(url, options);
+ }
+ } else {
+ addMaskLayer(lang.noScarwl + " ");
+ }
+}
+
diff --git a/public/static/admin_static/lib/ueditor/dialogs/searchreplace/searchreplace.html b/public/static/admin_static/lib/ueditor/dialogs/searchreplace/searchreplace.html
new file mode 100644
index 0000000..b91f190
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/searchreplace/searchreplace.html
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/searchreplace/searchreplace.js b/public/static/admin_static/lib/ueditor/dialogs/searchreplace/searchreplace.js
new file mode 100644
index 0000000..1b52857
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/searchreplace/searchreplace.js
@@ -0,0 +1,164 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: xuheng
+ * Date: 12-9-26
+ * Time: 下午12:29
+ * To change this template use File | Settings | File Templates.
+ */
+
+//清空上次查选的痕迹
+editor.firstForSR = 0;
+editor.currentRangeForSR = null;
+//给tab注册切换事件
+/**
+ * tab点击处理事件
+ * @param tabHeads
+ * @param tabBodys
+ * @param obj
+ */
+function clickHandler( tabHeads,tabBodys,obj ) {
+ //head样式更改
+ for ( var k = 0, len = tabHeads.length; k < len; k++ ) {
+ tabHeads[k].className = "";
+ }
+ obj.className = "focus";
+ //body显隐
+ var tabSrc = obj.getAttribute( "tabSrc" );
+ for ( var j = 0, length = tabBodys.length; j < length; j++ ) {
+ var body = tabBodys[j],
+ id = body.getAttribute( "id" );
+ if ( id != tabSrc ) {
+ body.style.zIndex = 1;
+ } else {
+ body.style.zIndex = 200;
+ }
+ }
+
+}
+
+/**
+ * TAB切换
+ * @param tabParentId tab的父节点ID或者对象本身
+ */
+function switchTab( tabParentId ) {
+ var tabElements = $G( tabParentId ).children,
+ tabHeads = tabElements[0].children,
+ tabBodys = tabElements[1].children;
+
+ for ( var i = 0, length = tabHeads.length; i < length; i++ ) {
+ var head = tabHeads[i];
+ if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head );
+ head.onclick = function () {
+ clickHandler(tabHeads,tabBodys,this);
+ }
+ }
+}
+$G('searchtab').onmousedown = function(){
+ $G('search-msg').innerHTML = '';
+ $G('replace-msg').innerHTML = ''
+}
+//是否区分大小写
+function getMatchCase(id) {
+ return $G(id).checked ? true : false;
+}
+//查找
+$G("nextFindBtn").onclick = function (txt, dir, mcase) {
+ var findtxt = $G("findtxt").value, obj;
+ if (!findtxt) {
+ return false;
+ }
+ obj = {
+ searchStr:findtxt,
+ dir:1,
+ casesensitive:getMatchCase("matchCase")
+ };
+ if (!frCommond(obj)) {
+ var bk = editor.selection.getRange().createBookmark();
+ $G('search-msg').innerHTML = lang.getEnd;
+ editor.selection.getRange().moveToBookmark(bk).select();
+
+
+ }
+};
+$G("nextReplaceBtn").onclick = function (txt, dir, mcase) {
+ var findtxt = $G("findtxt1").value, obj;
+ if (!findtxt) {
+ return false;
+ }
+ obj = {
+ searchStr:findtxt,
+ dir:1,
+ casesensitive:getMatchCase("matchCase1")
+ };
+ frCommond(obj);
+};
+$G("preFindBtn").onclick = function (txt, dir, mcase) {
+ var findtxt = $G("findtxt").value, obj;
+ if (!findtxt) {
+ return false;
+ }
+ obj = {
+ searchStr:findtxt,
+ dir:-1,
+ casesensitive:getMatchCase("matchCase")
+ };
+ if (!frCommond(obj)) {
+ $G('search-msg').innerHTML = lang.getStart;
+ }
+};
+$G("preReplaceBtn").onclick = function (txt, dir, mcase) {
+ var findtxt = $G("findtxt1").value, obj;
+ if (!findtxt) {
+ return false;
+ }
+ obj = {
+ searchStr:findtxt,
+ dir:-1,
+ casesensitive:getMatchCase("matchCase1")
+ };
+ frCommond(obj);
+};
+//替换
+$G("repalceBtn").onclick = function () {
+ var findtxt = $G("findtxt1").value.replace(/^\s|\s$/g, ""), obj,
+ replacetxt = $G("replacetxt").value.replace(/^\s|\s$/g, "");
+ if (!findtxt) {
+ return false;
+ }
+ if (findtxt == replacetxt || (!getMatchCase("matchCase1") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {
+ return false;
+ }
+ obj = {
+ searchStr:findtxt,
+ dir:1,
+ casesensitive:getMatchCase("matchCase1"),
+ replaceStr:replacetxt
+ };
+ frCommond(obj);
+};
+//全部替换
+$G("repalceAllBtn").onclick = function () {
+ var findtxt = $G("findtxt1").value.replace(/^\s|\s$/g, ""), obj,
+ replacetxt = $G("replacetxt").value.replace(/^\s|\s$/g, "");
+ if (!findtxt) {
+ return false;
+ }
+ if (findtxt == replacetxt || (!getMatchCase("matchCase1") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {
+ return false;
+ }
+ obj = {
+ searchStr:findtxt,
+ casesensitive:getMatchCase("matchCase1"),
+ replaceStr:replacetxt,
+ all:true
+ };
+ var num = frCommond(obj);
+ if (num) {
+ $G('replace-msg').innerHTML = lang.countMsg.replace("{#count}", num);
+ }
+};
+//执行
+var frCommond = function (obj) {
+ return editor.execCommand("searchreplace", obj);
+};
+switchTab("searchtab");
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/snapscreen/snapscreen.html b/public/static/admin_static/lib/ueditor/dialogs/snapscreen/snapscreen.html
new file mode 100644
index 0000000..cf8209e
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/snapscreen/snapscreen.html
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/spechars/spechars.html b/public/static/admin_static/lib/ueditor/dialogs/spechars/spechars.html
new file mode 100644
index 0000000..0b5c416
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/spechars/spechars.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/spechars/spechars.js b/public/static/admin_static/lib/ueditor/dialogs/spechars/spechars.js
new file mode 100644
index 0000000..f4c155e
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/spechars/spechars.js
@@ -0,0 +1,57 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: xuheng
+ * Date: 12-9-26
+ * Time: 下午1:09
+ * To change this template use File | Settings | File Templates.
+ */
+var charsContent = [
+ { name:"tsfh", title:lang.tsfh, content:toArray("、,。,·,ˉ,ˇ,¨,〃,々,—,~,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,$,¤,¢,£,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,¬,¦,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞")},
+ { name:"lmsz", title:lang.lmsz, content:toArray("ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ")},
+ { name:"szfh", title:lang.szfh, content:toArray("⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩")},
+ { name:"rwfh", title:lang.rwfh, content:toArray("ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ")},
+ { name:"xlzm", title:lang.xlzm, content:toArray("Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω")},
+ { name:"ewzm", title:lang.ewzm, content:toArray("А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я")},
+ { name:"pyzm", title:lang.pyzm, content:toArray("ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü")},
+ { name:"yyyb", title:lang.yyyb, content:toArray("i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,")},
+ { name:"zyzf", title:lang.zyzf, content:toArray("ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ")}
+];
+(function createTab(content) {
+ for (var i = 0, ci; ci = content[i++];) {
+ var span = document.createElement("span");
+ span.setAttribute("tabSrc", ci.name);
+ span.innerHTML = ci.title;
+ if (i == 1)span.className = "focus";
+ domUtils.on(span, "click", function () {
+ var tmps = $G("tabHeads").children;
+ for (var k = 0, sk; sk = tmps[k++];) {
+ sk.className = "";
+ }
+ tmps = $G("tabBodys").children;
+ for (var k = 0, sk; sk = tmps[k++];) {
+ sk.style.display = "none";
+ }
+ this.className = "focus";
+ $G(this.getAttribute("tabSrc")).style.display = "";
+ });
+ $G("tabHeads").appendChild(span);
+ domUtils.insertAfter(span, document.createTextNode("\n"));
+ var div = document.createElement("div");
+ div.id = ci.name;
+ div.style.display = (i == 1) ? "" : "none";
+ var cons = ci.content;
+ for (var j = 0, con; con = cons[j++];) {
+ var charSpan = document.createElement("span");
+ charSpan.innerHTML = con;
+ domUtils.on(charSpan, "click", function () {
+ editor.execCommand("insertHTML", this.innerHTML);
+ dialog.close();
+ });
+ div.appendChild(charSpan);
+ }
+ $G("tabBodys").appendChild(div);
+ }
+})(charsContent);
+function toArray(str) {
+ return str.split(",");
+}
diff --git a/public/static/admin_static/lib/ueditor/dialogs/table/dragicon.png b/public/static/admin_static/lib/ueditor/dialogs/table/dragicon.png
new file mode 100644
index 0000000..f26203b
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/table/dragicon.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/table/edittable.css b/public/static/admin_static/lib/ueditor/dialogs/table/edittable.css
new file mode 100644
index 0000000..c6f9396
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/table/edittable.css
@@ -0,0 +1,84 @@
+body{
+ overflow: hidden;
+ width: 540px;
+}
+.wrapper {
+ margin: 10px auto 0;
+ font-size: 12px;
+ overflow: hidden;
+ width: 520px;
+ height: 315px;
+}
+
+.clear {
+ clear: both;
+}
+
+.wrapper .left {
+ float: left;
+ margin-left: 10px;;
+}
+
+.wrapper .right {
+ float: right;
+ border-left: 2px dotted #EDEDED;
+ padding-left: 15px;
+}
+
+.section {
+ margin-bottom: 15px;
+ width: 240px;
+ overflow: hidden;
+}
+
+.section h3 {
+ font-weight: bold;
+ padding: 5px 0;
+ margin-bottom: 10px;
+ border-bottom: 1px solid #EDEDED;
+ font-size: 12px;
+}
+
+.section ul {
+ list-style: none;
+ overflow: hidden;
+ clear: both;
+
+}
+
+.section li {
+ float: left;
+ width: 120px;;
+}
+
+.section .tone {
+ width: 80px;;
+}
+
+.section .preview {
+ width: 220px;
+}
+
+.section .preview table {
+ text-align: center;
+ vertical-align: middle;
+ color: #666;
+}
+
+.section .preview caption {
+ font-weight: bold;
+}
+
+.section .preview td {
+ border-width: 1px;
+ border-style: solid;
+ height: 22px;
+}
+
+.section .preview th {
+ border-style: solid;
+ border-color: #DDD;
+ border-width: 2px 1px 1px 1px;
+ height: 22px;
+ background-color: #F7F7F7;
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/table/edittable.html b/public/static/admin_static/lib/ueditor/dialogs/table/edittable.html
new file mode 100644
index 0000000..3c412fb
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/table/edittable.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/table/edittable.js b/public/static/admin_static/lib/ueditor/dialogs/table/edittable.js
new file mode 100644
index 0000000..11dbee7
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/table/edittable.js
@@ -0,0 +1,237 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: xuheng
+ * Date: 12-12-19
+ * Time: 下午4:55
+ * To change this template use File | Settings | File Templates.
+ */
+(function () {
+ var title = $G("J_title"),
+ titleCol = $G("J_titleCol"),
+ caption = $G("J_caption"),
+ sorttable = $G("J_sorttable"),
+ autoSizeContent = $G("J_autoSizeContent"),
+ autoSizePage = $G("J_autoSizePage"),
+ tone = $G("J_tone"),
+ me,
+ preview = $G("J_preview");
+
+ var editTable = function () {
+ me = this;
+ me.init();
+ };
+ editTable.prototype = {
+ init:function () {
+ var colorPiker = new UE.ui.ColorPicker({
+ editor:editor
+ }),
+ colorPop = new UE.ui.Popup({
+ editor:editor,
+ content:colorPiker
+ });
+
+ title.checked = editor.queryCommandState("inserttitle") == -1;
+ titleCol.checked = editor.queryCommandState("inserttitlecol") == -1;
+ caption.checked = editor.queryCommandState("insertcaption") == -1;
+ sorttable.checked = editor.queryCommandState("enablesort") == 1;
+
+ var enablesortState = editor.queryCommandState("enablesort"),
+ disablesortState = editor.queryCommandState("disablesort");
+
+ sorttable.checked = !!(enablesortState < 0 && disablesortState >=0);
+ sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0);
+ sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg:'';
+
+ me.createTable(title.checked, titleCol.checked, caption.checked);
+ me.setAutoSize();
+ me.setColor(me.getColor());
+
+ domUtils.on(title, "click", me.titleHanler);
+ domUtils.on(titleCol, "click", me.titleColHanler);
+ domUtils.on(caption, "click", me.captionHanler);
+ domUtils.on(sorttable, "click", me.sorttableHanler);
+ domUtils.on(autoSizeContent, "click", me.autoSizeContentHanler);
+ domUtils.on(autoSizePage, "click", me.autoSizePageHanler);
+
+ domUtils.on(tone, "click", function () {
+ colorPop.showAnchor(tone);
+ });
+ domUtils.on(document, 'mousedown', function () {
+ colorPop.hide();
+ });
+ colorPiker.addListener("pickcolor", function () {
+ me.setColor(arguments[1]);
+ colorPop.hide();
+ });
+ colorPiker.addListener("picknocolor", function () {
+ me.setColor("");
+ colorPop.hide();
+ });
+ },
+
+ createTable:function (hasTitle, hasTitleCol, hasCaption) {
+ var arr = [],
+ sortSpan = '^ ';
+ arr.push("");
+ if (hasCaption) {
+ arr.push("" + lang.captionName + " ")
+ }
+ if (hasTitle) {
+ arr.push("");
+ if(hasTitleCol) { arr.push("" + lang.titleName + " "); }
+ for (var j = 0; j < 5; j++) {
+ arr.push("" + lang.titleName + " ");
+ }
+ arr.push(" ");
+ }
+ for (var i = 0; i < 6; i++) {
+ arr.push("");
+ if(hasTitleCol) { arr.push("" + lang.titleName + " ") }
+ for (var k = 0; k < 5; k++) {
+ arr.push("" + lang.cellsName + " ")
+ }
+ arr.push(" ");
+ }
+ arr.push("
");
+ preview.innerHTML = arr.join("");
+ this.updateSortSpan();
+ },
+ titleHanler:function () {
+ var example = $G("J_example"),
+ frg=document.createDocumentFragment(),
+ color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"),
+ colCount = example.rows[0].children.length;
+
+ if (title.checked) {
+ example.insertRow(0);
+ for (var i = 0, node; i < colCount; i++) {
+ node = document.createElement("th");
+ node.innerHTML = lang.titleName;
+ frg.appendChild(node);
+ }
+ example.rows[0].appendChild(frg);
+
+ } else {
+ domUtils.remove(example.rows[0]);
+ }
+ me.setColor(color);
+ me.updateSortSpan();
+ },
+ titleColHanler:function () {
+ var example = $G("J_example"),
+ color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"),
+ colArr = example.rows,
+ colCount = colArr.length;
+
+ if (titleCol.checked) {
+ for (var i = 0, node; i < colCount; i++) {
+ node = document.createElement("th");
+ node.innerHTML = lang.titleName;
+ colArr[i].insertBefore(node, colArr[i].children[0]);
+ }
+ } else {
+ for (var i = 0; i < colCount; i++) {
+ domUtils.remove(colArr[i].children[0]);
+ }
+ }
+ me.setColor(color);
+ me.updateSortSpan();
+ },
+ captionHanler:function () {
+ var example = $G("J_example");
+ if (caption.checked) {
+ var row = document.createElement('caption');
+ row.innerHTML = lang.captionName;
+ example.insertBefore(row, example.firstChild);
+ } else {
+ domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]);
+ }
+ },
+ sorttableHanler:function(){
+ me.updateSortSpan();
+ },
+ autoSizeContentHanler:function () {
+ var example = $G("J_example");
+ example.removeAttribute("width");
+ },
+ autoSizePageHanler:function () {
+ var example = $G("J_example");
+ var tds = example.getElementsByTagName(example, "td");
+ utils.each(tds, function (td) {
+ td.removeAttribute("width");
+ });
+ example.setAttribute('width', '100%');
+ },
+ updateSortSpan: function(){
+ var example = $G("J_example"),
+ row = example.rows[0];
+
+ var spans = domUtils.getElementsByTagName(example,"span");
+ utils.each(spans,function(span){
+ span.parentNode.removeChild(span);
+ });
+ if (sorttable.checked) {
+ utils.each(row.cells, function(cell, i){
+ var span = document.createElement("span");
+ span.innerHTML = "^";
+ cell.appendChild(span);
+ });
+ }
+ },
+ getColor:function () {
+ var start = editor.selection.getStart(), color,
+ cell = domUtils.findParentByTagName(start, ["td", "th", "caption"], true);
+ color = cell && domUtils.getComputedStyle(cell, "border-color");
+ if (!color) color = "#DDDDDD";
+ return color;
+ },
+ setColor:function (color) {
+ var example = $G("J_example"),
+ arr = domUtils.getElementsByTagName(example, "td").concat(
+ domUtils.getElementsByTagName(example, "th"),
+ domUtils.getElementsByTagName(example, "caption")
+ );
+
+ tone.value = color;
+ utils.each(arr, function (node) {
+ node.style.borderColor = color;
+ });
+
+ },
+ setAutoSize:function () {
+ var me = this;
+ autoSizePage.checked = true;
+ me.autoSizePageHanler();
+ }
+ };
+
+ new editTable;
+
+ dialog.onok = function () {
+ editor.__hasEnterExecCommand = true;
+
+ var checks = {
+ title:"inserttitle deletetitle",
+ titleCol:"inserttitlecol deletetitlecol",
+ caption:"insertcaption deletecaption",
+ sorttable:"enablesort disablesort"
+ };
+ editor.fireEvent('saveScene');
+ for(var i in checks){
+ var cmds = checks[i].split(" "),
+ input = $G("J_" + i);
+ if(input["checked"]){
+ editor.queryCommandState(cmds[0])!=-1 &&editor.execCommand(cmds[0]);
+ }else{
+ editor.queryCommandState(cmds[1])!=-1 &&editor.execCommand(cmds[1]);
+ }
+ }
+
+ editor.execCommand("edittable", tone.value);
+ autoSizeContent.checked ?editor.execCommand('adaptbytext') : "";
+ autoSizePage.checked ? editor.execCommand("adaptbywindow") : "";
+ editor.fireEvent('saveScene');
+
+ editor.__hasEnterExecCommand = false;
+ };
+})();
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/table/edittd.html b/public/static/admin_static/lib/ueditor/dialogs/table/edittd.html
new file mode 100644
index 0000000..49a52f7
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/table/edittd.html
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/table/edittip.html b/public/static/admin_static/lib/ueditor/dialogs/table/edittip.html
new file mode 100644
index 0000000..954f7bb
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/table/edittip.html
@@ -0,0 +1,33 @@
+
+
+
+ 表格删除提示
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/template/config.js b/public/static/admin_static/lib/ueditor/dialogs/template/config.js
new file mode 100644
index 0000000..417b8f7
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/template/config.js
@@ -0,0 +1,42 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: xuheng
+ * Date: 12-8-8
+ * Time: 下午2:00
+ * To change this template use File | Settings | File Templates.
+ */
+var templates = [
+ {
+ "pre":"pre0.png",
+ 'title':lang.blank,
+ 'preHtml':' 欢迎使用UEditor!
',
+ "html":'欢迎使用UEditor!
'
+
+ },
+ {
+ "pre":"pre1.png",
+ 'title':lang.blog,
+ 'preHtml':'深入理解Range UEditor二次开发
什么是Range 对于“插入”选项卡上的库,在设计时都充分考虑了其中的项与文档整体外观的协调性。
Range能干什么 在“开始”选项卡上,通过从快速样式库中为所选文本选择一种外观,您可以方便地更改文档中所选文本的格式。
',
+ "html":'[键入文档标题] [键入文档副标题]
[标题 1] 对于“插入”选项卡上的库,在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。
[标题 2] 在“开始”选项卡上,通过从快速样式库中为所选文本选择一种外观,您可以方便地更改文档中所选文本的格式。 您还可以使用“开始”选项卡上的其他控件来直接设置文本格式。大多数控件都允许您选择是使用当前主题外观,还是使用某种直接指定的格式。
[标题 3] 对于“插入”选项卡上的库,在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。
'
+
+ },
+ {
+ "pre":"pre2.png",
+ 'title':lang.resume,
+ 'preHtml':'WEB前端开发简历 插
入
照
片
联系电话: [键入您的电话]
电子邮件: [键入您的电子邮件地址]
家庭住址: [键入您的地址]
目标职位 WEB前端研发工程师
学历
[起止时间] [学校名称] [所学专业] [所获学位]
工作经验
',
+ "html":'[此处键入简历标题]
【此处插入照片】
联系电话:[键入您的电话]
电子邮件:[键入您的电子邮件地址]
家庭住址:[键入您的地址]
目标职位 [此处键入您的期望职位]
学历
[键入起止时间] [键入学校名称] [键入所学专业] [键入所获学位]
[键入起止时间] [键入学校名称] [键入所学专业] [键入所获学位]
工作经验 [键入起止时间] [键入公司名称] [键入职位名称]
[键入负责项目] [键入项目简介]
[键入负责项目] [键入项目简介]
[键入起止时间] [键入公司名称] [键入职位名称]
[键入负责项目] [键入项目简介]
掌握技能
[这里可以键入您所掌握的技能]
'
+
+ },
+ {
+ "pre":"pre3.png",
+ 'title':lang.richText,
+ 'preHtml':'[此处键入文章标题] 图文混排方法
图片居左,文字围绕图片排版
方法:在文字前面插入图片,设置居左对齐,然后即可在右边输入多行文
还有没有什么其他的环绕方式呢?这里是居右环绕
欢迎大家多多尝试,为UEditor提供更多高质量模板!
',
+ "html":'
[此处键入文章标题] 图文混排方法
1. 图片居左,文字围绕图片排版
方法:在文字前面插入图片,设置居左对齐,然后即可在右边输入多行文本
2. 图片居右,文字围绕图片排版
方法:在文字前面插入图片,设置居右对齐,然后即可在左边输入多行文本
3. 图片居中环绕排版
方法:亲,这个真心没有办法。。。
还有没有什么其他的环绕方式呢?这里是居右环绕
欢迎大家多多尝试,为UEditor提供更多高质量模板!
占位
占位
占位
占位
占位
'
+ },
+ {
+ "pre":"pre4.png",
+ 'title':lang.sciPapers,
+ 'preHtml':'[键入文章标题] 摘要 :这里可以输入很长很长很长很长很长很长很长很长很差的摘要
标题 1
这里可以输入很多内容,可以图文混排,可以有列表等。
标题 2
列表 1
列表 2
多级列表 1
多级列表 2
列表 3
标题 3
来个文字图文混排的
',
+ 'html':'[键入文章标题] 摘要 :这里可以输入很长很长很长很长很长很长很长很长很差的摘要
标题 1
这里可以输入很多内容,可以图文混排,可以有列表等。
标题 2
来个列表瞅瞅:
列表 1
列表 2
多级列表 1
多级列表 2
列表 3
标题 3
来个文字图文混排的
这里可以多行
右边是图片
绝对没有问题的,不信你也可以试试看
'
+ }
+];
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/template/images/bg.gif b/public/static/admin_static/lib/ueditor/dialogs/template/images/bg.gif
new file mode 100644
index 0000000..8c1d10a
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/template/images/bg.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/template/images/pre0.png b/public/static/admin_static/lib/ueditor/dialogs/template/images/pre0.png
new file mode 100644
index 0000000..8f3c16a
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/template/images/pre0.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/template/images/pre1.png b/public/static/admin_static/lib/ueditor/dialogs/template/images/pre1.png
new file mode 100644
index 0000000..5a03f96
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/template/images/pre1.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/template/images/pre2.png b/public/static/admin_static/lib/ueditor/dialogs/template/images/pre2.png
new file mode 100644
index 0000000..5a55672
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/template/images/pre2.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/template/images/pre3.png b/public/static/admin_static/lib/ueditor/dialogs/template/images/pre3.png
new file mode 100644
index 0000000..d852d29
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/template/images/pre3.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/template/images/pre4.png b/public/static/admin_static/lib/ueditor/dialogs/template/images/pre4.png
new file mode 100644
index 0000000..0d7bc72
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/template/images/pre4.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/template/template.css b/public/static/admin_static/lib/ueditor/dialogs/template/template.css
new file mode 100644
index 0000000..6c1608d
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/template/template.css
@@ -0,0 +1,18 @@
+.wrap{ padding: 5px;font-size: 14px;}
+.left{width:425px;float: left;}
+.right{width:160px;border: 1px solid #ccc;float: right;padding: 5px;margin-right: 5px;}
+.right .pre{height: 332px;overflow-y: auto;}
+.right .preitem{border: white 1px solid;margin: 5px 0;padding: 2px 0;}
+.right .preitem:hover{background-color: lemonChiffon;cursor: pointer;border: #ccc 1px solid;}
+.right .preitem img{display: block;margin: 0 auto;width:100px;}
+.clear{clear: both;}
+.top{height:26px;line-height: 26px;padding: 5px;}
+.bottom{height:320px;width:100%;margin: 0 auto;}
+.transparent{ background: url("images/bg.gif") repeat;}
+.bottom table tr td{border:1px dashed #ccc;}
+#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;}
+.border_style1{padding:2px;border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}
+p{margin: 5px 0}
+table{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all;}
+li{clear:both}
+ol{padding-left:40px; }
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/template/template.html b/public/static/admin_static/lib/ueditor/dialogs/template/template.html
new file mode 100644
index 0000000..d9903a4
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/template/template.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/static/admin_static/lib/ueditor/dialogs/template/template.js b/public/static/admin_static/lib/ueditor/dialogs/template/template.js
new file mode 100644
index 0000000..80a334b
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/template/template.js
@@ -0,0 +1,53 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: xuheng
+ * Date: 12-8-8
+ * Time: 下午2:09
+ * To change this template use File | Settings | File Templates.
+ */
+(function () {
+ var me = editor,
+ preview = $G( "preview" ),
+ preitem = $G( "preitem" ),
+ tmps = templates,
+ currentTmp;
+ var initPre = function () {
+ var str = "";
+ for ( var i = 0, tmp; tmp = tmps[i++]; ) {
+ str += '';
+ }
+ preitem.innerHTML = str;
+ };
+ var pre = function ( n ) {
+ var tmp = tmps[n - 1];
+ currentTmp = tmp;
+ clearItem();
+ domUtils.setStyles( preitem.childNodes[n - 1], {
+ "background-color":"lemonChiffon",
+ "border":"#ccc 1px solid"
+ } );
+ preview.innerHTML = tmp.preHtml ? tmp.preHtml : "";
+ };
+ var clearItem = function () {
+ var items = preitem.children;
+ for ( var i = 0, item; item = items[i++]; ) {
+ domUtils.setStyles( item, {
+ "background-color":"",
+ "border":"white 1px solid"
+ } );
+ }
+ };
+ dialog.onok = function () {
+ if ( !$G( "issave" ).checked ){
+ me.execCommand( "cleardoc" );
+ }
+ var obj = {
+ html:currentTmp && currentTmp.html
+ };
+ me.execCommand( "template", obj );
+ };
+ initPre();
+ window.pre = pre;
+ pre(2)
+
+})();
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/bg.png b/public/static/admin_static/lib/ueditor/dialogs/video/images/bg.png
new file mode 100644
index 0000000..580be0a
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/bg.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/center_focus.jpg b/public/static/admin_static/lib/ueditor/dialogs/video/images/center_focus.jpg
new file mode 100644
index 0000000..262b029
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/center_focus.jpg differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/file-icons.gif b/public/static/admin_static/lib/ueditor/dialogs/video/images/file-icons.gif
new file mode 100644
index 0000000..d8c02c2
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/file-icons.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/file-icons.png b/public/static/admin_static/lib/ueditor/dialogs/video/images/file-icons.png
new file mode 100644
index 0000000..3ff82c8
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/file-icons.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/icons.gif b/public/static/admin_static/lib/ueditor/dialogs/video/images/icons.gif
new file mode 100644
index 0000000..78459de
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/icons.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/icons.png b/public/static/admin_static/lib/ueditor/dialogs/video/images/icons.png
new file mode 100644
index 0000000..12e4700
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/icons.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/image.png b/public/static/admin_static/lib/ueditor/dialogs/video/images/image.png
new file mode 100644
index 0000000..19699f6
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/image.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/left_focus.jpg b/public/static/admin_static/lib/ueditor/dialogs/video/images/left_focus.jpg
new file mode 100644
index 0000000..7886d27
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/left_focus.jpg differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/none_focus.jpg b/public/static/admin_static/lib/ueditor/dialogs/video/images/none_focus.jpg
new file mode 100644
index 0000000..7c768dc
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/none_focus.jpg differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/progress.png b/public/static/admin_static/lib/ueditor/dialogs/video/images/progress.png
new file mode 100644
index 0000000..717c486
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/progress.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/right_focus.jpg b/public/static/admin_static/lib/ueditor/dialogs/video/images/right_focus.jpg
new file mode 100644
index 0000000..173e10d
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/right_focus.jpg differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/success.gif b/public/static/admin_static/lib/ueditor/dialogs/video/images/success.gif
new file mode 100644
index 0000000..8d4f311
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/success.gif differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/images/success.png b/public/static/admin_static/lib/ueditor/dialogs/video/images/success.png
new file mode 100644
index 0000000..94f968d
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/video/images/success.png differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/video.css b/public/static/admin_static/lib/ueditor/dialogs/video/video.css
new file mode 100644
index 0000000..5870e7a
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/video/video.css
@@ -0,0 +1,635 @@
+@charset "utf-8";
+.wrapper{ width: 570px;_width:575px;margin: 10px auto; zoom:1;position: relative}
+.tabbody{height: 335px;}
+.tabbody .panel {
+ position: absolute;
+ width: 0;
+ height: 0;
+ background: #fff;
+ overflow: hidden;
+ display: none;
+}
+.tabbody .panel.focus {
+ width: 100%;
+ height: 335px;
+ display: block;
+}
+
+.tabbody .panel table td{vertical-align: middle;}
+#videoUrl {
+ width: 490px;
+ height: 21px;
+ line-height: 21px;
+ margin: 8px 5px;
+ background: #FFF;
+ border: 1px solid #d7d7d7;
+}
+#videoSearchTxt{margin-left:15px;background: #FFF;width:200px;height:21px;line-height:21px;border: 1px solid #d7d7d7;}
+#searchList{width: 570px;overflow: auto;zoom:1;height: 270px;}
+#searchList div{float: left;width: 120px;height: 135px;margin: 5px 15px;}
+#searchList img{margin: 2px 8px;cursor: pointer;border: 2px solid #fff} /*不用缩略图*/
+#searchList p{margin-left: 10px;}
+#videoType{
+ width: 65px;
+ height: 23px;
+ line-height: 22px;
+ border: 1px solid #d7d7d7;
+}
+#videoSearchBtn,#videoSearchReset{
+ /*width: 80px;*/
+ height: 25px;
+ line-height: 25px;
+ background: #eee;
+ border: 1px solid #d7d7d7;
+ cursor: pointer;
+ padding: 0 5px;
+}
+
+
+
+#preview{position: relative;width: 420px;padding:0;overflow: hidden; margin-left: 10px; _margin-left:5px; height: 280px;background-color: #ddd;float: left}
+#preview .previewMsg {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color: #666;}
+#preview .previewMsg span{display:block;margin: 125px auto 0 auto;text-align:center;font-size:18px;color:#fff;}
+#preview .previewVideo {position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;}
+.edui-video-wrapper fieldset{
+ border: 1px solid #ddd;
+ padding-left: 5px;
+ margin-bottom: 20px;
+ padding-bottom: 5px;
+ width: 115px;
+}
+
+#videoInfo {width: 120px;float: left;margin-left: 10px;_margin-left:7px;}
+fieldset{
+ border: 1px solid #ddd;
+ padding-left: 5px;
+ margin-bottom: 20px;
+ padding-bottom: 5px;
+ width: 115px;
+}
+fieldset legend{font-weight: bold;}
+fieldset p{line-height: 30px;}
+fieldset input.txt{
+ width: 65px;
+ height: 21px;
+ line-height: 21px;
+ margin: 8px 5px;
+ background: #FFF;
+ border: 1px solid #d7d7d7;
+}
+label.url{font-weight: bold;margin-left: 5px;color: #06c;}
+#videoFloat div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;}
+#videoFloat .focus{opacity: 1;filter: alpha(opacity = 100)}
+span.view{display: inline-block;width: 30px;float: right;cursor: pointer;color: blue}
+
+
+
+
+/* upload video */
+.tabbody #upload.panel {
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ position: absolute !important;
+ clip: rect(1px, 1px, 1px, 1px);
+ background: #fff;
+ display: block;
+}
+.tabbody #upload.panel.focus {
+ width: 100%;
+ height: 335px;
+ display: block;
+ clip: auto;
+}
+#upload_alignment div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;}
+#upload_alignment .focus{opacity: 1;filter: alpha(opacity = 100)}
+#upload_left { width:427px; float:left; }
+#upload_left .controller { height: 30px; clear: both; }
+#uploadVideoInfo{margin-top:10px;float:right;padding-right:8px;}
+
+#upload .queueList {
+ margin: 0;
+}
+
+#upload p {
+ margin: 0;
+}
+
+.element-invisible {
+ width: 0 !important;
+ height: 0 !important;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+ position: absolute !important;
+ clip: rect(1px, 1px, 1px, 1px);
+}
+
+#upload .placeholder {
+ margin: 10px;
+ margin-right:0;
+ border: 2px dashed #e6e6e6;
+ *border: 0px dashed #e6e6e6;
+ height: 161px;
+ padding-top: 150px;
+ text-align: center;
+ width: 97%;
+ float: left;
+ background: url(./images/image.png) center 70px no-repeat;
+ color: #cccccc;
+ font-size: 18px;
+ position: relative;
+ top:0;
+ *margin-left: 0;
+ *left: 10px;
+}
+
+#upload .placeholder .webuploader-pick {
+ font-size: 18px;
+ background: #00b7ee;
+ border-radius: 3px;
+ line-height: 44px;
+ padding: 0 30px;
+ *width: 120px;
+ color: #fff;
+ display: inline-block;
+ margin: 0 auto 20px auto;
+ cursor: pointer;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+}
+
+#upload .placeholder .webuploader-pick-hover {
+ background: #00a2d4;
+}
+
+
+#filePickerContainer {
+ text-align: center;
+}
+
+#upload .placeholder .flashTip {
+ color: #666666;
+ font-size: 12px;
+ position: absolute;
+ width: 100%;
+ text-align: center;
+ bottom: 20px;
+}
+
+#upload .placeholder .flashTip a {
+ color: #0785d1;
+ text-decoration: none;
+}
+
+#upload .placeholder .flashTip a:hover {
+ text-decoration: underline;
+}
+
+#upload .placeholder.webuploader-dnd-over {
+ border-color: #999999;
+}
+
+#upload .filelist {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ overflow-x: hidden;
+ overflow-y: auto;
+ position: relative;
+ height: 285px;
+}
+
+#upload .filelist:after {
+ content: '';
+ display: block;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ clear: both;
+}
+
+#upload .filelist li {
+ width: 113px;
+ height: 113px;
+ background: url(./images/bg.png);
+ text-align: center;
+ margin: 15px 0 0 20px;
+ *margin: 15px 0 0 15px;
+ position: relative;
+ display: block;
+ float: left;
+ overflow: hidden;
+ font-size: 12px;
+}
+
+#upload .filelist li p.log {
+ position: relative;
+ top: -45px;
+}
+
+#upload .filelist li p.title {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ top: 5px;
+ text-indent: 5px;
+ text-align: left;
+}
+
+#upload .filelist li p.progress {
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ left: 0;
+ height: 8px;
+ overflow: hidden;
+ z-index: 50;
+ margin: 0;
+ border-radius: 0;
+ background: none;
+ -webkit-box-shadow: 0 0 0;
+}
+
+#upload .filelist li p.progress span {
+ display: none;
+ overflow: hidden;
+ width: 0;
+ height: 100%;
+ background: #1483d8 url(./images/progress.png) repeat-x;
+
+ -webit-transition: width 200ms linear;
+ -moz-transition: width 200ms linear;
+ -o-transition: width 200ms linear;
+ -ms-transition: width 200ms linear;
+ transition: width 200ms linear;
+
+ -webkit-animation: progressmove 2s linear infinite;
+ -moz-animation: progressmove 2s linear infinite;
+ -o-animation: progressmove 2s linear infinite;
+ -ms-animation: progressmove 2s linear infinite;
+ animation: progressmove 2s linear infinite;
+
+ -webkit-transform: translateZ(0);
+}
+
+@-webkit-keyframes progressmove {
+ 0% {
+ background-position: 0 0;
+ }
+ 100% {
+ background-position: 17px 0;
+ }
+}
+
+@-moz-keyframes progressmove {
+ 0% {
+ background-position: 0 0;
+ }
+ 100% {
+ background-position: 17px 0;
+ }
+}
+
+@keyframes progressmove {
+ 0% {
+ background-position: 0 0;
+ }
+ 100% {
+ background-position: 17px 0;
+ }
+}
+
+#upload .filelist li p.imgWrap {
+ position: relative;
+ z-index: 2;
+ line-height: 113px;
+ vertical-align: middle;
+ overflow: hidden;
+ width: 113px;
+ height: 113px;
+
+ -webkit-transform-origin: 50% 50%;
+ -moz-transform-origin: 50% 50%;
+ -o-transform-origin: 50% 50%;
+ -ms-transform-origin: 50% 50%;
+ transform-origin: 50% 50%;
+
+ -webit-transition: 200ms ease-out;
+ -moz-transition: 200ms ease-out;
+ -o-transition: 200ms ease-out;
+ -ms-transition: 200ms ease-out;
+ transition: 200ms ease-out;
+}
+#upload .filelist li p.imgWrap.notimage {
+ margin-top: 0;
+ width: 111px;
+ height: 111px;
+ border: 1px #eeeeee solid;
+}
+#upload .filelist li p.imgWrap.notimage i.file-preview {
+ margin-top: 15px;
+}
+
+#upload .filelist li img {
+ width: 100%;
+}
+
+#upload .filelist li p.error {
+ background: #f43838;
+ color: #fff;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ height: 28px;
+ line-height: 28px;
+ width: 100%;
+ z-index: 100;
+ display:none;
+}
+
+#upload .filelist li .success {
+ display: block;
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ height: 40px;
+ width: 100%;
+ z-index: 200;
+ background: url(./images/success.png) no-repeat right bottom;
+ background-image: url(./images/success.gif) \9;
+}
+
+#upload .filelist li.filePickerBlock {
+ width: 113px;
+ height: 113px;
+ background: url(./images/image.png) no-repeat center 12px;
+ border: 1px solid #eeeeee;
+ border-radius: 0;
+}
+#upload .filelist li.filePickerBlock div.webuploader-pick {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ opacity: 0;
+ background: none;
+ font-size: 0;
+}
+
+#upload .filelist div.file-panel {
+ position: absolute;
+ height: 0;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0;
+ background: rgba(0, 0, 0, 0.5);
+ width: 100%;
+ top: 0;
+ left: 0;
+ overflow: hidden;
+ z-index: 300;
+}
+
+#upload .filelist div.file-panel span {
+ width: 24px;
+ height: 24px;
+ display: inline;
+ float: right;
+ text-indent: -9999px;
+ overflow: hidden;
+ background: url(./images/icons.png) no-repeat;
+ background: url(./images/icons.gif) no-repeat \9;
+ margin: 5px 1px 1px;
+ cursor: pointer;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#upload .filelist div.file-panel span.rotateLeft {
+ display:none;
+ background-position: 0 -24px;
+}
+
+#upload .filelist div.file-panel span.rotateLeft:hover {
+ background-position: 0 0;
+}
+
+#upload .filelist div.file-panel span.rotateRight {
+ display:none;
+ background-position: -24px -24px;
+}
+
+#upload .filelist div.file-panel span.rotateRight:hover {
+ background-position: -24px 0;
+}
+
+#upload .filelist div.file-panel span.cancel {
+ background-position: -48px -24px;
+}
+
+#upload .filelist div.file-panel span.cancel:hover {
+ background-position: -48px 0;
+}
+
+#upload .statusBar {
+ height: 45px;
+ border-bottom: 1px solid #dadada;
+ margin: 0 10px;
+ padding: 0;
+ line-height: 45px;
+ vertical-align: middle;
+ position: relative;
+}
+
+#upload .statusBar .progress {
+ border: 1px solid #1483d8;
+ width: 198px;
+ background: #fff;
+ height: 18px;
+ position: absolute;
+ top: 12px;
+ display: none;
+ text-align: center;
+ line-height: 18px;
+ color: #6dbfff;
+ margin: 0 10px 0 0;
+}
+#upload .statusBar .progress span.percentage {
+ width: 0;
+ height: 100%;
+ left: 0;
+ top: 0;
+ background: #1483d8;
+ position: absolute;
+}
+#upload .statusBar .progress span.text {
+ position: relative;
+ z-index: 10;
+}
+
+#upload .statusBar .info {
+ display: inline-block;
+ font-size: 14px;
+ color: #666666;
+}
+
+#upload .statusBar .btns {
+ position: absolute;
+ top: 7px;
+ right: 0;
+ line-height: 30px;
+}
+
+#filePickerBtn {
+ display: inline-block;
+ float: left;
+}
+#upload .statusBar .btns .webuploader-pick,
+#upload .statusBar .btns .uploadBtn,
+#upload .statusBar .btns .uploadBtn.state-uploading,
+#upload .statusBar .btns .uploadBtn.state-paused {
+ background: #ffffff;
+ border: 1px solid #cfcfcf;
+ color: #565656;
+ padding: 0 18px;
+ display: inline-block;
+ border-radius: 3px;
+ margin-left: 10px;
+ cursor: pointer;
+ font-size: 14px;
+ float: left;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+#upload .statusBar .btns .webuploader-pick-hover,
+#upload .statusBar .btns .uploadBtn:hover,
+#upload .statusBar .btns .uploadBtn.state-uploading:hover,
+#upload .statusBar .btns .uploadBtn.state-paused:hover {
+ background: #f0f0f0;
+}
+
+#upload .statusBar .btns .uploadBtn,
+#upload .statusBar .btns .uploadBtn.state-paused{
+ background: #00b7ee;
+ color: #fff;
+ border-color: transparent;
+}
+#upload .statusBar .btns .uploadBtn:hover,
+#upload .statusBar .btns .uploadBtn.state-paused:hover{
+ background: #00a2d4;
+}
+
+#upload .statusBar .btns .uploadBtn.disabled {
+ pointer-events: none;
+ filter:alpha(opacity=60);
+ -moz-opacity:0.6;
+ -khtml-opacity: 0.6;
+ opacity: 0.6;
+}
+
+
+/* 在线文件的文件预览图标 */
+i.file-preview {
+ display: block;
+ margin: 10px auto;
+ width: 70px;
+ height: 70px;
+ background-image: url("./images/file-icons.png");
+ background-image: url("./images/file-icons.gif") \9;
+ background-position: -140px center;
+ background-repeat: no-repeat;
+}
+i.file-preview.file-type-dir{
+ background-position: 0 center;
+}
+i.file-preview.file-type-file{
+ background-position: -140px center;
+}
+i.file-preview.file-type-filelist{
+ background-position: -210px center;
+}
+i.file-preview.file-type-zip,
+i.file-preview.file-type-rar,
+i.file-preview.file-type-7z,
+i.file-preview.file-type-tar,
+i.file-preview.file-type-gz,
+i.file-preview.file-type-bz2{
+ background-position: -280px center;
+}
+i.file-preview.file-type-xls,
+i.file-preview.file-type-xlsx{
+ background-position: -350px center;
+}
+i.file-preview.file-type-doc,
+i.file-preview.file-type-docx{
+ background-position: -420px center;
+}
+i.file-preview.file-type-ppt,
+i.file-preview.file-type-pptx{
+ background-position: -490px center;
+}
+i.file-preview.file-type-vsd{
+ background-position: -560px center;
+}
+i.file-preview.file-type-pdf{
+ background-position: -630px center;
+}
+i.file-preview.file-type-txt,
+i.file-preview.file-type-md,
+i.file-preview.file-type-json,
+i.file-preview.file-type-htm,
+i.file-preview.file-type-xml,
+i.file-preview.file-type-html,
+i.file-preview.file-type-js,
+i.file-preview.file-type-css,
+i.file-preview.file-type-php,
+i.file-preview.file-type-jsp,
+i.file-preview.file-type-asp{
+ background-position: -700px center;
+}
+i.file-preview.file-type-apk{
+ background-position: -770px center;
+}
+i.file-preview.file-type-exe{
+ background-position: -840px center;
+}
+i.file-preview.file-type-ipa{
+ background-position: -910px center;
+}
+i.file-preview.file-type-mp4,
+i.file-preview.file-type-swf,
+i.file-preview.file-type-mkv,
+i.file-preview.file-type-avi,
+i.file-preview.file-type-flv,
+i.file-preview.file-type-mov,
+i.file-preview.file-type-mpg,
+i.file-preview.file-type-mpeg,
+i.file-preview.file-type-ogv,
+i.file-preview.file-type-webm,
+i.file-preview.file-type-rm,
+i.file-preview.file-type-rmvb{
+ background-position: -980px center;
+}
+i.file-preview.file-type-ogg,
+i.file-preview.file-type-wav,
+i.file-preview.file-type-wmv,
+i.file-preview.file-type-mid,
+i.file-preview.file-type-mp3{
+ background-position: -1050px center;
+}
+i.file-preview.file-type-jpg,
+i.file-preview.file-type-jpeg,
+i.file-preview.file-type-gif,
+i.file-preview.file-type-bmp,
+i.file-preview.file-type-png,
+i.file-preview.file-type-psd{
+ background-position: -140px center;
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/video.html b/public/static/admin_static/lib/ueditor/dialogs/video/video.html
new file mode 100644
index 0000000..5007882
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/video/video.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/video/video.js b/public/static/admin_static/lib/ueditor/dialogs/video/video.js
new file mode 100644
index 0000000..a8c34d9
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/video/video.js
@@ -0,0 +1,791 @@
+/**
+ * Created by JetBrains PhpStorm.
+ * User: taoqili
+ * Date: 12-2-20
+ * Time: 上午11:19
+ * To change this template use File | Settings | File Templates.
+ */
+
+(function(){
+
+ var video = {},
+ uploadVideoList = [],
+ isModifyUploadVideo = false,
+ uploadFile;
+
+ window.onload = function(){
+ $focus($G("videoUrl"));
+ initTabs();
+ initVideo();
+ initUpload();
+ };
+
+ /* 初始化tab标签 */
+ function initTabs(){
+ var tabs = $G('tabHeads').children;
+ for (var i = 0; i < tabs.length; i++) {
+ domUtils.on(tabs[i], "click", function (e) {
+ var j, bodyId, target = e.target || e.srcElement;
+ for (j = 0; j < tabs.length; j++) {
+ bodyId = tabs[j].getAttribute('data-content-id');
+ if(tabs[j] == target){
+ domUtils.addClass(tabs[j], 'focus');
+ domUtils.addClass($G(bodyId), 'focus');
+ }else {
+ domUtils.removeClasses(tabs[j], 'focus');
+ domUtils.removeClasses($G(bodyId), 'focus');
+ }
+ }
+ });
+ }
+ }
+
+ function initVideo(){
+ createAlignButton( ["videoFloat", "upload_alignment"] );
+ addUrlChangeListener($G("videoUrl"));
+ addOkListener();
+
+ //编辑视频时初始化相关信息
+ (function(){
+ var img = editor.selection.getRange().getClosedNode(),url;
+ if(img && img.className){
+ var hasFakedClass = (img.className == "edui-faked-video"),
+ hasUploadClass = img.className.indexOf("edui-upload-video")!=-1;
+ if(hasFakedClass || hasUploadClass) {
+ $G("videoUrl").value = url = img.getAttribute("_url");
+ $G("videoWidth").value = img.width;
+ $G("videoHeight").value = img.height;
+ var align = domUtils.getComputedStyle(img,"float"),
+ parentAlign = domUtils.getComputedStyle(img.parentNode,"text-align");
+ updateAlignButton(parentAlign==="center"?"center":align);
+ }
+ if(hasUploadClass) {
+ isModifyUploadVideo = true;
+ }
+ }
+ createPreviewVideo(url);
+ })();
+ }
+
+ /**
+ * 监听确认和取消两个按钮事件,用户执行插入或者清空正在播放的视频实例操作
+ */
+ function addOkListener(){
+ dialog.onok = function(){
+ $G("preview").innerHTML = "";
+ var currentTab = findFocus("tabHeads","tabSrc");
+ switch(currentTab){
+ case "video":
+ return insertSingle();
+ break;
+ case "videoSearch":
+ return insertSearch("searchList");
+ break;
+ case "upload":
+ return insertUpload();
+ break;
+ }
+ };
+ dialog.oncancel = function(){
+ $G("preview").innerHTML = "";
+ };
+ }
+
+ /**
+ * 依据传入的align值更新按钮信息
+ * @param align
+ */
+ function updateAlignButton( align ) {
+ var aligns = $G( "videoFloat" ).children;
+ for ( var i = 0, ci; ci = aligns[i++]; ) {
+ if ( ci.getAttribute( "name" ) == align ) {
+ if ( ci.className !="focus" ) {
+ ci.className = "focus";
+ }
+ } else {
+ if ( ci.className =="focus" ) {
+ ci.className = "";
+ }
+ }
+ }
+ }
+
+ /**
+ * 将单个视频信息插入编辑器中
+ */
+ function insertSingle(){
+ var width = $G("videoWidth"),
+ height = $G("videoHeight"),
+ url=$G('videoUrl').value,
+ align = findFocus("videoFloat","name");
+ if(!url) return false;
+ if ( !checkNum( [width, height] ) ) return false;
+ editor.execCommand('insertvideo', {
+ url: convert_url(url),
+ width: width.value,
+ height: height.value,
+ align: align
+ }, isModifyUploadVideo ? 'upload':null);
+ }
+
+ /**
+ * 将元素id下的所有代表视频的图片插入编辑器中
+ * @param id
+ */
+ function insertSearch(id){
+ var imgs = domUtils.getElementsByTagName($G(id),"img"),
+ videoObjs=[];
+ for(var i=0,img; img=imgs[i++];){
+ if(img.getAttribute("selected")){
+ videoObjs.push({
+ url:img.getAttribute("ue_video_url"),
+ width:420,
+ height:280,
+ align:"none"
+ });
+ }
+ }
+ editor.execCommand('insertvideo',videoObjs);
+ }
+
+ /**
+ * 找到id下具有focus类的节点并返回该节点下的某个属性
+ * @param id
+ * @param returnProperty
+ */
+ function findFocus( id, returnProperty ) {
+ var tabs = $G( id ).children,
+ property;
+ for ( var i = 0, ci; ci = tabs[i++]; ) {
+ if ( ci.className=="focus" ) {
+ property = ci.getAttribute( returnProperty );
+ break;
+ }
+ }
+ return property;
+ }
+ function convert_url(url){
+ if ( !url ) return '';
+ url = utils.trim(url)
+ .replace(/v\.youku\.com\/v_show\/id_([\w\-=]+)\.html/i, 'player.youku.com/player.php/sid/$1/v.swf')
+ .replace(/(www\.)?youtube\.com\/watch\?v=([\w\-]+)/i, "www.youtube.com/v/$2")
+ .replace(/youtu.be\/(\w+)$/i, "www.youtube.com/v/$1")
+ .replace(/v\.ku6\.com\/.+\/([\w\.]+)\.html.*$/i, "player.ku6.com/refer/$1/v.swf")
+ .replace(/www\.56\.com\/u\d+\/v_([\w\-]+)\.html/i, "player.56.com/v_$1.swf")
+ .replace(/www.56.com\/w\d+\/play_album\-aid\-\d+_vid\-([^.]+)\.html/i, "player.56.com/v_$1.swf")
+ .replace(/v\.pps\.tv\/play_([\w]+)\.html.*$/i, "player.pps.tv/player/sid/$1/v.swf")
+ .replace(/www\.letv\.com\/ptv\/vplay\/([\d]+)\.html.*$/i, "i7.imgs.letv.com/player/swfPlayer.swf?id=$1&autoplay=0")
+ .replace(/www\.tudou\.com\/programs\/view\/([\w\-]+)\/?/i, "www.tudou.com/v/$1")
+ .replace(/v\.qq\.com\/cover\/[\w]+\/[\w]+\/([\w]+)\.html/i, "static.video.qq.com/TPout.swf?vid=$1")
+ .replace(/v\.qq\.com\/.+[\?\&]vid=([^&]+).*$/i, "static.video.qq.com/TPout.swf?vid=$1")
+ .replace(/my\.tv\.sohu\.com\/[\w]+\/[\d]+\/([\d]+)\.shtml.*$/i, "share.vrs.sohu.com/my/v.swf&id=$1");
+
+ return url;
+ }
+
+ /**
+ * 检测传入的所有input框中输入的长宽是否是正数
+ * @param nodes input框集合,
+ */
+ function checkNum( nodes ) {
+ for ( var i = 0, ci; ci = nodes[i++]; ) {
+ var value = ci.value;
+ if ( !isNumber( value ) && value) {
+ alert( lang.numError );
+ ci.value = "";
+ ci.focus();
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * 数字判断
+ * @param value
+ */
+ function isNumber( value ) {
+ return /(0|^[1-9]\d*$)/.test( value );
+ }
+
+ /**
+ * 创建图片浮动选择按钮
+ * @param ids
+ */
+ function createAlignButton( ids ) {
+ for ( var i = 0, ci; ci = ids[i++]; ) {
+ var floatContainer = $G( ci ),
+ nameMaps = {"none":lang['default'], "left":lang.floatLeft, "right":lang.floatRight, "center":lang.block};
+ for ( var j in nameMaps ) {
+ var div = document.createElement( "div" );
+ div.setAttribute( "name", j );
+ if ( j == "none" ) div.className="focus";
+ div.style.cssText = "background:url(images/" + j + "_focus.jpg);";
+ div.setAttribute( "title", nameMaps[j] );
+ floatContainer.appendChild( div );
+ }
+ switchSelect( ci );
+ }
+ }
+
+ /**
+ * 选择切换
+ * @param selectParentId
+ */
+ function switchSelect( selectParentId ) {
+ var selects = $G( selectParentId ).children;
+ for ( var i = 0, ci; ci = selects[i++]; ) {
+ domUtils.on( ci, "click", function () {
+ for ( var j = 0, cj; cj = selects[j++]; ) {
+ cj.className = "";
+ cj.removeAttribute && cj.removeAttribute( "class" );
+ }
+ this.className = "focus";
+ } )
+ }
+ }
+
+ /**
+ * 监听url改变事件
+ * @param url
+ */
+ function addUrlChangeListener(url){
+ if (browser.ie) {
+ url.onpropertychange = function () {
+ createPreviewVideo( this.value );
+ }
+ } else {
+ url.addEventListener( "input", function () {
+ createPreviewVideo( this.value );
+ }, false );
+ }
+ }
+
+ /**
+ * 根据url生成视频预览
+ * @param url
+ */
+ function createPreviewVideo(url){
+ if ( !url )return;
+
+ var conUrl = convert_url(url);
+
+ conUrl = utils.unhtmlForUrl(conUrl);
+
+ $G("preview").innerHTML = ''+lang.urlError+'
'+
+ '' +
+ ' ';
+ }
+
+
+ /* 插入上传视频 */
+ function insertUpload(){
+ var videoObjs=[],
+ uploadDir = editor.getOpt('videoUrlPrefix'),
+ width = parseInt($G('upload_width').value, 10) || 420,
+ height = parseInt($G('upload_height').value, 10) || 280,
+ align = findFocus("upload_alignment","name") || 'none';
+ for(var key in uploadVideoList) {
+ var file = uploadVideoList[key];
+ videoObjs.push({
+ url: uploadDir + file.url,
+ width:width,
+ height:height,
+ align:align
+ });
+ }
+
+ var count = uploadFile.getQueueCount();
+ if (count) {
+ $('.info', '#queueList').html('' + '还有2个未上传文件'.replace(/[\d]/, count) + ' ');
+ return false;
+ } else {
+ editor.execCommand('insertvideo', videoObjs, 'upload');
+ }
+ }
+
+ /*初始化上传标签*/
+ function initUpload(){
+ uploadFile = new UploadFile('queueList');
+ }
+
+
+ /* 上传附件 */
+ function UploadFile(target) {
+ this.$wrap = target.constructor == String ? $('#' + target) : $(target);
+ this.init();
+ }
+ UploadFile.prototype = {
+ init: function () {
+ this.fileList = [];
+ this.initContainer();
+ this.initUploader();
+ },
+ initContainer: function () {
+ this.$queue = this.$wrap.find('.filelist');
+ },
+ /* 初始化容器 */
+ initUploader: function () {
+ var _this = this,
+ $ = jQuery, // just in case. Make sure it's not an other libaray.
+ $wrap = _this.$wrap,
+ // 图片容器
+ $queue = $wrap.find('.filelist'),
+ // 状态栏,包括进度和控制按钮
+ $statusBar = $wrap.find('.statusBar'),
+ // 文件总体选择信息。
+ $info = $statusBar.find('.info'),
+ // 上传按钮
+ $upload = $wrap.find('.uploadBtn'),
+ // 上传按钮
+ $filePickerBtn = $wrap.find('.filePickerBtn'),
+ // 上传按钮
+ $filePickerBlock = $wrap.find('.filePickerBlock'),
+ // 没选择文件之前的内容。
+ $placeHolder = $wrap.find('.placeholder'),
+ // 总体进度条
+ $progress = $statusBar.find('.progress').hide(),
+ // 添加的文件数量
+ fileCount = 0,
+ // 添加的文件总大小
+ fileSize = 0,
+ // 优化retina, 在retina下这个值是2
+ ratio = window.devicePixelRatio || 1,
+ // 缩略图大小
+ thumbnailWidth = 113 * ratio,
+ thumbnailHeight = 113 * ratio,
+ // 可能有pedding, ready, uploading, confirm, done.
+ state = '',
+ // 所有文件的进度信息,key为file id
+ percentages = {},
+ supportTransition = (function () {
+ var s = document.createElement('p').style,
+ r = 'transition' in s ||
+ 'WebkitTransition' in s ||
+ 'MozTransition' in s ||
+ 'msTransition' in s ||
+ 'OTransition' in s;
+ s = null;
+ return r;
+ })(),
+ // WebUploader实例
+ uploader,
+ actionUrl = editor.getActionUrl(editor.getOpt('videoActionName')),
+ fileMaxSize = editor.getOpt('videoMaxSize'),
+ acceptExtensions = (editor.getOpt('videoAllowFiles') || []).join('').replace(/\./g, ',').replace(/^[,]/, '');;
+
+ if (!WebUploader.Uploader.support()) {
+ $('#filePickerReady').after($('').html(lang.errorNotSupport)).hide();
+ return;
+ } else if (!editor.getOpt('videoActionName')) {
+ $('#filePickerReady').after($('
').html(lang.errorLoadConfig)).hide();
+ return;
+ }
+
+ uploader = _this.uploader = WebUploader.create({
+ pick: {
+ id: '#filePickerReady',
+ label: lang.uploadSelectFile
+ },
+ swf: '../../third-party/webuploader/Uploader.swf',
+ server: actionUrl,
+ fileVal: editor.getOpt('videoFieldName'),
+ duplicate: true,
+ fileSingleSizeLimit: fileMaxSize,
+ compress: false
+ });
+ uploader.addButton({
+ id: '#filePickerBlock'
+ });
+ uploader.addButton({
+ id: '#filePickerBtn',
+ label: lang.uploadAddFile
+ });
+
+ setState('pedding');
+
+ // 当有文件添加进来时执行,负责view的创建
+ function addFile(file) {
+ var $li = $('
' +
+ '' + file.name + '
' +
+ '
' +
+ '
' +
+ ' '),
+
+ $btns = $('
' +
+ '' + lang.uploadDelete + ' ' +
+ '' + lang.uploadTurnRight + ' ' +
+ '' + lang.uploadTurnLeft + '
').appendTo($li),
+ $prgress = $li.find('p.progress span'),
+ $wrap = $li.find('p.imgWrap'),
+ $info = $('
').hide().appendTo($li),
+
+ showError = function (code) {
+ switch (code) {
+ case 'exceed_size':
+ text = lang.errorExceedSize;
+ break;
+ case 'interrupt':
+ text = lang.errorInterrupt;
+ break;
+ case 'http':
+ text = lang.errorHttp;
+ break;
+ case 'not_allow_type':
+ text = lang.errorFileType;
+ break;
+ default:
+ text = lang.errorUploadRetry;
+ break;
+ }
+ $info.text(text).show();
+ };
+
+ if (file.getStatus() === 'invalid') {
+ showError(file.statusText);
+ } else {
+ $wrap.text(lang.uploadPreview);
+ if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|'+file.ext.toLowerCase()+'|') == -1) {
+ $wrap.empty().addClass('notimage').append('
' +
+ '
' + file.name + ' ');
+ } else {
+ if (browser.ie && browser.version <= 7) {
+ $wrap.text(lang.uploadNoPreview);
+ } else {
+ uploader.makeThumb(file, function (error, src) {
+ if (error || !src || (/^data:/.test(src) && browser.ie && browser.version <= 7)) {
+ $wrap.text(lang.uploadNoPreview);
+ } else {
+ var $img = $('
');
+ $wrap.empty().append($img);
+ $img.on('error', function () {
+ $wrap.text(lang.uploadNoPreview);
+ });
+ }
+ }, thumbnailWidth, thumbnailHeight);
+ }
+ }
+ percentages[ file.id ] = [ file.size, 0 ];
+ file.rotation = 0;
+
+ /* 检查文件格式 */
+ if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {
+ showError('not_allow_type');
+ uploader.removeFile(file);
+ }
+ }
+
+ file.on('statuschange', function (cur, prev) {
+ if (prev === 'progress') {
+ $prgress.hide().width(0);
+ } else if (prev === 'queued') {
+ $li.off('mouseenter mouseleave');
+ $btns.remove();
+ }
+ // 成功
+ if (cur === 'error' || cur === 'invalid') {
+ showError(file.statusText);
+ percentages[ file.id ][ 1 ] = 1;
+ } else if (cur === 'interrupt') {
+ showError('interrupt');
+ } else if (cur === 'queued') {
+ percentages[ file.id ][ 1 ] = 0;
+ } else if (cur === 'progress') {
+ $info.hide();
+ $prgress.css('display', 'block');
+ } else if (cur === 'complete') {
+ }
+
+ $li.removeClass('state-' + prev).addClass('state-' + cur);
+ });
+
+ $li.on('mouseenter', function () {
+ $btns.stop().animate({height: 30});
+ });
+ $li.on('mouseleave', function () {
+ $btns.stop().animate({height: 0});
+ });
+
+ $btns.on('click', 'span', function () {
+ var index = $(this).index(),
+ deg;
+
+ switch (index) {
+ case 0:
+ uploader.removeFile(file);
+ return;
+ case 1:
+ file.rotation += 90;
+ break;
+ case 2:
+ file.rotation -= 90;
+ break;
+ }
+
+ if (supportTransition) {
+ deg = 'rotate(' + file.rotation + 'deg)';
+ $wrap.css({
+ '-webkit-transform': deg,
+ '-mos-transform': deg,
+ '-o-transform': deg,
+ 'transform': deg
+ });
+ } else {
+ $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');
+ }
+
+ });
+
+ $li.insertBefore($filePickerBlock);
+ }
+
+ // 负责view的销毁
+ function removeFile(file) {
+ var $li = $('#' + file.id);
+ delete percentages[ file.id ];
+ updateTotalProgress();
+ $li.off().find('.file-panel').off().end().remove();
+ }
+
+ function updateTotalProgress() {
+ var loaded = 0,
+ total = 0,
+ spans = $progress.children(),
+ percent;
+
+ $.each(percentages, function (k, v) {
+ total += v[ 0 ];
+ loaded += v[ 0 ] * v[ 1 ];
+ });
+
+ percent = total ? loaded / total : 0;
+
+ spans.eq(0).text(Math.round(percent * 100) + '%');
+ spans.eq(1).css('width', Math.round(percent * 100) + '%');
+ updateStatus();
+ }
+
+ function setState(val, files) {
+
+ if (val != state) {
+
+ var stats = uploader.getStats();
+
+ $upload.removeClass('state-' + state);
+ $upload.addClass('state-' + val);
+
+ switch (val) {
+
+ /* 未选择文件 */
+ case 'pedding':
+ $queue.addClass('element-invisible');
+ $statusBar.addClass('element-invisible');
+ $placeHolder.removeClass('element-invisible');
+ $progress.hide(); $info.hide();
+ uploader.refresh();
+ break;
+
+ /* 可以开始上传 */
+ case 'ready':
+ $placeHolder.addClass('element-invisible');
+ $queue.removeClass('element-invisible');
+ $statusBar.removeClass('element-invisible');
+ $progress.hide(); $info.show();
+ $upload.text(lang.uploadStart);
+ uploader.refresh();
+ break;
+
+ /* 上传中 */
+ case 'uploading':
+ $progress.show(); $info.hide();
+ $upload.text(lang.uploadPause);
+ break;
+
+ /* 暂停上传 */
+ case 'paused':
+ $progress.show(); $info.hide();
+ $upload.text(lang.uploadContinue);
+ break;
+
+ case 'confirm':
+ $progress.show(); $info.hide();
+ $upload.text(lang.uploadStart);
+
+ stats = uploader.getStats();
+ if (stats.successNum && !stats.uploadFailNum) {
+ setState('finish');
+ return;
+ }
+ break;
+
+ case 'finish':
+ $progress.hide(); $info.show();
+ if (stats.uploadFailNum) {
+ $upload.text(lang.uploadRetry);
+ } else {
+ $upload.text(lang.uploadStart);
+ }
+ break;
+ }
+
+ state = val;
+ updateStatus();
+
+ }
+
+ if (!_this.getQueueCount()) {
+ $upload.addClass('disabled')
+ } else {
+ $upload.removeClass('disabled')
+ }
+
+ }
+
+ function updateStatus() {
+ var text = '', stats;
+
+ if (state === 'ready') {
+ text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));
+ } else if (state === 'confirm') {
+ stats = uploader.getStats();
+ if (stats.uploadFailNum) {
+ text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);
+ }
+ } else {
+ stats = uploader.getStats();
+ text = lang.updateStatusFinish.replace('_', fileCount).
+ replace('_KB', WebUploader.formatSize(fileSize)).
+ replace('_', stats.successNum);
+
+ if (stats.uploadFailNum) {
+ text += lang.updateStatusError.replace('_', stats.uploadFailNum);
+ }
+ }
+
+ $info.html(text);
+ }
+
+ uploader.on('fileQueued', function (file) {
+ fileCount++;
+ fileSize += file.size;
+
+ if (fileCount === 1) {
+ $placeHolder.addClass('element-invisible');
+ $statusBar.show();
+ }
+
+ addFile(file);
+ });
+
+ uploader.on('fileDequeued', function (file) {
+ fileCount--;
+ fileSize -= file.size;
+
+ removeFile(file);
+ updateTotalProgress();
+ });
+
+ uploader.on('filesQueued', function (file) {
+ if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {
+ setState('ready');
+ }
+ updateTotalProgress();
+ });
+
+ uploader.on('all', function (type, files) {
+ switch (type) {
+ case 'uploadFinished':
+ setState('confirm', files);
+ break;
+ case 'startUpload':
+ /* 添加额外的GET参数 */
+ var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',
+ url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?':'&') + 'encode=utf-8&' + params);
+ uploader.option('server', url);
+ setState('uploading', files);
+ break;
+ case 'stopUpload':
+ setState('paused', files);
+ break;
+ }
+ });
+
+ uploader.on('uploadBeforeSend', function (file, data, header) {
+ //这里可以通过data对象添加POST参数
+ header['X_Requested_With'] = 'XMLHttpRequest';
+ });
+
+ uploader.on('uploadProgress', function (file, percentage) {
+ var $li = $('#' + file.id),
+ $percent = $li.find('.progress span');
+
+ $percent.css('width', percentage * 100 + '%');
+ percentages[ file.id ][ 1 ] = percentage;
+ updateTotalProgress();
+ });
+
+ uploader.on('uploadSuccess', function (file, ret) {
+ var $file = $('#' + file.id);
+ try {
+ var responseText = (ret._raw || ret),
+ json = utils.str2json(responseText);
+ if (json.state == 'SUCCESS') {
+ uploadVideoList.push({
+ 'url': json.url,
+ 'type': json.type,
+ 'original':json.original
+ });
+ $file.append('
');
+ } else {
+ $file.find('.error').text(json.state).show();
+ }
+ } catch (e) {
+ $file.find('.error').text(lang.errorServerUpload).show();
+ }
+ });
+
+ uploader.on('uploadError', function (file, code) {
+ });
+ uploader.on('error', function (code, file) {
+ if (code == 'Q_TYPE_DENIED' || code == 'F_EXCEED_SIZE') {
+ addFile(file);
+ }
+ });
+ uploader.on('uploadComplete', function (file, ret) {
+ });
+
+ $upload.on('click', function () {
+ if ($(this).hasClass('disabled')) {
+ return false;
+ }
+
+ if (state === 'ready') {
+ uploader.upload();
+ } else if (state === 'paused') {
+ uploader.upload();
+ } else if (state === 'uploading') {
+ uploader.stop();
+ }
+ });
+
+ $upload.addClass('state-' + state);
+ updateTotalProgress();
+ },
+ getQueueCount: function () {
+ var file, i, status, readyFile = 0, files = this.uploader.getFiles();
+ for (i = 0; file = files[i++]; ) {
+ status = file.getStatus();
+ if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;
+ }
+ return readyFile;
+ },
+ refresh: function(){
+ this.uploader.refresh();
+ }
+ };
+
+})();
diff --git a/public/static/admin_static/lib/ueditor/dialogs/webapp/webapp.html b/public/static/admin_static/lib/ueditor/dialogs/webapp/webapp.html
new file mode 100644
index 0000000..1614377
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/webapp/webapp.html
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/wordimage/fClipboard_ueditor.swf b/public/static/admin_static/lib/ueditor/dialogs/wordimage/fClipboard_ueditor.swf
new file mode 100644
index 0000000..ac5d27f
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/wordimage/fClipboard_ueditor.swf differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/wordimage/imageUploader.swf b/public/static/admin_static/lib/ueditor/dialogs/wordimage/imageUploader.swf
new file mode 100644
index 0000000..2a554ca
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/dialogs/wordimage/imageUploader.swf differ
diff --git a/public/static/admin_static/lib/ueditor/dialogs/wordimage/tangram.js b/public/static/admin_static/lib/ueditor/dialogs/wordimage/tangram.js
new file mode 100644
index 0000000..2ebd8fd
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/wordimage/tangram.js
@@ -0,0 +1,1495 @@
+// Copyright (c) 2009, Baidu Inc. All rights reserved.
+//
+// Licensed under the BSD License
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http:// tangram.baidu.com/license.html
+//
+// 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.
+ /**
+ * @namespace T Tangram七巧板
+ * @name T
+ * @version 1.6.0
+*/
+
+/**
+ * 声明baidu包
+ * @author: allstar, erik, meizz, berg
+ */
+var T,
+ baidu = T = baidu || {version: "1.5.0"};
+baidu.guid = "$BAIDU$";
+baidu.$$ = window[baidu.guid] = window[baidu.guid] || {global:{}};
+
+/**
+ * 使用flash资源封装的一些功能
+ * @namespace baidu.flash
+ */
+baidu.flash = baidu.flash || {};
+
+/**
+ * 操作dom的方法
+ * @namespace baidu.dom
+ */
+baidu.dom = baidu.dom || {};
+
+
+/**
+ * 从文档中获取指定的DOM元素
+ * @name baidu.dom.g
+ * @function
+ * @grammar baidu.dom.g(id)
+ * @param {string|HTMLElement} id 元素的id或DOM元素.
+ * @shortcut g,T.G
+ * @meta standard
+ * @see baidu.dom.q
+ *
+ * @return {HTMLElement|null} 获取的元素,查找不到时返回null,如果参数不合法,直接返回参数.
+ */
+baidu.dom.g = function(id) {
+ if (!id) return null;
+ if ('string' == typeof id || id instanceof String) {
+ return document.getElementById(id);
+ } else if (id.nodeName && (id.nodeType == 1 || id.nodeType == 9)) {
+ return id;
+ }
+ return null;
+};
+baidu.g = baidu.G = baidu.dom.g;
+
+
+/**
+ * 操作数组的方法
+ * @namespace baidu.array
+ */
+
+baidu.array = baidu.array || {};
+
+
+/**
+ * 遍历数组中所有元素
+ * @name baidu.array.each
+ * @function
+ * @grammar baidu.array.each(source, iterator[, thisObject])
+ * @param {Array} source 需要遍历的数组
+ * @param {Function} iterator 对每个数组元素进行调用的函数,该函数有两个参数,第一个为数组元素,第二个为数组索引值,function (item, index)。
+ * @param {Object} [thisObject] 函数调用时的this指针,如果没有此参数,默认是当前遍历的数组
+ * @remark
+ * each方法不支持对Object的遍历,对Object的遍历使用baidu.object.each 。
+ * @shortcut each
+ * @meta standard
+ *
+ * @returns {Array} 遍历的数组
+ */
+
+baidu.each = baidu.array.forEach = baidu.array.each = function (source, iterator, thisObject) {
+ var returnValue, item, i, len = source.length;
+
+ if ('function' == typeof iterator) {
+ for (i = 0; i < len; i++) {
+ item = source[i];
+ returnValue = iterator.call(thisObject || source, item, i);
+
+ if (returnValue === false) {
+ break;
+ }
+ }
+ }
+ return source;
+};
+
+/**
+ * 对语言层面的封装,包括类型判断、模块扩展、继承基类以及对象自定义事件的支持。
+ * @namespace baidu.lang
+ */
+baidu.lang = baidu.lang || {};
+
+
+/**
+ * 判断目标参数是否为function或Function实例
+ * @name baidu.lang.isFunction
+ * @function
+ * @grammar baidu.lang.isFunction(source)
+ * @param {Any} source 目标参数
+ * @version 1.2
+ * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate
+ * @meta standard
+ * @returns {boolean} 类型判断结果
+ */
+baidu.lang.isFunction = function (source) {
+ return '[object Function]' == Object.prototype.toString.call(source);
+};
+
+/**
+ * 判断目标参数是否string类型或String对象
+ * @name baidu.lang.isString
+ * @function
+ * @grammar baidu.lang.isString(source)
+ * @param {Any} source 目标参数
+ * @shortcut isString
+ * @meta standard
+ * @see baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate
+ *
+ * @returns {boolean} 类型判断结果
+ */
+baidu.lang.isString = function (source) {
+ return '[object String]' == Object.prototype.toString.call(source);
+};
+baidu.isString = baidu.lang.isString;
+
+
+/**
+ * 判断浏览器类型和特性的属性
+ * @namespace baidu.browser
+ */
+baidu.browser = baidu.browser || {};
+
+
+/**
+ * 判断是否为opera浏览器
+ * @property opera opera版本号
+ * @grammar baidu.browser.opera
+ * @meta standard
+ * @see baidu.browser.ie,baidu.browser.firefox,baidu.browser.safari,baidu.browser.chrome
+ * @returns {Number} opera版本号
+ */
+
+/**
+ * opera 从10开始不是用opera后面的字符串进行版本的判断
+ * 在Browser identification最后添加Version + 数字进行版本标识
+ * opera后面的数字保持在9.80不变
+ */
+baidu.browser.opera = /opera(\/| )(\d+(\.\d+)?)(.+?(version\/(\d+(\.\d+)?)))?/i.test(navigator.userAgent) ? + ( RegExp["\x246"] || RegExp["\x242"] ) : undefined;
+
+
+/**
+ * 在目标元素的指定位置插入HTML代码
+ * @name baidu.dom.insertHTML
+ * @function
+ * @grammar baidu.dom.insertHTML(element, position, html)
+ * @param {HTMLElement|string} element 目标元素或目标元素的id
+ * @param {string} position 插入html的位置信息,取值为beforeBegin,afterBegin,beforeEnd,afterEnd
+ * @param {string} html 要插入的html
+ * @remark
+ *
+ * 对于position参数,大小写不敏感
+ * 参数的意思:beforeBegin<span>afterBegin this is span! beforeEnd</span> afterEnd
+ * 此外,如果使用本函数插入带有script标签的HTML字符串,script标签对应的脚本将不会被执行。
+ *
+ * @shortcut insertHTML
+ * @meta standard
+ *
+ * @returns {HTMLElement} 目标元素
+ */
+baidu.dom.insertHTML = function (element, position, html) {
+ element = baidu.dom.g(element);
+ var range,begin;
+ if (element.insertAdjacentHTML && !baidu.browser.opera) {
+ element.insertAdjacentHTML(position, html);
+ } else {
+ range = element.ownerDocument.createRange();
+ position = position.toUpperCase();
+ if (position == 'AFTERBEGIN' || position == 'BEFOREEND') {
+ range.selectNodeContents(element);
+ range.collapse(position == 'AFTERBEGIN');
+ } else {
+ begin = position == 'BEFOREBEGIN';
+ range[begin ? 'setStartBefore' : 'setEndAfter'](element);
+ range.collapse(begin);
+ }
+ range.insertNode(range.createContextualFragment(html));
+ }
+ return element;
+};
+
+baidu.insertHTML = baidu.dom.insertHTML;
+
+/**
+ * 操作flash对象的方法,包括创建flash对象、获取flash对象以及判断flash插件的版本号
+ * @namespace baidu.swf
+ */
+baidu.swf = baidu.swf || {};
+
+
+/**
+ * 浏览器支持的flash插件版本
+ * @property version 浏览器支持的flash插件版本
+ * @grammar baidu.swf.version
+ * @return {String} 版本号
+ * @meta standard
+ */
+baidu.swf.version = (function () {
+ var n = navigator;
+ if (n.plugins && n.mimeTypes.length) {
+ var plugin = n.plugins["Shockwave Flash"];
+ if (plugin && plugin.description) {
+ return plugin.description
+ .replace(/([a-zA-Z]|\s)+/, "")
+ .replace(/(\s)+r/, ".") + ".0";
+ }
+ } else if (window.ActiveXObject && !window.opera) {
+ for (var i = 12; i >= 2; i--) {
+ try {
+ var c = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.' + i);
+ if (c) {
+ var version = c.GetVariable("$version");
+ return version.replace(/WIN/g,'').replace(/,/g,'.');
+ }
+ } catch(e) {}
+ }
+ }
+})();
+
+/**
+ * 操作字符串的方法
+ * @namespace baidu.string
+ */
+baidu.string = baidu.string || {};
+
+
+/**
+ * 对目标字符串进行html编码
+ * @name baidu.string.encodeHTML
+ * @function
+ * @grammar baidu.string.encodeHTML(source)
+ * @param {string} source 目标字符串
+ * @remark
+ * 编码字符有5个:&<>"'
+ * @shortcut encodeHTML
+ * @meta standard
+ * @see baidu.string.decodeHTML
+ *
+ * @returns {string} html编码后的字符串
+ */
+baidu.string.encodeHTML = function (source) {
+ return String(source)
+ .replace(/&/g,'&')
+ .replace(//g,'>')
+ .replace(/"/g, """)
+ .replace(/'/g, "'");
+};
+
+baidu.encodeHTML = baidu.string.encodeHTML;
+
+/**
+ * 创建flash对象的html字符串
+ * @name baidu.swf.createHTML
+ * @function
+ * @grammar baidu.swf.createHTML(options)
+ *
+ * @param {Object} options 创建flash的选项参数
+ * @param {string} options.id 要创建的flash的标识
+ * @param {string} options.url flash文件的url
+ * @param {String} options.errorMessage 未安装flash player或flash player版本号过低时的提示
+ * @param {string} options.ver 最低需要的flash player版本号
+ * @param {string} options.width flash的宽度
+ * @param {string} options.height flash的高度
+ * @param {string} options.align flash的对齐方式,允许值:middle/left/right/top/bottom
+ * @param {string} options.base 设置用于解析swf文件中的所有相对路径语句的基本目录或URL
+ * @param {string} options.bgcolor swf文件的背景色
+ * @param {string} options.salign 设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值:l/r/t/b/tl/tr/bl/br
+ * @param {boolean} options.menu 是否显示右键菜单,允许值:true/false
+ * @param {boolean} options.loop 播放到最后一帧时是否重新播放,允许值: true/false
+ * @param {boolean} options.play flash是否在浏览器加载时就开始播放。允许值:true/false
+ * @param {string} options.quality 设置flash播放的画质,允许值:low/medium/high/autolow/autohigh/best
+ * @param {string} options.scale 设置flash内容如何缩放来适应设置的宽高。允许值:showall/noborder/exactfit
+ * @param {string} options.wmode 设置flash的显示模式。允许值:window/opaque/transparent
+ * @param {string} options.allowscriptaccess 设置flash与页面的通信权限。允许值:always/never/sameDomain
+ * @param {string} options.allownetworking 设置swf文件中允许使用的网络API。允许值:all/internal/none
+ * @param {boolean} options.allowfullscreen 是否允许flash全屏。允许值:true/false
+ * @param {boolean} options.seamlesstabbing 允许设置执行无缝跳格,从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值:true/false
+ * @param {boolean} options.devicefont 设置静态文本对象是否以设备字体呈现。允许值:true/false
+ * @param {boolean} options.swliveconnect 第一次加载flash时浏览器是否应启动Java。允许值:true/false
+ * @param {Object} options.vars 要传递给flash的参数,支持JSON或string类型。
+ *
+ * @see baidu.swf.create
+ * @meta standard
+ * @returns {string} flash对象的html字符串
+ */
+baidu.swf.createHTML = function (options) {
+ options = options || {};
+ var version = baidu.swf.version,
+ needVersion = options['ver'] || '6.0.0',
+ vUnit1, vUnit2, i, k, len, item, tmpOpt = {},
+ encodeHTML = baidu.string.encodeHTML;
+ for (k in options) {
+ tmpOpt[k] = options[k];
+ }
+ options = tmpOpt;
+ if (version) {
+ version = version.split('.');
+ needVersion = needVersion.split('.');
+ for (i = 0; i < 3; i++) {
+ vUnit1 = parseInt(version[i], 10);
+ vUnit2 = parseInt(needVersion[i], 10);
+ if (vUnit2 < vUnit1) {
+ break;
+ } else if (vUnit2 > vUnit1) {
+ return '';
+ }
+ }
+ } else {
+ return '';
+ }
+
+ var vars = options['vars'],
+ objProperties = ['classid', 'codebase', 'id', 'width', 'height', 'align'];
+ options['align'] = options['align'] || 'middle';
+ options['classid'] = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000';
+ options['codebase'] = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0';
+ options['movie'] = options['url'] || '';
+ delete options['vars'];
+ delete options['url'];
+ if ('string' == typeof vars) {
+ options['flashvars'] = vars;
+ } else {
+ var fvars = [];
+ for (k in vars) {
+ item = vars[k];
+ fvars.push(k + "=" + encodeURIComponent(item));
+ }
+ options['flashvars'] = fvars.join('&');
+ }
+ var str = ['
');
+ var params = {
+ 'wmode' : 1,
+ 'scale' : 1,
+ 'quality' : 1,
+ 'play' : 1,
+ 'loop' : 1,
+ 'menu' : 1,
+ 'salign' : 1,
+ 'bgcolor' : 1,
+ 'base' : 1,
+ 'allowscriptaccess' : 1,
+ 'allownetworking' : 1,
+ 'allowfullscreen' : 1,
+ 'seamlesstabbing' : 1,
+ 'devicefont' : 1,
+ 'swliveconnect' : 1,
+ 'flashvars' : 1,
+ 'movie' : 1
+ };
+
+ for (k in options) {
+ item = options[k];
+ k = k.toLowerCase();
+ if (params[k] && (item || item === false || item === 0)) {
+ str.push(' ');
+ }
+ }
+ options['src'] = options['movie'];
+ options['name'] = options['id'];
+ delete options['id'];
+ delete options['movie'];
+ delete options['classid'];
+ delete options['codebase'];
+ options['type'] = 'application/x-shockwave-flash';
+ options['pluginspage'] = 'http://www.macromedia.com/go/getflashplayer';
+ str.push(' ');
+
+ return str.join('');
+};
+
+
+/**
+ * 在页面中创建一个flash对象
+ * @name baidu.swf.create
+ * @function
+ * @grammar baidu.swf.create(options[, container])
+ *
+ * @param {Object} options 创建flash的选项参数
+ * @param {string} options.id 要创建的flash的标识
+ * @param {string} options.url flash文件的url
+ * @param {String} options.errorMessage 未安装flash player或flash player版本号过低时的提示
+ * @param {string} options.ver 最低需要的flash player版本号
+ * @param {string} options.width flash的宽度
+ * @param {string} options.height flash的高度
+ * @param {string} options.align flash的对齐方式,允许值:middle/left/right/top/bottom
+ * @param {string} options.base 设置用于解析swf文件中的所有相对路径语句的基本目录或URL
+ * @param {string} options.bgcolor swf文件的背景色
+ * @param {string} options.salign 设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值:l/r/t/b/tl/tr/bl/br
+ * @param {boolean} options.menu 是否显示右键菜单,允许值:true/false
+ * @param {boolean} options.loop 播放到最后一帧时是否重新播放,允许值: true/false
+ * @param {boolean} options.play flash是否在浏览器加载时就开始播放。允许值:true/false
+ * @param {string} options.quality 设置flash播放的画质,允许值:low/medium/high/autolow/autohigh/best
+ * @param {string} options.scale 设置flash内容如何缩放来适应设置的宽高。允许值:showall/noborder/exactfit
+ * @param {string} options.wmode 设置flash的显示模式。允许值:window/opaque/transparent
+ * @param {string} options.allowscriptaccess 设置flash与页面的通信权限。允许值:always/never/sameDomain
+ * @param {string} options.allownetworking 设置swf文件中允许使用的网络API。允许值:all/internal/none
+ * @param {boolean} options.allowfullscreen 是否允许flash全屏。允许值:true/false
+ * @param {boolean} options.seamlesstabbing 允许设置执行无缝跳格,从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值:true/false
+ * @param {boolean} options.devicefont 设置静态文本对象是否以设备字体呈现。允许值:true/false
+ * @param {boolean} options.swliveconnect 第一次加载flash时浏览器是否应启动Java。允许值:true/false
+ * @param {Object} options.vars 要传递给flash的参数,支持JSON或string类型。
+ *
+ * @param {HTMLElement|string} [container] flash对象的父容器元素,不传递该参数时在当前代码位置创建flash对象。
+ * @meta standard
+ * @see baidu.swf.createHTML,baidu.swf.getMovie
+ */
+baidu.swf.create = function (options, target) {
+ options = options || {};
+ var html = baidu.swf.createHTML(options)
+ || options['errorMessage']
+ || '';
+
+ if (target && 'string' == typeof target) {
+ target = document.getElementById(target);
+ }
+ baidu.dom.insertHTML( target || document.body ,'beforeEnd',html );
+};
+/**
+ * 判断是否为ie浏览器
+ * @name baidu.browser.ie
+ * @field
+ * @grammar baidu.browser.ie
+ * @returns {Number} IE版本号
+ */
+baidu.browser.ie = baidu.ie = /msie (\d+\.\d+)/i.test(navigator.userAgent) ? (document.documentMode || + RegExp['\x241']) : undefined;
+
+/**
+ * 移除数组中的项
+ * @name baidu.array.remove
+ * @function
+ * @grammar baidu.array.remove(source, match)
+ * @param {Array} source 需要移除项的数组
+ * @param {Any} match 要移除的项
+ * @meta standard
+ * @see baidu.array.removeAt
+ *
+ * @returns {Array} 移除后的数组
+ */
+baidu.array.remove = function (source, match) {
+ var len = source.length;
+
+ while (len--) {
+ if (len in source && source[len] === match) {
+ source.splice(len, 1);
+ }
+ }
+ return source;
+};
+
+/**
+ * 判断目标参数是否Array对象
+ * @name baidu.lang.isArray
+ * @function
+ * @grammar baidu.lang.isArray(source)
+ * @param {Any} source 目标参数
+ * @meta standard
+ * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate
+ *
+ * @returns {boolean} 类型判断结果
+ */
+baidu.lang.isArray = function (source) {
+ return '[object Array]' == Object.prototype.toString.call(source);
+};
+
+
+
+/**
+ * 将一个变量转换成array
+ * @name baidu.lang.toArray
+ * @function
+ * @grammar baidu.lang.toArray(source)
+ * @param {mix} source 需要转换成array的变量
+ * @version 1.3
+ * @meta standard
+ * @returns {array} 转换后的array
+ */
+baidu.lang.toArray = function (source) {
+ if (source === null || source === undefined)
+ return [];
+ if (baidu.lang.isArray(source))
+ return source;
+ if (typeof source.length !== 'number' || typeof source === 'string' || baidu.lang.isFunction(source)) {
+ return [source];
+ }
+ if (source.item) {
+ var l = source.length, array = new Array(l);
+ while (l--)
+ array[l] = source[l];
+ return array;
+ }
+
+ return [].slice.call(source);
+};
+
+/**
+ * 获得flash对象的实例
+ * @name baidu.swf.getMovie
+ * @function
+ * @grammar baidu.swf.getMovie(name)
+ * @param {string} name flash对象的名称
+ * @see baidu.swf.create
+ * @meta standard
+ * @returns {HTMLElement} flash对象的实例
+ */
+baidu.swf.getMovie = function (name) {
+ var movie = document[name], ret;
+ return baidu.browser.ie == 9 ?
+ movie && movie.length ?
+ (ret = baidu.array.remove(baidu.lang.toArray(movie),function(item){
+ return item.tagName.toLowerCase() != "embed";
+ })).length == 1 ? ret[0] : ret
+ : movie
+ : movie || window[name];
+};
+
+
+baidu.flash._Base = (function(){
+
+ var prefix = 'bd__flash__';
+
+ /**
+ * 创建一个随机的字符串
+ * @private
+ * @return {String}
+ */
+ function _createString(){
+ return prefix + Math.floor(Math.random() * 2147483648).toString(36);
+ };
+
+ /**
+ * 检查flash状态
+ * @private
+ * @param {Object} target flash对象
+ * @return {Boolean}
+ */
+ function _checkReady(target){
+ if(typeof target !== 'undefined' && typeof target.flashInit !== 'undefined' && target.flashInit()){
+ return true;
+ }else{
+ return false;
+ }
+ };
+
+ /**
+ * 调用之前进行压栈的函数
+ * @private
+ * @param {Array} callQueue 调用队列
+ * @param {Object} target flash对象
+ * @return {Null}
+ */
+ function _callFn(callQueue, target){
+ var result = null;
+
+ callQueue = callQueue.reverse();
+ baidu.each(callQueue, function(item){
+ result = target.call(item.fnName, item.params);
+ item.callBack(result);
+ });
+ };
+
+ /**
+ * 为传入的匿名函数创建函数名
+ * @private
+ * @param {String|Function} fun 传入的匿名函数或者函数名
+ * @return {String}
+ */
+ function _createFunName(fun){
+ var name = '';
+
+ if(baidu.lang.isFunction(fun)){
+ name = _createString();
+ window[name] = function(){
+ fun.apply(window, arguments);
+ };
+
+ return name;
+ }else if(baidu.lang.isString){
+ return fun;
+ }
+ };
+
+ /**
+ * 绘制flash
+ * @private
+ * @param {Object} options 创建参数
+ * @return {Object}
+ */
+ function _render(options){
+ if(!options.id){
+ options.id = _createString();
+ }
+
+ var container = options.container || '';
+ delete(options.container);
+
+ baidu.swf.create(options, container);
+
+ return baidu.swf.getMovie(options.id);
+ };
+
+ return function(options, callBack){
+ var me = this,
+ autoRender = (typeof options.autoRender !== 'undefined' ? options.autoRender : true),
+ createOptions = options.createOptions || {},
+ target = null,
+ isReady = false,
+ callQueue = [],
+ timeHandle = null,
+ callBack = callBack || [];
+
+ /**
+ * 将flash文件绘制到页面上
+ * @public
+ * @return {Null}
+ */
+ me.render = function(){
+ target = _render(createOptions);
+
+ if(callBack.length > 0){
+ baidu.each(callBack, function(funName, index){
+ callBack[index] = _createFunName(options[funName] || new Function());
+ });
+ }
+ me.call('setJSFuncName', [callBack]);
+ };
+
+ /**
+ * 返回flash状态
+ * @return {Boolean}
+ */
+ me.isReady = function(){
+ return isReady;
+ };
+
+ /**
+ * 调用flash接口的统一入口
+ * @param {String} fnName 调用的函数名
+ * @param {Array} params 传入的参数组成的数组,若不许要参数,需传入空数组
+ * @param {Function} [callBack] 异步调用后将返回值作为参数的调用回调函数,如无返回值,可以不传入此参数
+ * @return {Null}
+ */
+ me.call = function(fnName, params, callBack){
+ if(!fnName) return null;
+ callBack = callBack || new Function();
+
+ var result = null;
+
+ if(isReady){
+ result = target.call(fnName, params);
+ callBack(result);
+ }else{
+ callQueue.push({
+ fnName: fnName,
+ params: params,
+ callBack: callBack
+ });
+
+ (!timeHandle) && (timeHandle = setInterval(_check, 200));
+ }
+ };
+
+ /**
+ * 为传入的匿名函数创建函数名
+ * @public
+ * @param {String|Function} fun 传入的匿名函数或者函数名
+ * @return {String}
+ */
+ me.createFunName = function(fun){
+ return _createFunName(fun);
+ };
+
+ /**
+ * 检查flash是否ready, 并进行调用
+ * @private
+ * @return {Null}
+ */
+ function _check(){
+ if(_checkReady(target)){
+ clearInterval(timeHandle);
+ timeHandle = null;
+ _call();
+
+ isReady = true;
+ }
+ };
+
+ /**
+ * 调用之前进行压栈的函数
+ * @private
+ * @return {Null}
+ */
+ function _call(){
+ _callFn(callQueue, target);
+ callQueue = [];
+ }
+
+ autoRender && me.render();
+ };
+})();
+
+
+
+/**
+ * 创建flash based imageUploader
+ * @class
+ * @grammar baidu.flash.imageUploader(options)
+ * @param {Object} createOptions 创建flash时需要的参数,请参照baidu.swf.create文档
+ * @config {Object} vars 创建imageUploader时所需要的参数
+ * @config {Number} vars.gridWidth 每一个预览图片所占的宽度,应该为flash寛的整除
+ * @config {Number} vars.gridHeight 每一个预览图片所占的高度,应该为flash高的整除
+ * @config {Number} vars.picWidth 单张预览图片的宽度
+ * @config {Number} vars.picHeight 单张预览图片的高度
+ * @config {String} vars.uploadDataFieldName POST请求中图片数据的key,默认值'picdata'
+ * @config {String} vars.picDescFieldName POST请求中图片描述的key,默认值'picDesc'
+ * @config {Number} vars.maxSize 文件的最大体积,单位'MB'
+ * @config {Number} vars.compressSize 上传前如果图片体积超过该值,会先压缩
+ * @config {Number} vars.maxNum:32 最大上传多少个文件
+ * @config {Number} vars.compressLength 能接受的最大边长,超过该值会等比压缩
+ * @config {String} vars.url 上传的url地址
+ * @config {Number} vars.mode mode == 0时,是使用滚动条,mode == 1时,拉伸flash, 默认值为0
+ * @see baidu.swf.createHTML
+ * @param {String} backgroundUrl 背景图片路径
+ * @param {String} listBacgroundkUrl 布局控件背景
+ * @param {String} buttonUrl 按钮图片不背景
+ * @param {String|Function} selectFileCallback 选择文件的回调
+ * @param {String|Function} exceedFileCallback文件超出限制的最大体积时的回调
+ * @param {String|Function} deleteFileCallback 删除文件的回调
+ * @param {String|Function} startUploadCallback 开始上传某个文件时的回调
+ * @param {String|Function} uploadCompleteCallback 某个文件上传完成的回调
+ * @param {String|Function} uploadErrorCallback 某个文件上传失败的回调
+ * @param {String|Function} allCompleteCallback 全部上传完成时的回调
+ * @param {String|Function} changeFlashHeight 改变Flash的高度,mode==1的时候才有用
+ */
+baidu.flash.imageUploader = baidu.flash.imageUploader || function(options){
+
+ var me = this,
+ options = options || {},
+ _flash = new baidu.flash._Base(options, [
+ 'selectFileCallback',
+ 'exceedFileCallback',
+ 'deleteFileCallback',
+ 'startUploadCallback',
+ 'uploadCompleteCallback',
+ 'uploadErrorCallback',
+ 'allCompleteCallback',
+ 'changeFlashHeight'
+ ]);
+ /**
+ * 开始或回复上传图片
+ * @public
+ * @return {Null}
+ */
+ me.upload = function(){
+ _flash.call('upload');
+ };
+
+ /**
+ * 暂停上传图片
+ * @public
+ * @return {Null}
+ */
+ me.pause = function(){
+ _flash.call('pause');
+ };
+ me.addCustomizedParams = function(index,obj){
+ _flash.call('addCustomizedParams',[index,obj]);
+ }
+};
+
+/**
+ * 操作原生对象的方法
+ * @namespace baidu.object
+ */
+baidu.object = baidu.object || {};
+
+
+/**
+ * 将源对象的所有属性拷贝到目标对象中
+ * @author erik
+ * @name baidu.object.extend
+ * @function
+ * @grammar baidu.object.extend(target, source)
+ * @param {Object} target 目标对象
+ * @param {Object} source 源对象
+ * @see baidu.array.merge
+ * @remark
+ *
+1.目标对象中,与源对象key相同的成员将会被覆盖。
+2.源对象的prototype成员不会拷贝。
+
+ * @shortcut extend
+ * @meta standard
+ *
+ * @returns {Object} 目标对象
+ */
+baidu.extend =
+baidu.object.extend = function (target, source) {
+ for (var p in source) {
+ if (source.hasOwnProperty(p)) {
+ target[p] = source[p];
+ }
+ }
+
+ return target;
+};
+
+
+
+
+
+/**
+ * 创建flash based fileUploader
+ * @class
+ * @grammar baidu.flash.fileUploader(options)
+ * @param {Object} options
+ * @config {Object} createOptions 创建flash时需要的参数,请参照baidu.swf.create文档
+ * @config {String} createOptions.width
+ * @config {String} createOptions.height
+ * @config {Number} maxNum 最大可选文件数
+ * @config {Function|String} selectFile
+ * @config {Function|String} exceedMaxSize
+ * @config {Function|String} deleteFile
+ * @config {Function|String} uploadStart
+ * @config {Function|String} uploadComplete
+ * @config {Function|String} uploadError
+ * @config {Function|String} uploadProgress
+ */
+baidu.flash.fileUploader = baidu.flash.fileUploader || function(options){
+ var me = this,
+ options = options || {};
+
+ options.createOptions = baidu.extend({
+ wmod: 'transparent'
+ },options.createOptions || {});
+
+ var _flash = new baidu.flash._Base(options, [
+ 'selectFile',
+ 'exceedMaxSize',
+ 'deleteFile',
+ 'uploadStart',
+ 'uploadComplete',
+ 'uploadError',
+ 'uploadProgress'
+ ]);
+
+ _flash.call('setMaxNum', options.maxNum ? [options.maxNum] : [1]);
+
+ /**
+ * 设置当鼠标移动到flash上时,是否变成手型
+ * @public
+ * @param {Boolean} isCursor
+ * @return {Null}
+ */
+ me.setHandCursor = function(isCursor){
+ _flash.call('setHandCursor', [isCursor || false]);
+ };
+
+ /**
+ * 设置鼠标相应函数名
+ * @param {String|Function} fun
+ */
+ me.setMSFunName = function(fun){
+ _flash.call('setMSFunName',[_flash.createFunName(fun)]);
+ };
+
+ /**
+ * 执行上传操作
+ * @param {String} url 上传的url
+ * @param {String} fieldName 上传的表单字段名
+ * @param {Object} postData 键值对,上传的POST数据
+ * @param {Number|Array|null|-1} [index]上传的文件序列
+ * Int值上传该文件
+ * Array一次串行上传该序列文件
+ * -1/null上传所有文件
+ * @return {Null}
+ */
+ me.upload = function(url, fieldName, postData, index){
+
+ if(typeof url !== 'string' || typeof fieldName !== 'string') return null;
+ if(typeof index === 'undefined') index = -1;
+
+ _flash.call('upload', [url, fieldName, postData, index]);
+ };
+
+ /**
+ * 取消上传操作
+ * @public
+ * @param {Number|-1} index
+ */
+ me.cancel = function(index){
+ if(typeof index === 'undefined') index = -1;
+ _flash.call('cancel', [index]);
+ };
+
+ /**
+ * 删除文件
+ * @public
+ * @param {Number|Array} [index] 要删除的index,不传则全部删除
+ * @param {Function} callBack
+ * */
+ me.deleteFile = function(index, callBack){
+
+ var callBackAll = function(list){
+ callBack && callBack(list);
+ };
+
+ if(typeof index === 'undefined'){
+ _flash.call('deleteFilesAll', [], callBackAll);
+ return;
+ };
+
+ if(typeof index === 'Number') index = [index];
+ index.sort(function(a,b){
+ return b-a;
+ });
+ baidu.each(index, function(item){
+ _flash.call('deleteFileBy', item, callBackAll);
+ });
+ };
+
+ /**
+ * 添加文件类型,支持macType
+ * @public
+ * @param {Object|Array[Object]} type {description:String, extention:String}
+ * @return {Null};
+ */
+ me.addFileType = function(type){
+ var type = type || [[]];
+
+ if(type instanceof Array) type = [type];
+ else type = [[type]];
+ _flash.call('addFileTypes', type);
+ };
+
+ /**
+ * 设置文件类型,支持macType
+ * @public
+ * @param {Object|Array[Object]} type {description:String, extention:String}
+ * @return {Null};
+ */
+ me.setFileType = function(type){
+ var type = type || [[]];
+
+ if(type instanceof Array) type = [type];
+ else type = [[type]];
+ _flash.call('setFileTypes', type);
+ };
+
+ /**
+ * 设置可选文件的数量限制
+ * @public
+ * @param {Number} num
+ * @return {Null}
+ */
+ me.setMaxNum = function(num){
+ _flash.call('setMaxNum', [num]);
+ };
+
+ /**
+ * 设置可选文件大小限制,以兆M为单位
+ * @public
+ * @param {Number} num,0为无限制
+ * @return {Null}
+ */
+ me.setMaxSize = function(num){
+ _flash.call('setMaxSize', [num]);
+ };
+
+ /**
+ * @public
+ */
+ me.getFileAll = function(callBack){
+ _flash.call('getFileAll', [], callBack);
+ };
+
+ /**
+ * @public
+ * @param {Number} index
+ * @param {Function} [callBack]
+ */
+ me.getFileByIndex = function(index, callBack){
+ _flash.call('getFileByIndex', [], callBack);
+ };
+
+ /**
+ * @public
+ * @param {Number} index
+ * @param {function} [callBack]
+ */
+ me.getStatusByIndex = function(index, callBack){
+ _flash.call('getStatusByIndex', [], callBack);
+ };
+};
+
+/**
+ * 使用动态script标签请求服务器资源,包括由服务器端的回调和浏览器端的回调
+ * @namespace baidu.sio
+ */
+baidu.sio = baidu.sio || {};
+
+/**
+ *
+ * @param {HTMLElement} src script节点
+ * @param {String} url script节点的地址
+ * @param {String} [charset] 编码
+ */
+baidu.sio._createScriptTag = function(scr, url, charset){
+ scr.setAttribute('type', 'text/javascript');
+ charset && scr.setAttribute('charset', charset);
+ scr.setAttribute('src', url);
+ document.getElementsByTagName('head')[0].appendChild(scr);
+};
+
+/**
+ * 删除script的属性,再删除script标签,以解决修复内存泄漏的问题
+ *
+ * @param {HTMLElement} src script节点
+ */
+baidu.sio._removeScriptTag = function(scr){
+ if (scr.clearAttributes) {
+ scr.clearAttributes();
+ } else {
+ for (var attr in scr) {
+ if (scr.hasOwnProperty(attr)) {
+ delete scr[attr];
+ }
+ }
+ }
+ if(scr && scr.parentNode){
+ scr.parentNode.removeChild(scr);
+ }
+ scr = null;
+};
+
+
+/**
+ * 通过script标签加载数据,加载完成由浏览器端触发回调
+ * @name baidu.sio.callByBrowser
+ * @function
+ * @grammar baidu.sio.callByBrowser(url, opt_callback, opt_options)
+ * @param {string} url 加载数据的url
+ * @param {Function|string} opt_callback 数据加载结束时调用的函数或函数名
+ * @param {Object} opt_options 其他可选项
+ * @config {String} [charset] script的字符集
+ * @config {Integer} [timeOut] 超时时间,超过这个时间将不再响应本请求,并触发onfailure函数
+ * @config {Function} [onfailure] timeOut设定后才生效,到达超时时间时触发本函数
+ * @remark
+ * 1、与callByServer不同,callback参数只支持Function类型,不支持string。
+ * 2、如果请求了一个不存在的页面,callback函数在IE/opera下也会被调用,因此使用者需要在onsuccess函数中判断数据是否正确加载。
+ * @meta standard
+ * @see baidu.sio.callByServer
+ */
+baidu.sio.callByBrowser = function (url, opt_callback, opt_options) {
+ var scr = document.createElement("SCRIPT"),
+ scriptLoaded = 0,
+ options = opt_options || {},
+ charset = options['charset'],
+ callback = opt_callback || function(){},
+ timeOut = options['timeOut'] || 0,
+ timer;
+ scr.onload = scr.onreadystatechange = function () {
+ if (scriptLoaded) {
+ return;
+ }
+
+ var readyState = scr.readyState;
+ if ('undefined' == typeof readyState
+ || readyState == "loaded"
+ || readyState == "complete") {
+ scriptLoaded = 1;
+ try {
+ callback();
+ clearTimeout(timer);
+ } finally {
+ scr.onload = scr.onreadystatechange = null;
+ baidu.sio._removeScriptTag(scr);
+ }
+ }
+ };
+
+ if( timeOut ){
+ timer = setTimeout(function(){
+ scr.onload = scr.onreadystatechange = null;
+ baidu.sio._removeScriptTag(scr);
+ options.onfailure && options.onfailure();
+ }, timeOut);
+ }
+
+ baidu.sio._createScriptTag(scr, url, charset);
+};
+
+/**
+ * 通过script标签加载数据,加载完成由服务器端触发回调
+ * @name baidu.sio.callByServer
+ * @function
+ * @grammar baidu.sio.callByServer(url, callback[, opt_options])
+ * @param {string} url 加载数据的url.
+ * @param {Function|string} callback 服务器端调用的函数或函数名。如果没有指定本参数,将在URL中寻找options['queryField']做为callback的方法名.
+ * @param {Object} opt_options 加载数据时的选项.
+ * @config {string} [charset] script的字符集
+ * @config {string} [queryField] 服务器端callback请求字段名,默认为callback
+ * @config {Integer} [timeOut] 超时时间(单位:ms),超过这个时间将不再响应本请求,并触发onfailure函数
+ * @config {Function} [onfailure] timeOut设定后才生效,到达超时时间时触发本函数
+ * @remark
+ * 如果url中已经包含key为“options['queryField']”的query项,将会被替换成callback中参数传递或自动生成的函数名。
+ * @meta standard
+ * @see baidu.sio.callByBrowser
+ */
+baidu.sio.callByServer = /**@function*/function(url, callback, opt_options) {
+ var scr = document.createElement('SCRIPT'),
+ prefix = 'bd__cbs__',
+ callbackName,
+ callbackImpl,
+ options = opt_options || {},
+ charset = options['charset'],
+ queryField = options['queryField'] || 'callback',
+ timeOut = options['timeOut'] || 0,
+ timer,
+ reg = new RegExp('(\\?|&)' + queryField + '=([^&]*)'),
+ matches;
+
+ if (baidu.lang.isFunction(callback)) {
+ callbackName = prefix + Math.floor(Math.random() * 2147483648).toString(36);
+ window[callbackName] = getCallBack(0);
+ } else if(baidu.lang.isString(callback)){
+ callbackName = callback;
+ } else {
+ if (matches = reg.exec(url)) {
+ callbackName = matches[2];
+ }
+ }
+
+ if( timeOut ){
+ timer = setTimeout(getCallBack(1), timeOut);
+ }
+ url = url.replace(reg, '\x241' + queryField + '=' + callbackName);
+
+ if (url.search(reg) < 0) {
+ url += (url.indexOf('?') < 0 ? '?' : '&') + queryField + '=' + callbackName;
+ }
+ baidu.sio._createScriptTag(scr, url, charset);
+
+ /*
+ * 返回一个函数,用于立即(挂在window上)或者超时(挂在setTimeout中)时执行
+ */
+ function getCallBack(onTimeOut){
+ /*global callbackName, callback, scr, options;*/
+ return function(){
+ try {
+ if( onTimeOut ){
+ options.onfailure && options.onfailure();
+ }else{
+ callback.apply(window, arguments);
+ clearTimeout(timer);
+ }
+ window[callbackName] = null;
+ delete window[callbackName];
+ } catch (exception) {
+ } finally {
+ baidu.sio._removeScriptTag(scr);
+ }
+ }
+ }
+};
+
+/**
+ * 通过请求一个图片的方式令服务器存储一条日志
+ * @function
+ * @grammar baidu.sio.log(url)
+ * @param {string} url 要发送的地址.
+ * @author: int08h,leeight
+ */
+baidu.sio.log = function(url) {
+ var img = new Image(),
+ key = 'tangram_sio_log_' + Math.floor(Math.random() *
+ 2147483648).toString(36);
+ window[key] = img;
+
+ img.onload = img.onerror = img.onabort = function() {
+ img.onload = img.onerror = img.onabort = null;
+
+ window[key] = null;
+ img = null;
+ };
+ img.src = url;
+};
+
+
+
+/*
+ * Tangram
+ * Copyright 2009 Baidu Inc. All rights reserved.
+ *
+ * path: baidu/json.js
+ * author: erik
+ * version: 1.1.0
+ * date: 2009/12/02
+ */
+
+
+/**
+ * 操作json对象的方法
+ * @namespace baidu.json
+ */
+baidu.json = baidu.json || {};
+/*
+ * Tangram
+ * Copyright 2009 Baidu Inc. All rights reserved.
+ *
+ * path: baidu/json/parse.js
+ * author: erik, berg
+ * version: 1.2
+ * date: 2009/11/23
+ */
+
+
+
+/**
+ * 将字符串解析成json对象。注:不会自动祛除空格
+ * @name baidu.json.parse
+ * @function
+ * @grammar baidu.json.parse(data)
+ * @param {string} source 需要解析的字符串
+ * @remark
+ * 该方法的实现与ecma-262第五版中规定的JSON.parse不同,暂时只支持传入一个参数。后续会进行功能丰富。
+ * @meta standard
+ * @see baidu.json.stringify,baidu.json.decode
+ *
+ * @returns {JSON} 解析结果json对象
+ */
+baidu.json.parse = function (data) {
+ //2010/12/09:更新至不使用原生parse,不检测用户输入是否正确
+ return (new Function("return (" + data + ")"))();
+};
+/*
+ * Tangram
+ * Copyright 2009 Baidu Inc. All rights reserved.
+ *
+ * path: baidu/json/decode.js
+ * author: erik, cat
+ * version: 1.3.4
+ * date: 2010/12/23
+ */
+
+
+
+/**
+ * 将字符串解析成json对象,为过时接口,今后会被baidu.json.parse代替
+ * @name baidu.json.decode
+ * @function
+ * @grammar baidu.json.decode(source)
+ * @param {string} source 需要解析的字符串
+ * @meta out
+ * @see baidu.json.encode,baidu.json.parse
+ *
+ * @returns {JSON} 解析结果json对象
+ */
+baidu.json.decode = baidu.json.parse;
+/*
+ * Tangram
+ * Copyright 2009 Baidu Inc. All rights reserved.
+ *
+ * path: baidu/json/stringify.js
+ * author: erik
+ * version: 1.1.0
+ * date: 2010/01/11
+ */
+
+
+
+/**
+ * 将json对象序列化
+ * @name baidu.json.stringify
+ * @function
+ * @grammar baidu.json.stringify(value)
+ * @param {JSON} value 需要序列化的json对象
+ * @remark
+ * 该方法的实现与ecma-262第五版中规定的JSON.stringify不同,暂时只支持传入一个参数。后续会进行功能丰富。
+ * @meta standard
+ * @see baidu.json.parse,baidu.json.encode
+ *
+ * @returns {string} 序列化后的字符串
+ */
+baidu.json.stringify = (function () {
+ /**
+ * 字符串处理时需要转义的字符表
+ * @private
+ */
+ var escapeMap = {
+ "\b": '\\b',
+ "\t": '\\t',
+ "\n": '\\n',
+ "\f": '\\f',
+ "\r": '\\r',
+ '"' : '\\"',
+ "\\": '\\\\'
+ };
+
+ /**
+ * 字符串序列化
+ * @private
+ */
+ function encodeString(source) {
+ if (/["\\\x00-\x1f]/.test(source)) {
+ source = source.replace(
+ /["\\\x00-\x1f]/g,
+ function (match) {
+ var c = escapeMap[match];
+ if (c) {
+ return c;
+ }
+ c = match.charCodeAt();
+ return "\\u00"
+ + Math.floor(c / 16).toString(16)
+ + (c % 16).toString(16);
+ });
+ }
+ return '"' + source + '"';
+ }
+
+ /**
+ * 数组序列化
+ * @private
+ */
+ function encodeArray(source) {
+ var result = ["["],
+ l = source.length,
+ preComma, i, item;
+
+ for (i = 0; i < l; i++) {
+ item = source[i];
+
+ switch (typeof item) {
+ case "undefined":
+ case "function":
+ case "unknown":
+ break;
+ default:
+ if(preComma) {
+ result.push(',');
+ }
+ result.push(baidu.json.stringify(item));
+ preComma = 1;
+ }
+ }
+ result.push("]");
+ return result.join("");
+ }
+
+ /**
+ * 处理日期序列化时的补零
+ * @private
+ */
+ function pad(source) {
+ return source < 10 ? '0' + source : source;
+ }
+
+ /**
+ * 日期序列化
+ * @private
+ */
+ function encodeDate(source){
+ return '"' + source.getFullYear() + "-"
+ + pad(source.getMonth() + 1) + "-"
+ + pad(source.getDate()) + "T"
+ + pad(source.getHours()) + ":"
+ + pad(source.getMinutes()) + ":"
+ + pad(source.getSeconds()) + '"';
+ }
+
+ return function (value) {
+ switch (typeof value) {
+ case 'undefined':
+ return 'undefined';
+
+ case 'number':
+ return isFinite(value) ? String(value) : "null";
+
+ case 'string':
+ return encodeString(value);
+
+ case 'boolean':
+ return String(value);
+
+ default:
+ if (value === null) {
+ return 'null';
+ } else if (value instanceof Array) {
+ return encodeArray(value);
+ } else if (value instanceof Date) {
+ return encodeDate(value);
+ } else {
+ var result = ['{'],
+ encode = baidu.json.stringify,
+ preComma,
+ item;
+
+ for (var key in value) {
+ if (Object.prototype.hasOwnProperty.call(value, key)) {
+ item = value[key];
+ switch (typeof item) {
+ case 'undefined':
+ case 'unknown':
+ case 'function':
+ break;
+ default:
+ if (preComma) {
+ result.push(',');
+ }
+ preComma = 1;
+ result.push(encode(key) + ':' + encode(item));
+ }
+ }
+ }
+ result.push('}');
+ return result.join('');
+ }
+ }
+ };
+})();
+/*
+ * Tangram
+ * Copyright 2009 Baidu Inc. All rights reserved.
+ *
+ * path: baidu/json/encode.js
+ * author: erik, cat
+ * version: 1.3.4
+ * date: 2010/12/23
+ */
+
+
+
+/**
+ * 将json对象序列化,为过时接口,今后会被baidu.json.stringify代替
+ * @name baidu.json.encode
+ * @function
+ * @grammar baidu.json.encode(value)
+ * @param {JSON} value 需要序列化的json对象
+ * @meta out
+ * @see baidu.json.decode,baidu.json.stringify
+ *
+ * @returns {string} 序列化后的字符串
+ */
+baidu.json.encode = baidu.json.stringify;
diff --git a/public/static/admin_static/lib/ueditor/dialogs/wordimage/wordimage.html b/public/static/admin_static/lib/ueditor/dialogs/wordimage/wordimage.html
new file mode 100644
index 0000000..6cf6067
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/wordimage/wordimage.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/dialogs/wordimage/wordimage.js b/public/static/admin_static/lib/ueditor/dialogs/wordimage/wordimage.js
new file mode 100644
index 0000000..98f3a22
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/dialogs/wordimage/wordimage.js
@@ -0,0 +1,157 @@
+/**
+ * Created by JetBrains PhpStorm.
+ * User: taoqili
+ * Date: 12-1-30
+ * Time: 下午12:50
+ * To change this template use File | Settings | File Templates.
+ */
+
+
+
+var wordImage = {};
+//(function(){
+var g = baidu.g,
+ flashObj,flashContainer;
+
+wordImage.init = function(opt, callbacks) {
+ showLocalPath("localPath");
+ //createCopyButton("clipboard","localPath");
+ createFlashUploader(opt, callbacks);
+ addUploadListener();
+ addOkListener();
+};
+
+function hideFlash(){
+ flashObj = null;
+ flashContainer.innerHTML = "";
+}
+function addOkListener() {
+ dialog.onok = function() {
+ if (!imageUrls.length) return;
+ var urlPrefix = editor.getOpt('imageUrlPrefix'),
+ images = domUtils.getElementsByTagName(editor.document,"img");
+ editor.fireEvent('saveScene');
+ for (var i = 0,img; img = images[i++];) {
+ var src = img.getAttribute("word_img");
+ if (!src) continue;
+ for (var j = 0,url; url = imageUrls[j++];) {
+ if (src.indexOf(url.original.replace(" ","")) != -1) {
+ img.src = urlPrefix + url.url;
+ img.setAttribute("_src", urlPrefix + url.url); //同时修改"_src"属性
+ img.setAttribute("title",url.title);
+ domUtils.removeAttributes(img, ["word_img","style","width","height"]);
+ editor.fireEvent("selectionchange");
+ break;
+ }
+ }
+ }
+ editor.fireEvent('saveScene');
+ hideFlash();
+ };
+ dialog.oncancel = function(){
+ hideFlash();
+ }
+}
+
+/**
+ * 绑定开始上传事件
+ */
+function addUploadListener() {
+ g("upload").onclick = function () {
+ flashObj.upload();
+ this.style.display = "none";
+ };
+}
+
+function showLocalPath(id) {
+ //单张编辑
+ var img = editor.selection.getRange().getClosedNode();
+ var images = editor.execCommand('wordimage');
+ if(images.length==1 || img && img.tagName == 'IMG'){
+ g(id).value = images[0];
+ return;
+ }
+ var path = images[0];
+ var leftSlashIndex = path.lastIndexOf("/")||0, //不同版本的doc和浏览器都可能影响到这个符号,故直接判断两种
+ rightSlashIndex = path.lastIndexOf("\\")||0,
+ separater = leftSlashIndex > rightSlashIndex ? "/":"\\" ;
+
+ path = path.substring(0, path.lastIndexOf(separater)+1);
+ g(id).value = path;
+}
+
+function createFlashUploader(opt, callbacks) {
+ //由于lang.flashI18n是静态属性,不可以直接进行修改,否则会影响到后续内容
+ var i18n = utils.extend({},lang.flashI18n);
+ //处理图片资源地址的编码,补全等问题
+ for(var i in i18n){
+ if(!(i in {"lang":1,"uploadingTF":1,"imageTF":1,"textEncoding":1}) && i18n[i]){
+ i18n[i] = encodeURIComponent(editor.options.langPath + editor.options.lang + "/images/" + i18n[i]);
+ }
+ }
+ opt = utils.extend(opt,i18n,false);
+ var option = {
+ createOptions:{
+ id:'flash',
+ url:opt.flashUrl,
+ width:opt.width,
+ height:opt.height,
+ errorMessage:lang.flashError,
+ wmode:browser.safari ? 'transparent' : 'window',
+ ver:'10.0.0',
+ vars:opt,
+ container:opt.container
+ }
+ };
+
+ option = extendProperty(callbacks, option);
+ flashObj = new baidu.flash.imageUploader(option);
+ flashContainer = $G(opt.container);
+}
+
+function extendProperty(fromObj, toObj) {
+ for (var i in fromObj) {
+ if (!toObj[i]) {
+ toObj[i] = fromObj[i];
+ }
+ }
+ return toObj;
+}
+
+//})();
+
+function getPasteData(id) {
+ baidu.g("msg").innerHTML = lang.copySuccess + "";
+ setTimeout(function() {
+ baidu.g("msg").innerHTML = "";
+ }, 5000);
+ return baidu.g(id).value;
+}
+
+function createCopyButton(id, dataFrom) {
+ baidu.swf.create({
+ id:"copyFlash",
+ url:"fClipboard_ueditor.swf",
+ width:"58",
+ height:"25",
+ errorMessage:"",
+ bgColor:"#CBCBCB",
+ wmode:"transparent",
+ ver:"10.0.0",
+ vars:{
+ tid:dataFrom
+ }
+ }, id
+ );
+
+ var clipboard = baidu.swf.getMovie("copyFlash");
+ var clipinterval = setInterval(function() {
+ if (clipboard && clipboard.flashInit) {
+ clearInterval(clipinterval);
+ clipboard.setHandCursor(true);
+ clipboard.setContentFuncName("getPasteData");
+ //clipboard.setMEFuncName("mouseEventHandler");
+ }
+ }, 500);
+}
+createCopyButton("clipboard", "localPath");
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/index.html b/public/static/admin_static/lib/ueditor/index.html
new file mode 100644
index 0000000..a416418
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/index.html
@@ -0,0 +1,175 @@
+
+
+
+
完整demo
+
+
+
+
+
+
+
+
+
+
+
+
完整demo
+
+
+
+
+ 获得整个html的内容
+ 获得内容
+ 写入内容
+ 追加内容
+ 获得纯文本
+ 获得带格式的纯文本
+ 判断是否有内容
+ 使编辑器获得焦点
+ 编辑器是否获得焦点
+ 编辑器失去焦点
+
+
+
+ 获得当前选中的文本
+ 插入给定的内容
+ 可以编辑
+ 不可编辑
+ 隐藏编辑器
+ 显示编辑器
+ 设置高度为300默认关闭了自动长高
+
+
+
+ 获取草稿箱内容
+ 清空草稿箱
+
+
+
+
+
+ 创建编辑器
+
+ 删除编辑器
+
+
+
+
+
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/lang/en/en.js b/public/static/admin_static/lib/ueditor/lang/en/en.js
new file mode 100644
index 0000000..c7e22f5
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/lang/en/en.js
@@ -0,0 +1,684 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: taoqili
+ * Date: 12-6-12
+ * Time: 下午6:57
+ * To change this template use File | Settings | File Templates.
+ */
+UE.I18N['en'] = {
+ 'labelMap':{
+ 'anchor':'Anchor', 'undo':'Undo', 'redo':'Redo', 'bold':'Bold', 'indent':'Indent', 'snapscreen':'SnapScreen',
+ 'italic':'Italic', 'underline':'Underline', 'strikethrough':'Strikethrough', 'subscript':'SubScript','fontborder':'text border',
+ 'superscript':'SuperScript', 'formatmatch':'Format Match', 'source':'Source', 'blockquote':'BlockQuote',
+ 'pasteplain':'PastePlain', 'selectall':'SelectAll', 'print':'Print', 'preview':'Preview',
+ 'horizontal':'Horizontal', 'removeformat':'RemoveFormat', 'time':'Time', 'date':'Date',
+ 'unlink':'Unlink', 'insertrow':'InsertRow', 'insertcol':'InsertCol', 'mergeright':'MergeRight', 'mergedown':'MergeDown',
+ 'deleterow':'DeleteRow', 'deletecol':'DeleteCol', 'splittorows':'SplitToRows','insertcode':'insert code',
+ 'splittocols':'SplitToCols', 'splittocells':'SplitToCells','deletecaption':'DeleteCaption','inserttitle':'InsertTitle',
+ 'mergecells':'MergeCells', 'deletetable':'DeleteTable', 'cleardoc':'Clear', 'insertparagraphbeforetable':"InsertParagraphBeforeTable",
+ 'fontfamily':'FontFamily', 'fontsize':'FontSize', 'paragraph':'Paragraph','simpleupload':'Single Image','insertimage':'Multi Image','edittable':'Edit Table', 'edittd':'Edit Td','link':'Link',
+ 'emotion':'Emotion', 'spechars':'Spechars', 'searchreplace':'SearchReplace', 'map':'BaiduMap', 'gmap':'GoogleMap',
+ 'insertvideo':'Video', 'help':'Help', 'justifyleft':'JustifyLeft', 'justifyright':'JustifyRight', 'justifycenter':'JustifyCenter',
+ 'justifyjustify':'Justify', 'forecolor':'FontColor', 'backcolor':'BackColor', 'insertorderedlist':'OL',
+ 'insertunorderedlist':'UL', 'fullscreen':'FullScreen', 'directionalityltr':'EnterFromLeft', 'directionalityrtl':'EnterFromRight',
+ 'rowspacingtop':'RowSpacingTop', 'rowspacingbottom':'RowSpacingBottom', 'pagebreak':'PageBreak', 'insertframe':'Iframe', 'imagenone':'Default',
+ 'imageleft':'ImageLeft', 'imageright':'ImageRight', 'attachment':'Attachment', 'imagecenter':'ImageCenter', 'wordimage':'WordImage',
+ 'lineheight':'LineHeight','edittip':'EditTip','customstyle':'CustomStyle', 'scrawl':'Scrawl', 'autotypeset':'AutoTypeset',
+ 'webapp':'WebAPP', 'touppercase':'UpperCase', 'tolowercase':'LowerCase','template':'Template','background':'Background','inserttable':'InsertTable',
+ 'music':'Music', 'charts': 'charts','drafts': 'Load from Drafts'
+ },
+ 'insertorderedlist':{
+ 'num':'1,2,3...',
+ 'num1':'1),2),3)...',
+ 'num2':'(1),(2),(3)...',
+ 'cn':'一,二,三....',
+ 'cn1':'一),二),三)....',
+ 'cn2':'(一),(二),(三)....',
+ 'decimal':'1,2,3...',
+ 'lower-alpha':'a,b,c...',
+ 'lower-roman':'i,ii,iii...',
+ 'upper-alpha':'A,B,C...',
+ 'upper-roman':'I,II,III...'
+ },
+ 'insertunorderedlist':{
+ 'circle':'○ Circle',
+ 'disc':'● Circle dot',
+ 'square':'■ Rectangle ',
+ 'dash' :'- Dash',
+ 'dot' : '。dot'
+ },
+ 'paragraph':{'p':'Paragraph', 'h1':'Title 1', 'h2':'Title 2', 'h3':'Title 3', 'h4':'Title 4', 'h5':'Title 5', 'h6':'Title 6'},
+ 'fontfamily':{
+ 'songti':'Sim Sun',
+ 'kaiti':'Sim Kai',
+ 'heiti':'Sim Hei',
+ 'lishu':'Sim Li',
+ 'yahei': 'Microsoft YaHei',
+ 'andaleMono':'Andale Mono',
+ 'arial': 'Arial',
+ 'arialBlack':'Arial Black',
+ 'comicSansMs':'Comic Sans MS',
+ 'impact':'Impact',
+ 'timesNewRoman':'Times New Roman'
+ },
+ 'customstyle':{
+ 'tc':'Title center',
+ 'tl':'Title left',
+ 'im':'Important',
+ 'hi':'Highlight'
+ },
+ 'autoupload': {
+ 'exceedSizeError': 'File Size Exceed',
+ 'exceedTypeError': 'File Type Not Allow',
+ 'jsonEncodeError': 'Server Return Format Error',
+ 'loading':"loading...",
+ 'loadError':"load error",
+ 'errorLoadConfig': 'Server config not loaded, upload can not work.',
+ },
+ 'simpleupload':{
+ 'exceedSizeError': 'File Size Exceed',
+ 'exceedTypeError': 'File Type Not Allow',
+ 'jsonEncodeError': 'Server Return Format Error',
+ 'loading':"loading...",
+ 'loadError':"load error",
+ 'errorLoadConfig': 'Server config not loaded, upload can not work.',
+ },
+ 'elementPathTip':"Path",
+ 'wordCountTip':"Word Count",
+ 'wordCountMsg':'{#count} characters entered,{#leave} left. ',
+ 'wordOverFlowMsg':'
The number of characters has exceeded allowable maximum values, the server may refuse to save! ',
+ 'ok':"OK",
+ 'cancel':"Cancel",
+ 'closeDialog':"closeDialog",
+ 'tableDrag':"You must import the file uiUtils.js before drag! ",
+ 'autofloatMsg':"The plugin AutoFloat depends on EditorUI!",
+ 'loadconfigError': 'Get server config error.',
+ 'loadconfigFormatError': 'Server config format error.',
+ 'loadconfigHttpError': 'Get server config http error.',
+ 'snapScreen_plugin':{
+ 'browserMsg':"Only IE supported!",
+ 'callBackErrorMsg':"The callback data is wrong,please check the config!",
+ 'uploadErrorMsg':"Upload error,please check your server environment! "
+ },
+ 'insertcode':{
+ 'as3':'ActionScript 3',
+ 'bash':'Bash/Shell',
+ 'cpp':'C/C++',
+ 'css':'CSS',
+ 'cf':'ColdFusion',
+ 'c#':'C#',
+ 'delphi':'Delphi',
+ 'diff':'Diff',
+ 'erlang':'Erlang',
+ 'groovy':'Groovy',
+ 'html':'HTML',
+ 'java':'Java',
+ 'jfx':'JavaFX',
+ 'js':'JavaScript',
+ 'pl':'Perl',
+ 'php':'PHP',
+ 'plain':'Plain Text',
+ 'ps':'PowerShell',
+ 'python':'Python',
+ 'ruby':'Ruby',
+ 'scala':'Scala',
+ 'sql':'SQL',
+ 'vb':'Visual Basic',
+ 'xml':'XML'
+ },
+ 'confirmClear':"Do you confirm to clear the Document?",
+ 'contextMenu':{
+ 'delete':"Delete",
+ 'selectall':"Select all",
+ 'deletecode':"Delete Code",
+ 'cleardoc':"Clear Document",
+ 'confirmclear':"Do you confirm to clear the Document?",
+ 'unlink':"Unlink",
+ 'paragraph':"Paragraph",
+ 'edittable':"Table property",
+ 'aligncell':'Align cell',
+ 'aligntable':'Table alignment',
+ 'tableleft':'Left float',
+ 'tablecenter':'Center',
+ 'tableright':'Right float',
+ 'aligntd':'Cell alignment',
+ 'edittd':"Cell property",
+ 'setbordervisible':'set table edge visible',
+ 'table':"Table",
+ 'justifyleft':'Justify Left',
+ 'justifyright':'Justify Right',
+ 'justifycenter':'Justify Center',
+ 'justifyjustify':'Default',
+ 'deletetable':"Delete table",
+ 'insertparagraphbefore':"InsertedBeforeLine",
+ 'insertparagraphafter':'InsertedAfterLine',
+ 'inserttable':'Insert table',
+ 'insertcaption':'Insert caption',
+ 'deletecaption':'Delete Caption',
+ 'inserttitle':'Insert Title',
+ 'deletetitle':'Delete Title',
+ 'inserttitlecol':'Insert Title Col',
+ 'deletetitlecol':'Delete Title Col',
+ 'averageDiseRow':'AverageDise Row',
+ 'averageDisCol':'AverageDis Col',
+ 'deleterow':"Delete row",
+ 'deletecol':"Delete col",
+ 'insertrow':"Insert row",
+ 'insertcol':"Insert col",
+ 'insertrownext':'Insert Row Next',
+ 'insertcolnext':'Insert Col Next',
+ 'mergeright':"Merge right",
+ 'mergeleft':"Merge left",
+ 'mergedown':"Merge down",
+ 'mergecells':"Merge cells",
+ 'splittocells':"Split to cells",
+ 'splittocols':"Split to Cols",
+ 'splittorows':"Split to Rows",
+ 'tablesort':'Table sorting',
+ 'enablesort':'Sorting Enable',
+ 'disablesort':'Sorting Disable',
+ 'reversecurrent':'Reverse current',
+ 'orderbyasc':'Order By ASCII',
+ 'reversebyasc':'Reverse By ASCII',
+ 'orderbynum':'Order By Num',
+ 'reversebynum':'Reverse By Num',
+ 'borderbk':'Border shading',
+ 'setcolor':'interlaced color',
+ 'unsetcolor':'Cancel interlacedcolor',
+ 'setbackground':'Background interlaced',
+ 'unsetbackground':'Cancel Bk interlaced',
+ 'redandblue':'Blue and red',
+ 'threecolorgradient':'Three-color gradient',
+ 'copy':"Copy(Ctrl + c)",
+ 'copymsg':"Browser does not support. Please use 'Ctrl + c' instead!",
+ 'paste':"Paste(Ctrl + v)",
+ 'pastemsg':"Browser does not support. Please use 'Ctrl + v' instead!"
+ },
+ 'copymsg': "Browser does not support. Please use 'Ctrl + c' instead!",
+ 'pastemsg': "Browser does not support. Please use 'Ctrl + v' instead!",
+ 'anthorMsg':"Link",
+ 'clearColor':'Clear',
+ 'standardColor':'Standard color',
+ 'themeColor':'Theme color',
+ 'property':'Property',
+ 'default':'Default',
+ 'modify':'Modify',
+ 'justifyleft':'Justify Left',
+ 'justifyright':'Justify Right',
+ 'justifycenter':'Justify Center',
+ 'justify':'Default',
+ 'clear':'Clear',
+ 'anchorMsg':'Anchor',
+ 'delete':'Delete',
+ 'clickToUpload':"Click to upload",
+ 'unset':'Language hasn\'t been set!',
+ 't_row':'row',
+ 't_col':'col',
+ 'pasteOpt':'Paste Option',
+ 'pasteSourceFormat':"Keep Source Formatting",
+ 'tagFormat':'Keep tag',
+ 'pasteTextFormat':'Keep Text only',
+ 'more':'More',
+ 'autoTypeSet':{
+ 'mergeLine':"Merge empty line",
+ 'delLine':"Del empty line",
+ 'removeFormat':"Remove format",
+ 'indent':"Indent",
+ 'alignment':"Alignment",
+ 'imageFloat':"Image float",
+ 'removeFontsize':"Remove font size",
+ 'removeFontFamily':"Remove fontFamily",
+ 'removeHtml':"Remove redundant HTML code",
+ 'pasteFilter':"Paste filter",
+ 'run':"Done",
+ 'symbol':'Symbol Conversion',
+ 'bdc2sb':'Full-width to Half-width',
+ 'tobdc':'Half-width to Full-width'
+ },
+
+ 'background':{
+ 'static':{
+ 'lang_background_normal':'Normal',
+ 'lang_background_local':'Online',
+ 'lang_background_set':'Background Set',
+ 'lang_background_none':'No Background',
+ 'lang_background_colored':'Colored Background',
+ 'lang_background_color':'Color Set',
+ 'lang_background_netimg':'Net-Image',
+ 'lang_background_align':'Align Type',
+ 'lang_background_position':'Position',
+ 'repeatType':{'options':["Center", "Repeat-x", "Repeat-y", "Tile","Custom"]}
+ },
+ 'noUploadImage':"No pictures has been uploaded!",
+ 'toggleSelect':'Change the active state by click!\n Image Size: '
+ },
+ //===============dialog i18N=======================
+ 'insertimage':{
+ 'static':{
+ 'lang_tab_remote':"Insert",
+ 'lang_tab_upload':"Local",
+ 'lang_tab_online':"Manager",
+ 'lang_tab_search':"Search",
+ 'lang_input_url':"Address:",
+ 'lang_input_size':"Size:",
+ 'lang_input_width':"Width",
+ 'lang_input_height':"Height",
+ 'lang_input_border':"Border:",
+ 'lang_input_vhspace':"Margins:",
+ 'lang_input_title':"Title:",
+ 'lang_input_align':'Image Float Style:',
+ 'lang_imgLoading':"Loading...",
+ 'lang_start_upload':"Start Upload",
+ 'lock':{'title':"Lock rate"},
+ 'searchType':{'title':"ImageType", 'options':["News", "Wallpaper", "emotions", "photo"]},
+ 'searchTxt':{'value':"Enter the search keyword!"},
+ 'searchBtn':{'value':"Search"},
+ 'searchReset':{'value':"Clear"},
+ 'noneAlign':{'title':'None Float'},
+ 'leftAlign':{'title':'Left Float'},
+ 'rightAlign':{'title':'Right Float'},
+ 'centerAlign':{'title':'Center In A Line'}
+ },
+ 'uploadSelectFile':'Select File',
+ 'uploadAddFile':'Add File',
+ 'uploadStart':'Start Upload',
+ 'uploadPause':'Pause Upload',
+ 'uploadContinue':'Continue Upload',
+ 'uploadRetry':'Retry Upload',
+ 'uploadDelete':'Delete',
+ 'uploadTurnLeft':'Turn Left',
+ 'uploadTurnRight':'Turn Right',
+ 'uploadPreview':'Doing Preview',
+ 'uploadNoPreview':'Can Not Preview',
+ 'updateStatusReady': 'Selected _ pictures, total _KB.',
+ 'updateStatusConfirm': '_ uploaded successfully and _ upload failed',
+ 'updateStatusFinish': 'Total _ pictures (_KB), _ uploaded successfully',
+ 'updateStatusError': ' and _ upload failed',
+ 'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',
+ 'errorLoadConfig': 'Server config not loaded, upload can not work.',
+ 'errorExceedSize':'File Size Exceed',
+ 'errorFileType':'File Type Not Allow',
+ 'errorInterrupt':'File Upload Interrupted',
+ 'errorUploadRetry':'Upload Error, Please Retry.',
+ 'errorHttp':'Http Error',
+ 'errorServerUpload':'Server Result Error.',
+ 'remoteLockError':"Cannot Lock the Proportion between width and height",
+ 'numError':"Please enter the correct Num. e.g 123,400",
+ 'imageUrlError':"The image format may be wrong!",
+ 'imageLoadError':"Error,please check the network or URL!",
+ 'searchRemind':"Enter the search keyword!",
+ 'searchLoading':"Image is loading,please wait...",
+ 'searchRetry':" Sorry,can't find the image,please try again!"
+ },
+ 'attachment':{
+ 'static':{
+ 'lang_tab_upload': 'Upload',
+ 'lang_tab_online': 'Online',
+ 'lang_start_upload':"Start upload",
+ 'lang_drop_remind':"You can drop files here, a single maximum of 300 files"
+ },
+ 'uploadSelectFile':'Select File',
+ 'uploadAddFile':'Add File',
+ 'uploadStart':'Start Upload',
+ 'uploadPause':'Pause Upload',
+ 'uploadContinue':'Continue Upload',
+ 'uploadRetry':'Retry Upload',
+ 'uploadDelete':'Delete',
+ 'uploadTurnLeft':'Turn Left',
+ 'uploadTurnRight':'Turn Right',
+ 'uploadPreview':'Doing Preview',
+ 'updateStatusReady': 'Selected _ files, total _KB.',
+ 'updateStatusConfirm': '_ uploaded successfully and _ upload failed',
+ 'updateStatusFinish': 'Total _ files (_KB), _ uploaded successfully',
+ 'updateStatusError': ' and _ upload failed',
+ 'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',
+ 'errorLoadConfig': 'Server config not loaded, upload can not work.',
+ 'errorExceedSize':'File Size Exceed',
+ 'errorFileType':'File Type Not Allow',
+ 'errorInterrupt':'File Upload Interrupted',
+ 'errorUploadRetry':'Upload Error, Please Retry.',
+ 'errorHttp':'Http Error',
+ 'errorServerUpload':'Server Result Error.'
+ },
+
+ 'insertvideo':{
+ 'static':{
+ 'lang_tab_insertV':"Video",
+ 'lang_tab_searchV':"Search",
+ 'lang_tab_uploadV':"Upload",
+ 'lang_video_url':" URL ",
+ 'lang_video_size':"Video Size",
+ 'lang_videoW':"Width",
+ 'lang_videoH':"Height",
+ 'lang_alignment':"Alignment",
+ 'videoSearchTxt':{'value':"Enter the search keyword!"},
+ 'videoType':{'options':["All", "Hot", "Entertainment", "Funny", "Sports", "Science", "variety"]},
+ 'videoSearchBtn':{'value':"Search in Baidu"},
+ 'videoSearchReset':{'value':"Clear result"},
+
+ 'lang_input_fileStatus':' No file uploaded!',
+ 'startUpload':{'style':"background:url(upload.png) no-repeat;"},
+
+ 'lang_upload_size':"Video Size",
+ 'lang_upload_width':"Width",
+ 'lang_upload_height':"Height",
+ 'lang_upload_alignment':"Alignment",
+ 'lang_format_advice':"Recommends mp4 format."
+ },
+ 'numError':"Please enter the correct Num. e.g 123,400",
+ 'floatLeft':"Float left",
+ 'floatRight':"Float right",
+ 'default':"Default",
+ 'block':"Display in block",
+ 'urlError':"The video url format may be wrong!",
+ 'loading':" The video is loading, please wait…",
+ 'clickToSelect':"Click to select",
+ 'goToSource':'Visit source video ',
+ 'noVideo':" Sorry,can't find the video,please try again!",
+
+ 'browseFiles':'Open files',
+ 'uploadSuccess':'Upload Successful!',
+ 'delSuccessFile':'Remove from the success of the queue',
+ 'delFailSaveFile':'Remove the save failed file',
+ 'statusPrompt':' file(s) uploaded! ',
+ 'flashVersionError':'The current Flash version is too low, please update FlashPlayer,then try again!',
+ 'flashLoadingError':'The Flash failed loading! Please check the path or network state',
+ 'fileUploadReady':'Wait for uploading...',
+ 'delUploadQueue':'Remove from the uploading queue ',
+ 'limitPrompt1':'Can not choose more than single',
+ 'limitPrompt2':'file(s)!Please choose again!',
+ 'delFailFile':'Remove failure file',
+ 'fileSizeLimit':'File size exceeds the limit!',
+ 'emptyFile':'Can not upload an empty file!',
+ 'fileTypeError':'File type error!',
+ 'unknownError':'Unknown error!',
+ 'fileUploading':'Uploading,please wait...',
+ 'cancelUpload':'Cancel upload',
+ 'netError':'Network error',
+ 'failUpload':'Upload failed',
+ 'serverIOError':'Server IO error!',
+ 'noAuthority':'No Permission!',
+ 'fileNumLimit':'Upload limit to the number',
+ 'failCheck':'Authentication fails, the upload is skipped!',
+ 'fileCanceling':'Cancel, please wait...',
+ 'stopUploading':'Upload has stopped...',
+
+ 'uploadSelectFile':'Select File',
+ 'uploadAddFile':'Add File',
+ 'uploadStart':'Start Upload',
+ 'uploadPause':'Pause Upload',
+ 'uploadContinue':'Continue Upload',
+ 'uploadRetry':'Retry Upload',
+ 'uploadDelete':'Delete',
+ 'uploadTurnLeft':'Turn Left',
+ 'uploadTurnRight':'Turn Right',
+ 'uploadPreview':'Doing Preview',
+ 'updateStatusReady': 'Selected _ files, total _KB.',
+ 'updateStatusConfirm': '_ uploaded successfully and _ upload failed',
+ 'updateStatusFinish': 'Total _ files (_KB), _ uploaded successfully',
+ 'updateStatusError': ' and _ upload failed',
+ 'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',
+ 'errorLoadConfig': 'Server config not loaded, upload can not work.',
+ 'errorExceedSize':'File Size Exceed',
+ 'errorFileType':'File Type Not Allow',
+ 'errorInterrupt':'File Upload Interrupted',
+ 'errorUploadRetry':'Upload Error, Please Retry.',
+ 'errorHttp':'Http Error',
+ 'errorServerUpload':'Server Result Error.'
+ },
+ 'webapp':{
+ 'tip1':"This function provided by Baidu APP,please apply for baidu APPKey webmaster first!",
+ 'tip2':"And then open the file ueditor.config.js to set it! ",
+ 'applyFor':"APPLY FOR",
+ 'anthorApi':"Baidu API"
+ },
+ 'template':{
+ 'static':{
+ 'lang_template_bkcolor':'Background Color',
+ 'lang_template_clear' : 'Keep Content',
+ 'lang_template_select':'Select Template'
+ },
+ 'blank':"Blank",
+ 'blog':"Blog",
+ 'resume':"Resume",
+ 'richText':"Rich Text",
+ 'scrPapers':"Scientific Papers"
+ },
+ scrawl:{
+ 'static':{
+ 'lang_input_previousStep':"Previous",
+ 'lang_input_nextsStep':"Next",
+ 'lang_input_clear':'Clear',
+ 'lang_input_addPic':'AddImage',
+ 'lang_input_ScalePic':'ScaleImage',
+ 'lang_input_removePic':'RemoveImage',
+ 'J_imgTxt':{title:'Add background image'}
+ },
+ 'noScarwl':"No paint, a white paper...",
+ 'scrawlUpLoading':"Image is uploading, please wait...",
+ 'continueBtn':"Try again",
+ 'imageError':"Image failed to load!",
+ 'backgroundUploading':'Image is uploading,please wait...'
+ },
+ 'music':{
+ 'static':{
+ 'lang_input_tips':"Input singer/song/album, search you interested in music!",
+ 'J_searchBtn':{value:'Search songs'}
+ },
+ 'emptyTxt':'Not search to the relevant music results, please change a keyword try.',
+ 'chapter':'Songs',
+ 'singer':'Singer',
+ 'special':'Album',
+ 'listenTest':'Audition'
+ },
+ anchor:{
+ 'static':{
+ 'lang_input_anchorName':'Anchor Name:'
+ }
+ },
+ 'charts':{
+ 'static':{
+ 'lang_data_source':'Data source:',
+ 'lang_chart_format': 'Chart format:',
+ 'lang_data_align': 'Align',
+ 'lang_chart_align_same': 'Consistent with the X-axis Y-axis',
+ 'lang_chart_align_reverse': 'X-axis Y-axis opposite',
+ 'lang_chart_title': 'Title',
+ 'lang_chart_main_title': 'main title:',
+ 'lang_chart_sub_title': 'sub title:',
+ 'lang_chart_x_title': 'X-axis title:',
+ 'lang_chart_y_title': 'Y-axis title:',
+ 'lang_chart_tip': 'Prompt',
+ 'lang_cahrt_tip_prefix': 'prefix:',
+ 'lang_cahrt_tip_description': '仅饼图有效, 当鼠标移动到饼图中相应的块上时,提示框内的文字的前缀',
+ 'lang_chart_data_unit': 'Unit',
+ 'lang_chart_data_unit_title': 'unit:',
+ 'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位, 比如: 温度的单位 ℃',
+ 'lang_chart_type': 'Chart type:',
+ 'lang_prev_btn': 'Previous',
+ 'lang_next_btn': 'Next'
+ }
+ },
+ emotion:{
+ 'static':{
+ 'lang_input_choice':'Choice',
+ 'lang_input_Tuzki':'Tuzki',
+ 'lang_input_lvdouwa':'LvDouWa',
+ 'lang_input_BOBO':'BOBO',
+ 'lang_input_babyCat':'BabyCat',
+ 'lang_input_bubble':'Bubble',
+ 'lang_input_youa':'YouA'
+ }
+ },
+ gmap:{
+ 'static':{
+ 'lang_input_address':'Address:',
+ 'lang_input_search':'Search',
+ 'address':{value:"Beijing"}
+ },
+ searchError:'Unable to locate the address!'
+ },
+ help:{
+ 'static':{
+ 'lang_input_about':'About',
+ 'lang_input_shortcuts':'Shortcuts',
+ 'lang_input_introduction':"UEditor is developed by Baidu Co.ltd. It is lightweight, customizable , focusing on user experience and etc. , UEditor is based on open source BSD license , allowing free use and redistribution.",
+ 'lang_Txt_shortcuts':'Shortcuts',
+ 'lang_Txt_func':'Function',
+ 'lang_Txt_bold':'Bold',
+ 'lang_Txt_copy':'Copy',
+ 'lang_Txt_cut':'Cut',
+ 'lang_Txt_Paste':'Paste',
+ 'lang_Txt_undo':'Undo',
+ 'lang_Txt_redo':'Redo',
+ 'lang_Txt_italic':'Italic',
+ 'lang_Txt_underline':'Underline',
+ 'lang_Txt_selectAll':'Select All',
+ 'lang_Txt_visualEnter':'Submit',
+ 'lang_Txt_fullscreen':'Fullscreen'
+ }
+ },
+ insertframe:{
+ 'static':{
+ 'lang_input_address':'Address:',
+ 'lang_input_width':'Width:',
+ 'lang_input_height':'height:',
+ 'lang_input_isScroll':'Enable scrollbars:',
+ 'lang_input_frameborder':'Show frame border:',
+ 'lang_input_alignMode':'Alignment:',
+ 'align':{title:"Alignment", options:["Default", "Left", "Right", "Center"]}
+ },
+ 'enterAddress':'Please enter an address!'
+ },
+ link:{
+ 'static':{
+ 'lang_input_text':'Text:',
+ 'lang_input_url':'URL:',
+ 'lang_input_title':'Title:',
+ 'lang_input_target':'open in new window:'
+ },
+ 'validLink':'Supports only effective when a link is selected',
+ 'httpPrompt':'The hyperlink you enter should start with "http|https|ftp://"!'
+ },
+ map:{
+ 'static':{
+ lang_city:"City",
+ lang_address:"Address",
+ city:{value:"Beijing"},
+ lang_search:"Search",
+ lang_dynamicmap:"Dynamic map"
+ },
+ cityMsg:"Please enter the city name!",
+ errorMsg:"Can't find the place!"
+ },
+ searchreplace:{
+ 'static':{
+ lang_tab_search:"Search",
+ lang_tab_replace:"Replace",
+ lang_search1:"Search",
+ lang_search2:"Search",
+ lang_replace:"Replace",
+ lang_searchReg:'Support regular expression ,which starts and ends with a slash ,for example "/expression/"',
+ lang_searchReg1:'Support regular expression ,which starts and ends with a slash ,for example "/expression/"',
+ lang_case_sensitive1:"Case sense",
+ lang_case_sensitive2:"Case sense",
+ nextFindBtn:{value:"Next"},
+ preFindBtn:{value:"Preview"},
+ nextReplaceBtn:{value:"Next"},
+ preReplaceBtn:{value:"Preview"},
+ repalceBtn:{value:"Replace"},
+ repalceAllBtn:{value:"Replace all"}
+ },
+ getEnd:"Has the search to the bottom!",
+ getStart:"Has the search to the top!",
+ countMsg:"Altogether replaced {#count} character(s)!"
+ },
+ snapscreen:{
+ 'static':{
+ lang_showMsg:"You should install the UEditor screenshots program first!",
+ lang_download:"Download!",
+ lang_step1:"Step1:Download the program and then run it",
+ lang_step2:"Step2:After complete install,try to click the button again"
+ }
+ },
+ spechars:{
+ 'static':{},
+ tsfh:"Special",
+ lmsz:"Roman",
+ szfh:"Numeral",
+ rwfh:"Japanese",
+ xlzm:"The Greek",
+ ewzm:"Russian",
+ pyzm:"Phonetic",
+ yyyb:"English",
+ zyzf:"Others"
+ },
+ 'edittable':{
+ 'static':{
+ 'lang_tableStyle':'Table style',
+ 'lang_insertCaption':'Add table header row',
+ 'lang_insertTitle':'Add table title row',
+ 'lang_insertTitleCol':'Add table title col',
+ 'lang_tableSize':'Automatically adjust table size',
+ 'lang_autoSizeContent':'Adaptive by form text',
+ 'lang_orderbycontent':"Table of contents sortable",
+ 'lang_autoSizePage':'Page width adaptive',
+ 'lang_example':'Example',
+ 'lang_borderStyle':'Table Border',
+ 'lang_color':'Color:'
+ },
+ captionName:'Caption',
+ titleName:'Title',
+ cellsName:'text',
+ errorMsg:'There are merged cells, can not sort.'
+ },
+ 'edittip':{
+ 'static':{
+ lang_delRow:'Delete entire row',
+ lang_delCol:'Delete entire col'
+ }
+ },
+ 'edittd':{
+ 'static':{
+ lang_tdBkColor:'Background Color:'
+ }
+ },
+ 'formula':{
+ 'static':{
+ }
+ },
+ wordimage:{
+ 'static':{
+ lang_resave:"The re-save step",
+ uploadBtn:{src:"upload.png", alt:"Upload"},
+ clipboard:{style:"background: url(copy.png) -153px -1px no-repeat;"},
+ lang_step:" 1. Click top button to copy the url and then open the dialog to paste it. 2. Open after choose photos uploaded process."
+ },
+ fileType:"Image",
+ flashError:"Flash initialization failed!",
+ netError:"Network error! Please try again!",
+ copySuccess:"URL has been copied!",
+
+ 'flashI18n':{
+ lang:encodeURI( '{"UploadingState":"totalNum: ${a},uploadComplete: ${b}", "BeforeUpload":"waitingNum: ${a}", "ExceedSize":"Size exceed${a}", "ErrorInPreview":"Preview failed", "DefaultDescription":"Description", "LoadingImage":"Loading..."}' ),
+ uploadingTF:encodeURI( '{"font":"Arial", "size":12, "color":"0x000", "bold":"true", "italic":"false", "underline":"false"}' ),
+ imageTF:encodeURI( '{"font":"Arial", "size":11, "color":"red", "bold":"false", "italic":"false", "underline":"false"}' ),
+ textEncoding:"utf-8",
+ addImageSkinURL:"addImage.png",
+ allDeleteBtnUpSkinURL:"allDeleteBtnUpSkin.png",
+ allDeleteBtnHoverSkinURL:"allDeleteBtnHoverSkin.png",
+ rotateLeftBtnEnableSkinURL:"rotateLeftEnable.png",
+ rotateLeftBtnDisableSkinURL:"rotateLeftDisable.png",
+ rotateRightBtnEnableSkinURL:"rotateRightEnable.png",
+ rotateRightBtnDisableSkinURL:"rotateRightDisable.png",
+ deleteBtnEnableSkinURL:"deleteEnable.png",
+ deleteBtnDisableSkinURL:"deleteDisable.png",
+ backgroundURL:'',
+ listBackgroundURL:'',
+ buttonURL:'button.png'
+ }
+ },
+ 'autosave': {
+ 'success':'Local conservation success'
+ }
+};
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/addimage.png b/public/static/admin_static/lib/ueditor/lang/en/images/addimage.png
new file mode 100644
index 0000000..3a2fd17
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/addimage.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/alldeletebtnhoverskin.png b/public/static/admin_static/lib/ueditor/lang/en/images/alldeletebtnhoverskin.png
new file mode 100644
index 0000000..355eeab
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/alldeletebtnhoverskin.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/alldeletebtnupskin.png b/public/static/admin_static/lib/ueditor/lang/en/images/alldeletebtnupskin.png
new file mode 100644
index 0000000..61658ce
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/alldeletebtnupskin.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/background.png b/public/static/admin_static/lib/ueditor/lang/en/images/background.png
new file mode 100644
index 0000000..d5bf5fd
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/background.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/button.png b/public/static/admin_static/lib/ueditor/lang/en/images/button.png
new file mode 100644
index 0000000..098874c
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/button.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/copy.png b/public/static/admin_static/lib/ueditor/lang/en/images/copy.png
new file mode 100644
index 0000000..f982e8b
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/copy.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/deletedisable.png b/public/static/admin_static/lib/ueditor/lang/en/images/deletedisable.png
new file mode 100644
index 0000000..c8ee750
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/deletedisable.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/deleteenable.png b/public/static/admin_static/lib/ueditor/lang/en/images/deleteenable.png
new file mode 100644
index 0000000..26acc88
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/deleteenable.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/listbackground.png b/public/static/admin_static/lib/ueditor/lang/en/images/listbackground.png
new file mode 100644
index 0000000..4f82ccd
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/listbackground.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/localimage.png b/public/static/admin_static/lib/ueditor/lang/en/images/localimage.png
new file mode 100644
index 0000000..12c8e6a
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/localimage.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/music.png b/public/static/admin_static/lib/ueditor/lang/en/images/music.png
new file mode 100644
index 0000000..2f495fe
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/music.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/rotateleftdisable.png b/public/static/admin_static/lib/ueditor/lang/en/images/rotateleftdisable.png
new file mode 100644
index 0000000..741526e
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/rotateleftdisable.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/rotateleftenable.png b/public/static/admin_static/lib/ueditor/lang/en/images/rotateleftenable.png
new file mode 100644
index 0000000..e164ddb
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/rotateleftenable.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/rotaterightdisable.png b/public/static/admin_static/lib/ueditor/lang/en/images/rotaterightdisable.png
new file mode 100644
index 0000000..5a78c26
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/rotaterightdisable.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/rotaterightenable.png b/public/static/admin_static/lib/ueditor/lang/en/images/rotaterightenable.png
new file mode 100644
index 0000000..d768531
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/rotaterightenable.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/en/images/upload.png b/public/static/admin_static/lib/ueditor/lang/en/images/upload.png
new file mode 100644
index 0000000..7bb15b3
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/en/images/upload.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/zh-cn/images/copy.png b/public/static/admin_static/lib/ueditor/lang/zh-cn/images/copy.png
new file mode 100644
index 0000000..b2536aa
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/zh-cn/images/copy.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/zh-cn/images/localimage.png b/public/static/admin_static/lib/ueditor/lang/zh-cn/images/localimage.png
new file mode 100644
index 0000000..7303c36
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/zh-cn/images/localimage.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/zh-cn/images/music.png b/public/static/admin_static/lib/ueditor/lang/zh-cn/images/music.png
new file mode 100644
index 0000000..354edeb
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/zh-cn/images/music.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/zh-cn/images/upload.png b/public/static/admin_static/lib/ueditor/lang/zh-cn/images/upload.png
new file mode 100644
index 0000000..08d4d92
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/lang/zh-cn/images/upload.png differ
diff --git a/public/static/admin_static/lib/ueditor/lang/zh-cn/zh-cn.js b/public/static/admin_static/lib/ueditor/lang/zh-cn/zh-cn.js
new file mode 100644
index 0000000..4d5178f
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/lang/zh-cn/zh-cn.js
@@ -0,0 +1,669 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: taoqili
+ * Date: 12-6-12
+ * Time: 下午5:02
+ * To change this template use File | Settings | File Templates.
+ */
+UE.I18N['zh-cn'] = {
+ 'labelMap':{
+ 'anchor':'锚点', 'undo':'撤销', 'redo':'重做', 'bold':'加粗', 'indent':'首行缩进', 'snapscreen':'截图',
+ 'italic':'斜体', 'underline':'下划线', 'strikethrough':'删除线', 'subscript':'下标','fontborder':'字符边框',
+ 'superscript':'上标', 'formatmatch':'格式刷', 'source':'源代码', 'blockquote':'引用',
+ 'pasteplain':'纯文本粘贴模式', 'selectall':'全选', 'print':'打印', 'preview':'预览',
+ 'horizontal':'分隔线', 'removeformat':'清除格式', 'time':'时间', 'date':'日期',
+ 'unlink':'取消链接', 'insertrow':'前插入行', 'insertcol':'前插入列', 'mergeright':'右合并单元格', 'mergedown':'下合并单元格',
+ 'deleterow':'删除行', 'deletecol':'删除列', 'splittorows':'拆分成行',
+ 'splittocols':'拆分成列', 'splittocells':'完全拆分单元格','deletecaption':'删除表格标题','inserttitle':'插入标题',
+ 'mergecells':'合并多个单元格', 'deletetable':'删除表格', 'cleardoc':'清空文档','insertparagraphbeforetable':"表格前插入行",'insertcode':'代码语言',
+ 'fontfamily':'字体', 'fontsize':'字号', 'paragraph':'段落格式', 'simpleupload':'单图上传', 'insertimage':'多图上传','edittable':'表格属性','edittd':'单元格属性', 'link':'超链接',
+ 'emotion':'表情', 'spechars':'特殊字符', 'searchreplace':'查询替换', 'map':'Baidu地图', 'gmap':'Google地图',
+ 'insertvideo':'视频', 'help':'帮助', 'justifyleft':'居左对齐', 'justifyright':'居右对齐', 'justifycenter':'居中对齐',
+ 'justifyjustify':'两端对齐', 'forecolor':'字体颜色', 'backcolor':'背景色', 'insertorderedlist':'有序列表',
+ 'insertunorderedlist':'无序列表', 'fullscreen':'全屏', 'directionalityltr':'从左向右输入', 'directionalityrtl':'从右向左输入',
+ 'rowspacingtop':'段前距', 'rowspacingbottom':'段后距', 'pagebreak':'分页', 'insertframe':'插入Iframe', 'imagenone':'默认',
+ 'imageleft':'左浮动', 'imageright':'右浮动', 'attachment':'附件', 'imagecenter':'居中', 'wordimage':'图片转存',
+ 'lineheight':'行间距','edittip' :'编辑提示','customstyle':'自定义标题', 'autotypeset':'自动排版',
+ 'webapp':'百度应用','touppercase':'字母大写', 'tolowercase':'字母小写','background':'背景','template':'模板','scrawl':'涂鸦',
+ 'music':'音乐','inserttable':'插入表格','drafts': '从草稿箱加载', 'charts': '图表'
+ },
+ 'insertorderedlist':{
+ 'num':'1,2,3...',
+ 'num1':'1),2),3)...',
+ 'num2':'(1),(2),(3)...',
+ 'cn':'一,二,三....',
+ 'cn1':'一),二),三)....',
+ 'cn2':'(一),(二),(三)....',
+ 'decimal':'1,2,3...',
+ 'lower-alpha':'a,b,c...',
+ 'lower-roman':'i,ii,iii...',
+ 'upper-alpha':'A,B,C...',
+ 'upper-roman':'I,II,III...'
+ },
+ 'insertunorderedlist':{
+ 'circle':'○ 大圆圈',
+ 'disc':'● 小黑点',
+ 'square':'■ 小方块 ',
+ 'dash' :'— 破折号',
+ 'dot':' 。 小圆圈'
+ },
+ 'paragraph':{'p':'段落', 'h1':'标题 1', 'h2':'标题 2', 'h3':'标题 3', 'h4':'标题 4', 'h5':'标题 5', 'h6':'标题 6'},
+ 'fontfamily':{
+ 'songti':'宋体',
+ 'kaiti':'楷体',
+ 'heiti':'黑体',
+ 'lishu':'隶书',
+ 'yahei':'微软雅黑',
+ 'andaleMono':'andale mono',
+ 'arial': 'arial',
+ 'arialBlack':'arial black',
+ 'comicSansMs':'comic sans ms',
+ 'impact':'impact',
+ 'timesNewRoman':'times new roman'
+ },
+ 'customstyle':{
+ 'tc':'标题居中',
+ 'tl':'标题居左',
+ 'im':'强调',
+ 'hi':'明显强调'
+ },
+ 'autoupload': {
+ 'exceedSizeError': '文件大小超出限制',
+ 'exceedTypeError': '文件格式不允许',
+ 'jsonEncodeError': '服务器返回格式错误',
+ 'loading':"正在上传...",
+ 'loadError':"上传错误",
+ 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!'
+ },
+ 'simpleupload':{
+ 'exceedSizeError': '文件大小超出限制',
+ 'exceedTypeError': '文件格式不允许',
+ 'jsonEncodeError': '服务器返回格式错误',
+ 'loading':"正在上传...",
+ 'loadError':"上传错误",
+ 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!'
+ },
+ 'elementPathTip':"元素路径",
+ 'wordCountTip':"字数统计",
+ 'wordCountMsg':'当前已输入{#count}个字符, 您还可以输入{#leave}个字符。 ',
+ 'wordOverFlowMsg':'
字数超出最大允许值,服务器可能拒绝保存! ',
+ 'ok':"确认",
+ 'cancel':"取消",
+ 'closeDialog':"关闭对话框",
+ 'tableDrag':"表格拖动必须引入uiUtils.js文件!",
+ 'autofloatMsg':"工具栏浮动依赖编辑器UI,您首先需要引入UI文件!",
+ 'loadconfigError': '获取后台配置项请求出错,上传功能将不能正常使用!',
+ 'loadconfigFormatError': '后台配置项返回格式出错,上传功能将不能正常使用!',
+ 'loadconfigHttpError': '请求后台配置项http错误,上传功能将不能正常使用!',
+ 'snapScreen_plugin':{
+ 'browserMsg':"仅支持IE浏览器!",
+ 'callBackErrorMsg':"服务器返回数据有误,请检查配置项之后重试。",
+ 'uploadErrorMsg':"截图上传失败,请检查服务器端环境! "
+ },
+ 'insertcode':{
+ 'as3':'ActionScript 3',
+ 'bash':'Bash/Shell',
+ 'cpp':'C/C++',
+ 'css':'CSS',
+ 'cf':'ColdFusion',
+ 'c#':'C#',
+ 'delphi':'Delphi',
+ 'diff':'Diff',
+ 'erlang':'Erlang',
+ 'groovy':'Groovy',
+ 'html':'HTML',
+ 'java':'Java',
+ 'jfx':'JavaFX',
+ 'js':'JavaScript',
+ 'pl':'Perl',
+ 'php':'PHP',
+ 'plain':'Plain Text',
+ 'ps':'PowerShell',
+ 'python':'Python',
+ 'ruby':'Ruby',
+ 'scala':'Scala',
+ 'sql':'SQL',
+ 'vb':'Visual Basic',
+ 'xml':'XML'
+ },
+ 'confirmClear':"确定清空当前文档么?",
+ 'contextMenu':{
+ 'delete':"删除",
+ 'selectall':"全选",
+ 'deletecode':"删除代码",
+ 'cleardoc':"清空文档",
+ 'confirmclear':"确定清空当前文档么?",
+ 'unlink':"删除超链接",
+ 'paragraph':"段落格式",
+ 'edittable':"表格属性",
+ 'aligntd':"单元格对齐方式",
+ 'aligntable':'表格对齐方式',
+ 'tableleft':'左浮动',
+ 'tablecenter':'居中显示',
+ 'tableright':'右浮动',
+ 'edittd':"单元格属性",
+ 'setbordervisible':'设置表格边线可见',
+ 'justifyleft':'左对齐',
+ 'justifyright':'右对齐',
+ 'justifycenter':'居中对齐',
+ 'justifyjustify':'两端对齐',
+ 'table':"表格",
+ 'inserttable':'插入表格',
+ 'deletetable':"删除表格",
+ 'insertparagraphbefore':"前插入段落",
+ 'insertparagraphafter':'后插入段落',
+ 'deleterow':"删除当前行",
+ 'deletecol':"删除当前列",
+ 'insertrow':"前插入行",
+ 'insertcol':"左插入列",
+ 'insertrownext':'后插入行',
+ 'insertcolnext':'右插入列',
+ 'insertcaption':'插入表格名称',
+ 'deletecaption':'删除表格名称',
+ 'inserttitle':'插入表格标题行',
+ 'deletetitle':'删除表格标题行',
+ 'inserttitlecol':'插入表格标题列',
+ 'deletetitlecol':'删除表格标题列',
+ 'averageDiseRow':'平均分布各行',
+ 'averageDisCol':'平均分布各列',
+ 'mergeright':"向右合并",
+ 'mergeleft':"向左合并",
+ 'mergedown':"向下合并",
+ 'mergecells':"合并单元格",
+ 'splittocells':"完全拆分单元格",
+ 'splittocols':"拆分成列",
+ 'splittorows':"拆分成行",
+ 'tablesort':'表格排序',
+ 'enablesort':'设置表格可排序',
+ 'disablesort':'取消表格可排序',
+ 'reversecurrent':'逆序当前',
+ 'orderbyasc':'按ASCII字符升序',
+ 'reversebyasc':'按ASCII字符降序',
+ 'orderbynum':'按数值大小升序',
+ 'reversebynum':'按数值大小降序',
+ 'borderbk':'边框底纹',
+ 'setcolor':'表格隔行变色',
+ 'unsetcolor':'取消表格隔行变色',
+ 'setbackground':'选区背景隔行',
+ 'unsetbackground':'取消选区背景',
+ 'redandblue':'红蓝相间',
+ 'threecolorgradient':'三色渐变',
+ 'copy':"复制(Ctrl + c)",
+ 'copymsg': "浏览器不支持,请使用 'Ctrl + c'",
+ 'paste':"粘贴(Ctrl + v)",
+ 'pastemsg': "浏览器不支持,请使用 'Ctrl + v'"
+ },
+ 'copymsg': "浏览器不支持,请使用 'Ctrl + c'",
+ 'pastemsg': "浏览器不支持,请使用 'Ctrl + v'",
+ 'anthorMsg':"链接",
+ 'clearColor':'清空颜色',
+ 'standardColor':'标准颜色',
+ 'themeColor':'主题颜色',
+ 'property':'属性',
+ 'default':'默认',
+ 'modify':'修改',
+ 'justifyleft':'左对齐',
+ 'justifyright':'右对齐',
+ 'justifycenter':'居中',
+ 'justify':'默认',
+ 'clear':'清除',
+ 'anchorMsg':'锚点',
+ 'delete':'删除',
+ 'clickToUpload':"点击上传",
+ 'unset':'尚未设置语言文件',
+ 't_row':'行',
+ 't_col':'列',
+ 'more':'更多',
+ 'pasteOpt':'粘贴选项',
+ 'pasteSourceFormat':"保留源格式",
+ 'tagFormat':'只保留标签',
+ 'pasteTextFormat':'只保留文本',
+ 'autoTypeSet':{
+ 'mergeLine':"合并空行",
+ 'delLine':"清除空行",
+ 'removeFormat':"清除格式",
+ 'indent':"首行缩进",
+ 'alignment':"对齐方式",
+ 'imageFloat':"图片浮动",
+ 'removeFontsize':"清除字号",
+ 'removeFontFamily':"清除字体",
+ 'removeHtml':"清除冗余HTML代码",
+ 'pasteFilter':"粘贴过滤",
+ 'run':"执行",
+ 'symbol':'符号转换',
+ 'bdc2sb':'全角转半角',
+ 'tobdc':'半角转全角'
+ },
+
+ 'background':{
+ 'static':{
+ 'lang_background_normal':'背景设置',
+ 'lang_background_local':'在线图片',
+ 'lang_background_set':'选项',
+ 'lang_background_none':'无背景色',
+ 'lang_background_colored':'有背景色',
+ 'lang_background_color':'颜色设置',
+ 'lang_background_netimg':'网络图片',
+ 'lang_background_align':'对齐方式',
+ 'lang_background_position':'精确定位',
+ 'repeatType':{'options':["居中", "横向重复", "纵向重复", "平铺","自定义"]}
+
+ },
+ 'noUploadImage':"当前未上传过任何图片!",
+ 'toggleSelect':"单击可切换选中状态\n原图尺寸: "
+ },
+ //===============dialog i18N=======================
+ 'insertimage':{
+ 'static':{
+ 'lang_tab_remote':"插入图片", //节点
+ 'lang_tab_upload':"本地上传",
+ 'lang_tab_online':"在线管理",
+ 'lang_tab_search':"图片搜索",
+ 'lang_input_url':"地 址:",
+ 'lang_input_size':"大 小:",
+ 'lang_input_width':"宽度",
+ 'lang_input_height':"高度",
+ 'lang_input_border':"边 框:",
+ 'lang_input_vhspace':"边 距:",
+ 'lang_input_title':"描 述:",
+ 'lang_input_align':'图片浮动方式:',
+ 'lang_imgLoading':" 图片加载中……",
+ 'lang_start_upload':"开始上传",
+ 'lock':{'title':"锁定宽高比例"}, //属性
+ 'searchType':{'title':"图片类型", 'options':["新闻", "壁纸", "表情", "头像"]}, //select的option
+ 'searchTxt':{'value':"请输入搜索关键词"},
+ 'searchBtn':{'value':"百度一下"},
+ 'searchReset':{'value':"清空搜索"},
+ 'noneAlign':{'title':'无浮动'},
+ 'leftAlign':{'title':'左浮动'},
+ 'rightAlign':{'title':'右浮动'},
+ 'centerAlign':{'title':'居中独占一行'}
+ },
+ 'uploadSelectFile':'点击选择图片',
+ 'uploadAddFile':'继续添加',
+ 'uploadStart':'开始上传',
+ 'uploadPause':'暂停上传',
+ 'uploadContinue':'继续上传',
+ 'uploadRetry':'重试上传',
+ 'uploadDelete':'删除',
+ 'uploadTurnLeft':'向左旋转',
+ 'uploadTurnRight':'向右旋转',
+ 'uploadPreview':'预览中',
+ 'uploadNoPreview':'不能预览',
+ 'updateStatusReady': '选中_张图片,共_KB。',
+ 'updateStatusConfirm': '已成功上传_张照片,_张照片上传失败',
+ 'updateStatusFinish': '共_张(_KB),_张上传成功',
+ 'updateStatusError': ',_张上传失败。',
+ 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
+ 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
+ 'errorExceedSize':'文件大小超出',
+ 'errorFileType':'文件格式不允许',
+ 'errorInterrupt':'文件传输中断',
+ 'errorUploadRetry':'上传失败,请重试',
+ 'errorHttp':'http请求错误',
+ 'errorServerUpload':'服务器返回出错',
+ 'remoteLockError':"宽高不正确,不能所定比例",
+ 'numError':"请输入正确的长度或者宽度值!例如:123,400",
+ 'imageUrlError':"不允许的图片格式或者图片域!",
+ 'imageLoadError':"图片加载失败!请检查链接地址或网络状态!",
+ 'searchRemind':"请输入搜索关键词",
+ 'searchLoading':"图片加载中,请稍后……",
+ 'searchRetry':" :( ,抱歉,没有找到图片!请重试一次!"
+ },
+ 'attachment':{
+ 'static':{
+ 'lang_tab_upload': '上传附件',
+ 'lang_tab_online': '在线附件',
+ 'lang_start_upload':"开始上传",
+ 'lang_drop_remind':"可以将文件拖到这里,单次最多可选100个文件"
+ },
+ 'uploadSelectFile':'点击选择文件',
+ 'uploadAddFile':'继续添加',
+ 'uploadStart':'开始上传',
+ 'uploadPause':'暂停上传',
+ 'uploadContinue':'继续上传',
+ 'uploadRetry':'重试上传',
+ 'uploadDelete':'删除',
+ 'uploadTurnLeft':'向左旋转',
+ 'uploadTurnRight':'向右旋转',
+ 'uploadPreview':'预览中',
+ 'updateStatusReady': '选中_个文件,共_KB。',
+ 'updateStatusConfirm': '已成功上传_个文件,_个文件上传失败',
+ 'updateStatusFinish': '共_个(_KB),_个上传成功',
+ 'updateStatusError': ',_张上传失败。',
+ 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
+ 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
+ 'errorExceedSize':'文件大小超出',
+ 'errorFileType':'文件格式不允许',
+ 'errorInterrupt':'文件传输中断',
+ 'errorUploadRetry':'上传失败,请重试',
+ 'errorHttp':'http请求错误',
+ 'errorServerUpload':'服务器返回出错'
+ },
+ 'insertvideo':{
+ 'static':{
+ 'lang_tab_insertV':"插入视频",
+ 'lang_tab_searchV':"搜索视频",
+ 'lang_tab_uploadV':"上传视频",
+ 'lang_video_url':"视频网址",
+ 'lang_video_size':"视频尺寸",
+ 'lang_videoW':"宽度",
+ 'lang_videoH':"高度",
+ 'lang_alignment':"对齐方式",
+ 'videoSearchTxt':{'value':"请输入搜索关键字!"},
+ 'videoType':{'options':["全部", "热门", "娱乐", "搞笑", "体育", "科技", "综艺"]},
+ 'videoSearchBtn':{'value':"百度一下"},
+ 'videoSearchReset':{'value':"清空结果"},
+
+ 'lang_input_fileStatus':' 当前未上传文件',
+ 'startUpload':{'style':"background:url(upload.png) no-repeat;"},
+
+ 'lang_upload_size':"视频尺寸",
+ 'lang_upload_width':"宽度",
+ 'lang_upload_height':"高度",
+ 'lang_upload_alignment':"对齐方式",
+ 'lang_format_advice':"建议使用mp4格式."
+
+ },
+ 'numError':"请输入正确的数值,如123,400",
+ 'floatLeft':"左浮动",
+ 'floatRight':"右浮动",
+ '"default"':"默认",
+ 'block':"独占一行",
+ 'urlError':"输入的视频地址有误,请检查后再试!",
+ 'loading':" 视频加载中,请等待……",
+ 'clickToSelect':"点击选中",
+ 'goToSource':'访问源视频',
+ 'noVideo':" 抱歉,找不到对应的视频,请重试!",
+
+ 'browseFiles':'浏览文件',
+ 'uploadSuccess':'上传成功!',
+ 'delSuccessFile':'从成功队列中移除',
+ 'delFailSaveFile':'移除保存失败文件',
+ 'statusPrompt':' 个文件已上传! ',
+ 'flashVersionError':'当前Flash版本过低,请更新FlashPlayer后重试!',
+ 'flashLoadingError':'Flash加载失败!请检查路径或网络状态',
+ 'fileUploadReady':'等待上传……',
+ 'delUploadQueue':'从上传队列中移除',
+ 'limitPrompt1':'单次不能选择超过',
+ 'limitPrompt2':'个文件!请重新选择!',
+ 'delFailFile':'移除失败文件',
+ 'fileSizeLimit':'文件大小超出限制!',
+ 'emptyFile':'空文件无法上传!',
+ 'fileTypeError':'文件类型不允许!',
+ 'unknownError':'未知错误!',
+ 'fileUploading':'上传中,请等待……',
+ 'cancelUpload':'取消上传',
+ 'netError':'网络错误',
+ 'failUpload':'上传失败!',
+ 'serverIOError':'服务器IO错误!',
+ 'noAuthority':'无权限!',
+ 'fileNumLimit':'上传个数限制',
+ 'failCheck':'验证失败,本次上传被跳过!',
+ 'fileCanceling':'取消中,请等待……',
+ 'stopUploading':'上传已停止……',
+
+ 'uploadSelectFile':'点击选择文件',
+ 'uploadAddFile':'继续添加',
+ 'uploadStart':'开始上传',
+ 'uploadPause':'暂停上传',
+ 'uploadContinue':'继续上传',
+ 'uploadRetry':'重试上传',
+ 'uploadDelete':'删除',
+ 'uploadTurnLeft':'向左旋转',
+ 'uploadTurnRight':'向右旋转',
+ 'uploadPreview':'预览中',
+ 'updateStatusReady': '选中_个文件,共_KB。',
+ 'updateStatusConfirm': '成功上传_个,_个失败',
+ 'updateStatusFinish': '共_个(_KB),_个成功上传',
+ 'updateStatusError': ',_张上传失败。',
+ 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。',
+ 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!',
+ 'errorExceedSize':'文件大小超出',
+ 'errorFileType':'文件格式不允许',
+ 'errorInterrupt':'文件传输中断',
+ 'errorUploadRetry':'上传失败,请重试',
+ 'errorHttp':'http请求错误',
+ 'errorServerUpload':'服务器返回出错'
+ },
+ 'webapp':{
+ 'tip1':"本功能由百度APP提供,如看到此页面,请各位站长首先申请百度APPKey!",
+ 'tip2':"申请完成之后请至ueditor.config.js中配置获得的appkey! ",
+ 'applyFor':"点此申请",
+ 'anthorApi':"百度API"
+ },
+ 'template':{
+ 'static':{
+ 'lang_template_bkcolor':'背景颜色',
+ 'lang_template_clear' : '保留原有内容',
+ 'lang_template_select' : '选择模板'
+ },
+ 'blank':"空白文档",
+ 'blog':"博客文章",
+ 'resume':"个人简历",
+ 'richText':"图文混排",
+ 'sciPapers':"科技论文"
+
+
+ },
+ 'scrawl':{
+ 'static':{
+ 'lang_input_previousStep':"上一步",
+ 'lang_input_nextsStep':"下一步",
+ 'lang_input_clear':'清空',
+ 'lang_input_addPic':'添加背景',
+ 'lang_input_ScalePic':'缩放背景',
+ 'lang_input_removePic':'删除背景',
+ 'J_imgTxt':{title:'添加背景图片'}
+ },
+ 'noScarwl':"尚未作画,白纸一张~",
+ 'scrawlUpLoading':"涂鸦上传中,别急哦~",
+ 'continueBtn':"继续",
+ 'imageError':"糟糕,图片读取失败了!",
+ 'backgroundUploading':'背景图片上传中,别急哦~'
+ },
+ 'music':{
+ 'static':{
+ 'lang_input_tips':"输入歌手/歌曲/专辑,搜索您感兴趣的音乐!",
+ 'J_searchBtn':{value:'搜索歌曲'}
+ },
+ 'emptyTxt':'未搜索到相关音乐结果,请换一个关键词试试。',
+ 'chapter':'歌曲',
+ 'singer':'歌手',
+ 'special':'专辑',
+ 'listenTest':'试听'
+ },
+ 'anchor':{
+ 'static':{
+ 'lang_input_anchorName':'锚点名字:'
+ }
+ },
+ 'charts':{
+ 'static':{
+ 'lang_data_source':'数据源:',
+ 'lang_chart_format': '图表格式:',
+ 'lang_data_align': '数据对齐方式',
+ 'lang_chart_align_same': '数据源与图表X轴Y轴一致',
+ 'lang_chart_align_reverse': '数据源与图表X轴Y轴相反',
+ 'lang_chart_title': '图表标题',
+ 'lang_chart_main_title': '主标题:',
+ 'lang_chart_sub_title': '子标题:',
+ 'lang_chart_x_title': 'X轴标题:',
+ 'lang_chart_y_title': 'Y轴标题:',
+ 'lang_chart_tip': '提示文字',
+ 'lang_cahrt_tip_prefix': '提示文字前缀:',
+ 'lang_cahrt_tip_description': '仅饼图有效, 当鼠标移动到饼图中相应的块上时,提示框内的文字的前缀',
+ 'lang_chart_data_unit': '数据单位',
+ 'lang_chart_data_unit_title': '单位:',
+ 'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位, 比如: 温度的单位 ℃',
+ 'lang_chart_type': '图表类型:',
+ 'lang_prev_btn': '上一个',
+ 'lang_next_btn': '下一个'
+ }
+ },
+ 'emotion':{
+ 'static':{
+ 'lang_input_choice':'精选',
+ 'lang_input_Tuzki':'兔斯基',
+ 'lang_input_BOBO':'BOBO',
+ 'lang_input_lvdouwa':'绿豆蛙',
+ 'lang_input_babyCat':'baby猫',
+ 'lang_input_bubble':'泡泡',
+ 'lang_input_youa':'有啊'
+ }
+ },
+ 'gmap':{
+ 'static':{
+ 'lang_input_address':'地址',
+ 'lang_input_search':'搜索',
+ 'address':{value:"北京"}
+ },
+ searchError:'无法定位到该地址!'
+ },
+ 'help':{
+ 'static':{
+ 'lang_input_about':'关于UEditor',
+ 'lang_input_shortcuts':'快捷键',
+ 'lang_input_introduction':'UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点。开源基于BSD协议,允许自由使用和修改代码。',
+ 'lang_Txt_shortcuts':'快捷键',
+ 'lang_Txt_func':'功能',
+ 'lang_Txt_bold':'给选中字设置为加粗',
+ 'lang_Txt_copy':'复制选中内容',
+ 'lang_Txt_cut':'剪切选中内容',
+ 'lang_Txt_Paste':'粘贴',
+ 'lang_Txt_undo':'重新执行上次操作',
+ 'lang_Txt_redo':'撤销上一次操作',
+ 'lang_Txt_italic':'给选中字设置为斜体',
+ 'lang_Txt_underline':'给选中字加下划线',
+ 'lang_Txt_selectAll':'全部选中',
+ 'lang_Txt_visualEnter':'软回车',
+ 'lang_Txt_fullscreen':'全屏'
+ }
+ },
+ 'insertframe':{
+ 'static':{
+ 'lang_input_address':'地址:',
+ 'lang_input_width':'宽度:',
+ 'lang_input_height':'高度:',
+ 'lang_input_isScroll':'允许滚动条:',
+ 'lang_input_frameborder':'显示框架边框:',
+ 'lang_input_alignMode':'对齐方式:',
+ 'align':{title:"对齐方式", options:["默认", "左对齐", "右对齐", "居中"]}
+ },
+ 'enterAddress':'请输入地址!'
+ },
+ 'link':{
+ 'static':{
+ 'lang_input_text':'文本内容:',
+ 'lang_input_url':'链接地址:',
+ 'lang_input_title':'标题:',
+ 'lang_input_target':'是否在新窗口打开:'
+ },
+ 'validLink':'只支持选中一个链接时生效',
+ 'httpPrompt':'您输入的超链接中不包含http等协议名称,默认将为您添加http://前缀'
+ },
+ 'map':{
+ 'static':{
+ lang_city:"城市",
+ lang_address:"地址",
+ city:{value:"北京"},
+ lang_search:"搜索",
+ lang_dynamicmap:"插入动态地图"
+ },
+ cityMsg:"请选择城市",
+ errorMsg:"抱歉,找不到该位置!"
+ },
+ 'searchreplace':{
+ 'static':{
+ lang_tab_search:"查找",
+ lang_tab_replace:"替换",
+ lang_search1:"查找",
+ lang_search2:"查找",
+ lang_replace:"替换",
+ lang_searchReg:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”',
+ lang_searchReg1:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”',
+ lang_case_sensitive1:"区分大小写",
+ lang_case_sensitive2:"区分大小写",
+ nextFindBtn:{value:"下一个"},
+ preFindBtn:{value:"上一个"},
+ nextReplaceBtn:{value:"下一个"},
+ preReplaceBtn:{value:"上一个"},
+ repalceBtn:{value:"替换"},
+ repalceAllBtn:{value:"全部替换"}
+ },
+ getEnd:"已经搜索到文章末尾!",
+ getStart:"已经搜索到文章头部",
+ countMsg:"总共替换了{#count}处!"
+ },
+ 'snapscreen':{
+ 'static':{
+ lang_showMsg:"截图功能需要首先安装UEditor截图插件! ",
+ lang_download:"点此下载",
+ lang_step1:"第一步,下载UEditor截图插件并运行安装。",
+ lang_step2:"第二步,插件安装完成后即可使用,如不生效,请重启浏览器后再试!"
+ }
+ },
+ 'spechars':{
+ 'static':{},
+ tsfh:"特殊字符",
+ lmsz:"罗马字符",
+ szfh:"数学字符",
+ rwfh:"日文字符",
+ xlzm:"希腊字母",
+ ewzm:"俄文字符",
+ pyzm:"拼音字母",
+ yyyb:"英语音标",
+ zyzf:"其他"
+ },
+ 'edittable':{
+ 'static':{
+ 'lang_tableStyle':'表格样式',
+ 'lang_insertCaption':'添加表格名称行',
+ 'lang_insertTitle':'添加表格标题行',
+ 'lang_insertTitleCol':'添加表格标题列',
+ 'lang_orderbycontent':"使表格内容可排序",
+ 'lang_tableSize':'自动调整表格尺寸',
+ 'lang_autoSizeContent':'按表格文字自适应',
+ 'lang_autoSizePage':'按页面宽度自适应',
+ 'lang_example':'示例',
+ 'lang_borderStyle':'表格边框',
+ 'lang_color':'颜色:'
+ },
+ captionName:'表格名称',
+ titleName:'标题',
+ cellsName:'内容',
+ errorMsg:'有合并单元格,不可排序'
+ },
+ 'edittip':{
+ 'static':{
+ lang_delRow:'删除整行',
+ lang_delCol:'删除整列'
+ }
+ },
+ 'edittd':{
+ 'static':{
+ lang_tdBkColor:'背景颜色:'
+ }
+ },
+ 'formula':{
+ 'static':{
+ }
+ },
+ 'wordimage':{
+ 'static':{
+ lang_resave:"转存步骤",
+ uploadBtn:{src:"upload.png",alt:"上传"},
+ clipboard:{style:"background: url(copy.png) -153px -1px no-repeat;"},
+ lang_step:"1、点击顶部复制按钮,将地址复制到剪贴板;2、点击添加照片按钮,在弹出的对话框中使用Ctrl+V粘贴地址;3、点击打开后选择图片上传流程。"
+ },
+ 'fileType':"图片",
+ 'flashError':"FLASH初始化失败,请检查FLASH插件是否正确安装!",
+ 'netError':"网络连接错误,请重试!",
+ 'copySuccess':"图片地址已经复制!",
+ 'flashI18n':{} //留空默认中文
+ },
+ 'autosave': {
+ 'saving':'保存中...',
+ 'success':'本地保存成功'
+ }
+};
diff --git a/public/static/admin_static/lib/ueditor/php/Uploader.class.php b/public/static/admin_static/lib/ueditor/php/Uploader.class.php
new file mode 100644
index 0000000..b7d6bf8
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/php/Uploader.class.php
@@ -0,0 +1,372 @@
+ "临时文件错误",
+ "ERROR_TMP_FILE_NOT_FOUND" => "找不到临时文件",
+ "ERROR_SIZE_EXCEED" => "文件大小超出网站限制",
+ "ERROR_TYPE_NOT_ALLOWED" => "文件类型不允许",
+ "ERROR_CREATE_DIR" => "目录创建失败",
+ "ERROR_DIR_NOT_WRITEABLE" => "目录没有写权限",
+ "ERROR_FILE_MOVE" => "文件保存时出错",
+ "ERROR_FILE_NOT_FOUND" => "找不到上传文件",
+ "ERROR_WRITE_CONTENT" => "写入文件内容错误",
+ "ERROR_UNKNOWN" => "未知错误",
+ "ERROR_DEAD_LINK" => "链接不可用",
+ "ERROR_HTTP_LINK" => "链接不是http链接",
+ "ERROR_HTTP_CONTENTTYPE" => "链接contentType不正确",
+ "INVALID_URL" => "非法 URL",
+ "INVALID_IP" => "非法 IP"
+ );
+
+ /**
+ * 构造函数
+ * @param string $fileField 表单名称
+ * @param array $config 配置项
+ * @param bool $base64 是否解析base64编码,可省略。若开启,则$fileField代表的是base64编码的字符串表单名
+ */
+ public function __construct($fileField, $config, $type = "upload")
+ {
+ $this->fileField = $fileField;
+ $this->config = $config;
+ $this->type = $type;
+ if ($type == "remote") {
+ $this->saveRemote();
+ } else if($type == "base64") {
+ $this->upBase64();
+ } else {
+ $this->upFile();
+ }
+
+ $this->stateMap['ERROR_TYPE_NOT_ALLOWED'] = iconv('unicode', 'utf-8', $this->stateMap['ERROR_TYPE_NOT_ALLOWED']);
+ }
+
+ /**
+ * 上传文件的主处理方法
+ * @return mixed
+ */
+ private function upFile()
+ {
+ $file = $this->file = $_FILES[$this->fileField];
+ if (!$file) {
+ $this->stateInfo = $this->getStateInfo("ERROR_FILE_NOT_FOUND");
+ return;
+ }
+ if ($this->file['error']) {
+ $this->stateInfo = $this->getStateInfo($file['error']);
+ return;
+ } else if (!file_exists($file['tmp_name'])) {
+ $this->stateInfo = $this->getStateInfo("ERROR_TMP_FILE_NOT_FOUND");
+ return;
+ } else if (!is_uploaded_file($file['tmp_name'])) {
+ $this->stateInfo = $this->getStateInfo("ERROR_TMPFILE");
+ return;
+ }
+
+ $this->oriName = $file['name'];
+ $this->fileSize = $file['size'];
+ $this->fileType = $this->getFileExt();
+ $this->fullName = $this->getFullName();
+ $this->filePath = $this->getFilePath();
+ $this->fileName = $this->getFileName();
+ $dirname = dirname($this->filePath);
+
+ //检查文件大小是否超出限制
+ if (!$this->checkSize()) {
+ $this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED");
+ return;
+ }
+
+ //检查是否不允许的文件格式
+ if (!$this->checkType()) {
+ $this->stateInfo = $this->getStateInfo("ERROR_TYPE_NOT_ALLOWED");
+ return;
+ }
+
+ //创建目录失败
+ if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) {
+ $this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR");
+ return;
+ } else if (!is_writeable($dirname)) {
+ $this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE");
+ return;
+ }
+
+ //移动文件
+ if (!(move_uploaded_file($file["tmp_name"], $this->filePath) && file_exists($this->filePath))) { //移动失败
+ $this->stateInfo = $this->getStateInfo("ERROR_FILE_MOVE");
+ } else { //移动成功
+ $this->stateInfo = $this->stateMap[0];
+ }
+ }
+
+ /**
+ * 处理base64编码的图片上传
+ * @return mixed
+ */
+ private function upBase64()
+ {
+ $base64Data = $_POST[$this->fileField];
+ $img = base64_decode($base64Data);
+
+ $this->oriName = $this->config['oriName'];
+ $this->fileSize = strlen($img);
+ $this->fileType = $this->getFileExt();
+ $this->fullName = $this->getFullName();
+ $this->filePath = $this->getFilePath();
+ $this->fileName = $this->getFileName();
+ $dirname = dirname($this->filePath);
+
+ //检查文件大小是否超出限制
+ if (!$this->checkSize()) {
+ $this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED");
+ return;
+ }
+
+ //创建目录失败
+ if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) {
+ $this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR");
+ return;
+ } else if (!is_writeable($dirname)) {
+ $this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE");
+ return;
+ }
+
+ //移动文件
+ if (!(file_put_contents($this->filePath, $img) && file_exists($this->filePath))) { //移动失败
+ $this->stateInfo = $this->getStateInfo("ERROR_WRITE_CONTENT");
+ } else { //移动成功
+ $this->stateInfo = $this->stateMap[0];
+ }
+
+ }
+
+ /**
+ * 拉取远程图片
+ * @return mixed
+ */
+ private function saveRemote()
+ {
+ $imgUrl = htmlspecialchars($this->fileField);
+ $imgUrl = str_replace("&", "&", $imgUrl);
+
+ //http开头验证
+ if (strpos($imgUrl, "http") !== 0) {
+ $this->stateInfo = $this->getStateInfo("ERROR_HTTP_LINK");
+ return;
+ }
+
+ preg_match('/(^https*:\/\/[^:\/]+)/', $imgUrl, $matches);
+ $host_with_protocol = count($matches) > 1 ? $matches[1] : '';
+
+ // 判断是否是合法 url
+ if (!filter_var($host_with_protocol, FILTER_VALIDATE_URL)) {
+ $this->stateInfo = $this->getStateInfo("INVALID_URL");
+ return;
+ }
+
+ preg_match('/^https*:\/\/(.+)/', $host_with_protocol, $matches);
+ $host_without_protocol = count($matches) > 1 ? $matches[1] : '';
+
+ // 此时提取出来的可能是 ip 也有可能是域名,先获取 ip
+ $ip = gethostbyname($host_without_protocol);
+ // 判断是否是私有 ip
+ if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE)) {
+ $this->stateInfo = $this->getStateInfo("INVALID_IP");
+ return;
+ }
+
+ //获取请求头并检测死链
+ $heads = get_headers($imgUrl, 1);
+ if (!(stristr($heads[0], "200") && stristr($heads[0], "OK"))) {
+ $this->stateInfo = $this->getStateInfo("ERROR_DEAD_LINK");
+ return;
+ }
+ //格式验证(扩展名验证和Content-Type验证)
+ $fileType = strtolower(strrchr($imgUrl, '.'));
+ if (!in_array($fileType, $this->config['allowFiles']) || !isset($heads['Content-Type']) || !stristr($heads['Content-Type'], "image")) {
+ $this->stateInfo = $this->getStateInfo("ERROR_HTTP_CONTENTTYPE");
+ return;
+ }
+
+ //打开输出缓冲区并获取远程图片
+ ob_start();
+ $context = stream_context_create(
+ array('http' => array(
+ 'follow_location' => false // don't follow redirects
+ ))
+ );
+ readfile($imgUrl, false, $context);
+ $img = ob_get_contents();
+ ob_end_clean();
+ preg_match("/[\/]([^\/]*)[\.]?[^\.\/]*$/", $imgUrl, $m);
+
+ $this->oriName = $m ? $m[1]:"";
+ $this->fileSize = strlen($img);
+ $this->fileType = $this->getFileExt();
+ $this->fullName = $this->getFullName();
+ $this->filePath = $this->getFilePath();
+ $this->fileName = $this->getFileName();
+ $dirname = dirname($this->filePath);
+
+ //检查文件大小是否超出限制
+ if (!$this->checkSize()) {
+ $this->stateInfo = $this->getStateInfo("ERROR_SIZE_EXCEED");
+ return;
+ }
+
+ //创建目录失败
+ if (!file_exists($dirname) && !mkdir($dirname, 0777, true)) {
+ $this->stateInfo = $this->getStateInfo("ERROR_CREATE_DIR");
+ return;
+ } else if (!is_writeable($dirname)) {
+ $this->stateInfo = $this->getStateInfo("ERROR_DIR_NOT_WRITEABLE");
+ return;
+ }
+
+ //移动文件
+ if (!(file_put_contents($this->filePath, $img) && file_exists($this->filePath))) { //移动失败
+ $this->stateInfo = $this->getStateInfo("ERROR_WRITE_CONTENT");
+ } else { //移动成功
+ $this->stateInfo = $this->stateMap[0];
+ }
+
+ }
+
+ /**
+ * 上传错误检查
+ * @param $errCode
+ * @return string
+ */
+ private function getStateInfo($errCode)
+ {
+ return !$this->stateMap[$errCode] ? $this->stateMap["ERROR_UNKNOWN"] : $this->stateMap[$errCode];
+ }
+
+ /**
+ * 获取文件扩展名
+ * @return string
+ */
+ private function getFileExt()
+ {
+ return strtolower(strrchr($this->oriName, '.'));
+ }
+
+ /**
+ * 重命名文件
+ * @return string
+ */
+ private function getFullName()
+ {
+ //替换日期事件
+ $t = time();
+ $d = explode('-', date("Y-y-m-d-H-i-s"));
+ $format = $this->config["pathFormat"];
+ $format = str_replace("{yyyy}", $d[0], $format);
+ $format = str_replace("{yy}", $d[1], $format);
+ $format = str_replace("{mm}", $d[2], $format);
+ $format = str_replace("{dd}", $d[3], $format);
+ $format = str_replace("{hh}", $d[4], $format);
+ $format = str_replace("{ii}", $d[5], $format);
+ $format = str_replace("{ss}", $d[6], $format);
+ $format = str_replace("{time}", $t, $format);
+
+ //过滤文件名的非法自负,并替换文件名
+ $oriName = substr($this->oriName, 0, strrpos($this->oriName, '.'));
+ $oriName = preg_replace("/[\|\?\"\<\>\/\*\\\\]+/", '', $oriName);
+ $format = str_replace("{filename}", $oriName, $format);
+
+ //替换随机字符串
+ $randNum = rand(1, 10000000000) . rand(1, 10000000000);
+ if (preg_match("/\{rand\:([\d]*)\}/i", $format, $matches)) {
+ $format = preg_replace("/\{rand\:[\d]*\}/i", substr($randNum, 0, $matches[1]), $format);
+ }
+
+ $ext = $this->getFileExt();
+ return $format . $ext;
+ }
+
+ /**
+ * 获取文件名
+ * @return string
+ */
+ private function getFileName () {
+ return substr($this->filePath, strrpos($this->filePath, '/') + 1);
+ }
+
+ /**
+ * 获取文件完整路径
+ * @return string
+ */
+ private function getFilePath()
+ {
+ $fullname = $this->fullName;
+ $rootPath = $_SERVER['DOCUMENT_ROOT'];
+
+ if (substr($fullname, 0, 1) != '/') {
+ $fullname = '/' . $fullname;
+ }
+
+ return $rootPath . $fullname;
+ }
+
+ /**
+ * 文件类型检测
+ * @return bool
+ */
+ private function checkType()
+ {
+ return in_array($this->getFileExt(), $this->config["allowFiles"]);
+ }
+
+ /**
+ * 文件大小检测
+ * @return bool
+ */
+ private function checkSize()
+ {
+ return $this->fileSize <= ($this->config["maxSize"]);
+ }
+
+ /**
+ * 获取当前上传成功文件的各项信息
+ * @return array
+ */
+ public function getFileInfo()
+ {
+ return array(
+ "state" => $this->stateInfo,
+ "url" => $this->fullName,
+ "title" => $this->fileName,
+ "original" => $this->oriName,
+ "type" => $this->fileType,
+ "size" => $this->fileSize
+ );
+ }
+
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/php/action_crawler.php b/public/static/admin_static/lib/ueditor/php/action_crawler.php
new file mode 100644
index 0000000..b9e18df
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/php/action_crawler.php
@@ -0,0 +1,44 @@
+ $CONFIG['catcherPathFormat'],
+ "maxSize" => $CONFIG['catcherMaxSize'],
+ "allowFiles" => $CONFIG['catcherAllowFiles'],
+ "oriName" => "remote.png"
+);
+$fieldName = $CONFIG['catcherFieldName'];
+
+/* 抓取远程图片 */
+$list = array();
+if (isset($_POST[$fieldName])) {
+ $source = $_POST[$fieldName];
+} else {
+ $source = $_GET[$fieldName];
+}
+foreach ($source as $imgUrl) {
+ $item = new Uploader($imgUrl, $config, "remote");
+ $info = $item->getFileInfo();
+ array_push($list, array(
+ "state" => $info["state"],
+ "url" => $info["url"],
+ "size" => $info["size"],
+ "title" => htmlspecialchars($info["title"]),
+ "original" => htmlspecialchars($info["original"]),
+ "source" => htmlspecialchars($imgUrl)
+ ));
+}
+
+/* 返回抓取数据 */
+return json_encode(array(
+ 'state'=> count($list) ? 'SUCCESS':'ERROR',
+ 'list'=> $list
+));
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/php/action_list.php b/public/static/admin_static/lib/ueditor/php/action_list.php
new file mode 100644
index 0000000..bf9cd62
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/php/action_list.php
@@ -0,0 +1,92 @@
+ "no match file",
+ "list" => array(),
+ "start" => $start,
+ "total" => count($files)
+ ));
+}
+
+/* 获取指定范围的列表 */
+$len = count($files);
+for ($i = min($end, $len) - 1, $list = array(); $i < $len && $i >= 0 && $i >= $start; $i--){
+ $list[] = $files[$i];
+}
+//倒序
+//for ($i = $end, $list = array(); $i < $len && $i < $end; $i++){
+// $list[] = $files[$i];
+//}
+
+/* 返回数据 */
+$result = json_encode(array(
+ "state" => "SUCCESS",
+ "list" => $list,
+ "start" => $start,
+ "total" => count($files)
+));
+
+return $result;
+
+
+/**
+ * 遍历获取目录下的指定类型的文件
+ * @param $path
+ * @param array $files
+ * @return array
+ */
+function getfiles($path, $allowFiles, &$files = array())
+{
+ if (!is_dir($path)) return null;
+ if(substr($path, strlen($path) - 1) != '/') $path .= '/';
+ $handle = opendir($path);
+ while (false !== ($file = readdir($handle))) {
+ if ($file != '.' && $file != '..') {
+ $path2 = $path . $file;
+ if (is_dir($path2)) {
+ getfiles($path2, $allowFiles, $files);
+ } else {
+ if (preg_match("/\.(".$allowFiles.")$/i", $file)) {
+ $files[] = array(
+ 'url'=> substr($path2, strlen($_SERVER['DOCUMENT_ROOT'])),
+ 'mtime'=> filemtime($path2)
+ );
+ }
+ }
+ }
+ }
+ return $files;
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/php/action_upload.php b/public/static/admin_static/lib/ueditor/php/action_upload.php
new file mode 100644
index 0000000..d55b659
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/php/action_upload.php
@@ -0,0 +1,66 @@
+ $CONFIG['imagePathFormat'],
+ "maxSize" => $CONFIG['imageMaxSize'],
+ "allowFiles" => $CONFIG['imageAllowFiles']
+ );
+ $fieldName = $CONFIG['imageFieldName'];
+ break;
+ case 'uploadscrawl':
+ $config = array(
+ "pathFormat" => $CONFIG['scrawlPathFormat'],
+ "maxSize" => $CONFIG['scrawlMaxSize'],
+ "allowFiles" => $CONFIG['scrawlAllowFiles'],
+ "oriName" => "scrawl.png"
+ );
+ $fieldName = $CONFIG['scrawlFieldName'];
+ $base64 = "base64";
+ break;
+ case 'uploadvideo':
+ $config = array(
+ "pathFormat" => $CONFIG['videoPathFormat'],
+ "maxSize" => $CONFIG['videoMaxSize'],
+ "allowFiles" => $CONFIG['videoAllowFiles']
+ );
+ $fieldName = $CONFIG['videoFieldName'];
+ break;
+ case 'uploadfile':
+ default:
+ $config = array(
+ "pathFormat" => $CONFIG['filePathFormat'],
+ "maxSize" => $CONFIG['fileMaxSize'],
+ "allowFiles" => $CONFIG['fileAllowFiles']
+ );
+ $fieldName = $CONFIG['fileFieldName'];
+ break;
+}
+
+/* 生成上传实例对象并完成上传 */
+$up = new Uploader($fieldName, $config, $base64);
+
+/**
+ * 得到上传文件所对应的各个参数,数组结构
+ * array(
+ * "state" => "", //上传状态,上传成功时必须返回"SUCCESS"
+ * "url" => "", //返回的地址
+ * "title" => "", //新文件名
+ * "original" => "", //原始文件名
+ * "type" => "" //文件类型
+ * "size" => "", //文件大小
+ * )
+ */
+
+/* 返回数据 */
+return json_encode($up->getFileInfo());
diff --git a/public/static/admin_static/lib/ueditor/php/config.json b/public/static/admin_static/lib/ueditor/php/config.json
new file mode 100644
index 0000000..5b452f3
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/php/config.json
@@ -0,0 +1,94 @@
+/* 前后端通信相关的配置,注释只允许使用多行方式 */
+{
+ /* 上传图片配置项 */
+ "imageActionName": "uploadimage", /* 执行上传图片的action名称 */
+ "imageFieldName": "upfile", /* 提交的图片表单名称 */
+ "imageMaxSize": 2048000, /* 上传大小限制,单位B */
+ "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
+ "imageCompressEnable": true, /* 是否压缩图片,默认是true */
+ "imageCompressBorder": 1600, /* 图片压缩最长边限制 */
+ "imageInsertAlign": "none", /* 插入的图片浮动方式 */
+ "imageUrlPrefix": "", /* 图片访问路径前缀 */
+ "imagePathFormat": "/upload/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
+ /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
+ /* {time} 会替换成时间戳 */
+ /* {yyyy} 会替换成四位年份 */
+ /* {yy} 会替换成两位年份 */
+ /* {mm} 会替换成两位月份 */
+ /* {dd} 会替换成两位日期 */
+ /* {hh} 会替换成两位小时 */
+ /* {ii} 会替换成两位分钟 */
+ /* {ss} 会替换成两位秒 */
+ /* 非法字符 \ : * ? " < > | */
+ /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */
+
+ /* 涂鸦图片上传配置项 */
+ "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */
+ "scrawlFieldName": "upfile", /* 提交的图片表单名称 */
+ "scrawlPathFormat": "/upload/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
+ "scrawlUrlPrefix": "", /* 图片访问路径前缀 */
+ "scrawlInsertAlign": "none",
+
+ /* 截图工具上传 */
+ "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
+ "snapscreenPathFormat": "/upload/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */
+ "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */
+
+ /* 抓取远程图片配置 */
+ "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
+ "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */
+ "catcherFieldName": "source", /* 提交的图片列表表单名称 */
+ "catcherPathFormat": "/upload/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ "catcherUrlPrefix": "", /* 图片访问路径前缀 */
+ "catcherMaxSize": 2048000, /* 上传大小限制,单位B */
+ "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */
+
+ /* 上传视频配置 */
+ "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */
+ "videoFieldName": "upfile", /* 提交的视频表单名称 */
+ "videoPathFormat": "/upload/ueditor/php/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ "videoUrlPrefix": "", /* 视频访问路径前缀 */
+ "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */
+ "videoAllowFiles": [
+ ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
+ ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */
+
+ /* 上传文件配置 */
+ "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */
+ "fileFieldName": "upfile", /* 提交的文件表单名称 */
+ "filePathFormat": "/upload/ueditor/php/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ "fileUrlPrefix": "", /* 文件访问路径前缀 */
+ "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */
+ "fileAllowFiles": [
+ ".png", ".jpg", ".jpeg", ".gif", ".bmp",
+ ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
+ ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
+ ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
+ ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
+ ], /* 上传文件格式显示 */
+
+ /* 列出指定目录下的图片 */
+ "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */
+ "imageManagerListPath": "/upload/ueditor/php/upload/image/", /* 指定要列出图片的目录 */
+ "imageManagerListSize": 20, /* 每次列出文件数量 */
+ "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */
+ "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
+ "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
+
+ /* 列出指定目录下的文件 */
+ "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
+ "fileManagerListPath": "/upload/ueditor/php/upload/file/", /* 指定要列出文件的目录 */
+ "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */
+ "fileManagerListSize": 20, /* 每次列出文件数量 */
+ "fileManagerAllowFiles": [
+ ".png", ".jpg", ".jpeg", ".gif", ".bmp",
+ ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
+ ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
+ ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
+ ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
+ ] /* 列出的文件类型 */
+
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/php/controller.php b/public/static/admin_static/lib/ueditor/php/controller.php
new file mode 100644
index 0000000..feac890
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/php/controller.php
@@ -0,0 +1,59 @@
+ '请求地址出错'
+ ));
+ break;
+}
+
+/* 输出结果 */
+if (isset($_GET["callback"])) {
+ if (preg_match("/^[\w_]+$/", $_GET["callback"])) {
+ echo htmlspecialchars($_GET["callback"]) . '(' . $result . ')';
+ } else {
+ echo json_encode(array(
+ 'state'=> 'callback参数不合法'
+ ));
+ }
+} else {
+ echo $result;
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/themes/default/css/ueditor.css b/public/static/admin_static/lib/ueditor/themes/default/css/ueditor.css
new file mode 100644
index 0000000..44ae805
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/themes/default/css/ueditor.css
@@ -0,0 +1,1903 @@
+/*基础UI构建
+*/
+/* common layer */
+.edui-default .edui-box {
+ border: none;
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+}
+
+.edui-default a.edui-box {
+ display: block;
+ text-decoration: none;
+ color: black;
+}
+
+.edui-default a.edui-box:hover {
+ text-decoration: none;
+}
+
+.edui-default a.edui-box:active {
+ text-decoration: none;
+}
+
+.edui-default table.edui-box {
+ border-collapse: collapse;
+}
+
+.edui-default ul.edui-box {
+ list-style-type: none;
+}
+
+div.edui-box {
+ position: relative;
+ display: -moz-inline-box !important;
+ display: inline-block !important;
+ vertical-align: top;
+}
+
+.edui-default .edui-clearfix {
+ zoom: 1
+}
+
+.edui-default .edui-clearfix:after {
+ content: '\20';
+ display: block;
+ clear: both;
+}
+
+ * html div.edui-box {
+ display: inline !important;
+}
+
+*:first-child+html div.edui-box {
+ display: inline !important;
+}
+
+/* control layout */
+.edui-default .edui-button-body, .edui-splitbutton-body, .edui-menubutton-body, .edui-combox-body {
+ position: relative;
+}
+
+.edui-default .edui-popup {
+ position: absolute;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+}
+
+.edui-default .edui-popup .edui-shadow {
+ position: absolute;
+ z-index: -1;
+}
+
+.edui-default .edui-popup .edui-bordereraser {
+ position: absolute;
+ overflow: hidden;
+}
+
+.edui-default .edui-tablepicker .edui-canvas {
+ position: relative;
+}
+
+.edui-default .edui-tablepicker .edui-canvas .edui-overlay {
+ position: absolute;
+}
+
+.edui-default .edui-dialog-modalmask, .edui-dialog-dragmask {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.edui-default .edui-toolbar {
+ position: relative;
+}
+
+/*
+ * default theme
+ */
+.edui-default .edui-label {
+ cursor: default;
+}
+
+.edui-default span.edui-clickable {
+ color: blue;
+ cursor: pointer;
+ text-decoration: underline;
+}
+
+.edui-default span.edui-unclickable {
+ color: gray;
+ cursor: default;
+}
+/* 工具栏 */
+.edui-default .edui-toolbar {
+ cursor: default;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ padding: 1px;
+ overflow: hidden; /*全屏下单独一行不占位*/
+ zoom: 1;
+ width:auto;
+ height:auto;
+}
+
+.edui-default .edui-toolbar .edui-button,
+.edui-default .edui-toolbar .edui-splitbutton,
+.edui-default .edui-toolbar .edui-menubutton,
+.edui-default .edui-toolbar .edui-combox {
+ margin: 1px;
+}
+/*UI工具栏、编辑区域、底部*/
+.edui-default .edui-editor {
+ border: 1px solid #d4d4d4;
+ background-color: white;
+ position: relative;
+ overflow: visible;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.edui-editor div{
+ width:auto;
+ height:auto;
+}
+.edui-default .edui-editor-toolbarbox {
+ position: relative;
+ zoom: 1;
+ -webkit-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);
+ -moz-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);
+ box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);
+ border-top-left-radius:2px;
+ border-top-right-radius:2px;
+}
+
+.edui-default .edui-editor-toolbarboxouter {
+ border-bottom: 1px solid #d4d4d4;
+ background-color: #fafafa;
+ background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));
+ background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
+ background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
+ background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
+ background-repeat: repeat-x;
+ /*border: 1px solid #d4d4d4;*/
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);
+ *zoom: 1;
+ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+ -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+}
+
+.edui-default .edui-editor-toolbarboxinner {
+ padding: 2px;
+}
+
+.edui-default .edui-editor-iframeholder {
+ position: relative;
+ /*for fix ie6 toolbarmsg under iframe bug. relative -> static */
+ /*_position: static !important;*
+}
+
+.edui-default .edui-editor-iframeholder textarea {
+ font-family: consolas, "Courier New", "lucida console", monospace;
+ font-size: 12px;
+ line-height: 18px;
+}
+
+.edui-default .edui-editor-bottombar {
+ /*border-top: 1px solid #ccc;*/
+ /*height: 20px;*/
+ /*width: 40%;*/
+ /*float: left;*/
+ /*overflow: hidden;*/
+}
+
+.edui-default .edui-editor-bottomContainer {
+ overflow: hidden;
+}
+
+.edui-default .edui-editor-bottomContainer table {
+ width: 100%;
+ height: 0;
+ overflow: hidden;
+ border-spacing: 0;
+}
+
+.edui-default .edui-editor-bottomContainer td {
+ white-space: nowrap;
+ border-top: 1px solid #ccc;
+ line-height: 20px;
+ font-size: 12px;
+ font-family: Arial, Helvetica, Tahoma, Verdana, Sans-Serif;
+}
+
+.edui-default .edui-editor-wordcount {
+ text-align: right;
+ margin-right: 5px;
+ color: #aaa;
+}
+.edui-default .edui-editor-scale {
+ width: 12px;
+}
+.edui-default .edui-editor-scale .edui-editor-icon {
+ float: right;
+ width: 100%;
+ height: 12px;
+ margin-top: 10px;
+ background: url(../images/scale.png) no-repeat;
+ cursor: se-resize;
+}
+.edui-default .edui-editor-breadcrumb {
+ margin: 2px 0 0 3px;
+}
+
+.edui-default .edui-editor-breadcrumb span {
+ cursor: pointer;
+ text-decoration: underline;
+ color: blue;
+}
+
+.edui-default .edui-toolbar .edui-for-fullscreen {
+ float: right;
+}
+
+.edui-default .edui-bubble .edui-popup-content {
+ border: 1px solid #DCAC6C;
+ background-color: #fff6d9;
+ padding: 5px;
+ font-size: 10pt;
+ font-family: "宋体";
+}
+
+.edui-default .edui-bubble .edui-shadow {
+ /*box-shadow: 1px 1px 3px #818181;*/
+ /*-webkit-box-shadow: 2px 2px 3px #818181;*/
+ /*-moz-box-shadow: 2px 2px 3px #818181;*/
+ /*filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '2', MakeShadow = 'true', ShadowOpacity = '0.5');*/
+}
+
+.edui-default .edui-editor-toolbarmsg {
+ background-color: #FFF6D9;
+ border-bottom: 1px solid #ccc;
+ position: absolute;
+ bottom: -25px;
+ left: 0;
+ z-index: 1009;
+ width: 99.9%;
+}
+
+.edui-default .edui-editor-toolbarmsg-upload {
+ font-size: 14px;
+ color: blue;
+ width: 100px;
+ height: 16px;
+ line-height: 16px;
+ cursor: pointer;
+ position: absolute;
+ top: 5px;
+ left: 350px;
+}
+
+.edui-default .edui-editor-toolbarmsg-label {
+ font-size: 12px;
+ line-height: 16px;
+ padding: 4px;
+}
+
+.edui-default .edui-editor-toolbarmsg-close {
+ float: right;
+ width: 20px;
+ height: 16px;
+ line-height: 16px;
+ cursor: pointer;
+ color: red;
+}
+/*可选中菜单按钮*/
+.edui-default .edui-list .edui-bordereraser {
+ display: none;
+}
+
+.edui-default .edui-listitem {
+ padding: 1px;
+ white-space: nowrap;
+}
+
+.edui-default .edui-list .edui-state-hover {
+ position: relative;
+ background-color: #fff5d4;
+ border: 1px solid #dcac6c;
+ padding: 0;
+}
+
+.edui-default .edui-for-fontfamily .edui-listitem-label {
+ min-width: 130px;
+ _width: 120px;
+ font-size: 12px;
+ height: 22px;
+ line-height: 22px;
+ padding-left: 5px;
+}
+.edui-default .edui-for-insertcode .edui-listitem-label {
+ min-width: 120px;
+ _width: 120px;
+ font-size: 12px;
+ height: 22px;
+ line-height: 22px;
+ padding-left: 5px;
+}
+.edui-default .edui-for-underline .edui-listitem-label {
+ min-width: 120px;
+ _width: 120px;
+ padding: 3px 5px;
+ font-size: 12px;
+}
+
+.edui-default .edui-for-fontsize .edui-listitem-label {
+ min-width: 120px;
+ _width: 120px;
+ padding: 3px 5px;
+
+}
+
+.edui-default .edui-for-paragraph .edui-listitem-label {
+ min-width: 200px;
+ _width: 200px;
+ padding: 2px 5px;
+}
+
+.edui-default .edui-for-rowspacingtop .edui-listitem-label,
+.edui-default .edui-for-rowspacingbottom .edui-listitem-label {
+ min-width: 53px;
+ _width: 53px;
+ padding: 2px 5px;
+}
+
+.edui-default .edui-for-lineheight .edui-listitem-label {
+ min-width: 53px;
+ _width: 53px;
+ padding: 2px 5px;
+}
+
+.edui-default .edui-for-customstyle .edui-listitem-label {
+ min-width: 200px;
+ _width: 200px;
+ width: 200px !important;
+ padding: 2px 5px;
+}
+/* 可选中按钮弹出菜单*/
+.edui-default .edui-menu {
+ z-index: 3000;
+}
+
+.edui-default .edui-menu .edui-popup-content {
+ padding: 3px;
+}
+
+.edui-default .edui-menu-body {
+ _width: 150px;
+ min-width: 170px;
+ background: url("../images/sparator_v.png") repeat-y 25px;
+}
+
+.edui-default .edui-menuitem-body {
+}
+
+.edui-default .edui-menuitem {
+ height: 20px;
+ cursor: default;
+ vertical-align: top;
+}
+
+.edui-default .edui-menuitem .edui-icon {
+ width: 20px !important;
+ height: 20px !important;
+ background: url(../images/icons.png) 0 -4000px;
+ background: url(../images/icons.gif) 0 -4000px\9;
+}
+
+.edui-default .edui-menuitem .edui-label {
+ font-size: 12px;
+ line-height: 20px;
+ height: 20px;
+ padding-left: 10px;
+}
+
+.edui-default .edui-state-checked .edui-menuitem-body {
+ background: url("../images/icons-all.gif") no-repeat 6px -205px;
+}
+
+.edui-default .edui-state-disabled .edui-menuitem-label {
+ color: gray;
+}
+
+
+/*不可选中菜单按钮 */
+.edui-default .edui-toolbar .edui-combox-body .edui-button-body {
+ width: 60px;
+ font-size: 12px;
+ height: 20px;
+ line-height: 20px;
+ padding-left: 5px;
+ white-space: nowrap;
+ margin: 0 3px 0 0;
+}
+
+.edui-default .edui-toolbar .edui-combox-body .edui-arrow {
+ background: url(../images/icons.png) -741px 0;
+ _background: url(../images/icons.gif) -741px 0;
+ height: 20px;
+ width: 9px;
+}
+
+.edui-default .edui-toolbar .edui-combox .edui-combox-body {
+ border: 1px solid #CCC;
+ background-color: white;
+ border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+}
+
+.edui-default .edui-toolbar .edui-combox-body .edui-splitborder {
+ display: none;
+}
+
+.edui-default .edui-toolbar .edui-combox-body .edui-arrow {
+ border-left: 1px solid #CCC;
+}
+
+.edui-default .edui-toolbar .edui-state-hover .edui-combox-body {
+ background-color: #fff5d4;
+ border: 1px solid #dcac6c;
+}
+
+.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow {
+ border-left: 1px solid #dcac6c;
+}
+
+.edui-default .edui-toolbar .edui-state-checked .edui-combox-body {
+ background-color: #FFE69F;
+ border: 1px solid #DCAC6C;
+}
+
+.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow {
+ border-left: 1px solid #DCAC6C;
+}
+
+.edui-toolbar .edui-state-disabled .edui-combox-body {
+ background-color: #F0F0EE;
+ opacity: 0.3;
+ filter: alpha(opacity = 30);
+}
+
+.edui-toolbar .edui-state-opened .edui-combox-body {
+ background-color: white;
+ border: 1px solid gray;
+}
+/*普通按钮样式及状态*/
+.edui-default .edui-toolbar .edui-button .edui-icon,
+.edui-default .edui-toolbar .edui-menubutton .edui-icon,
+.edui-default .edui-toolbar .edui-splitbutton .edui-icon {
+ height: 20px !important;
+ width: 20px !important;
+ background-image: url(../images/icons.png);
+ background-image: url(../images/icons.gif) \9;
+}
+
+.edui-default .edui-toolbar .edui-button .edui-button-wrap {
+ padding: 1px;
+ position: relative;
+}
+
+.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap {
+ background-color: #fff5d4;
+ padding: 0;
+ border: 1px solid #dcac6c;
+}
+
+.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap {
+ background-color: #ffe69f;
+ padding: 0;
+ border: 1px solid #dcac6c;
+ border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+}
+
+.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap {
+ background-color: #ffffff;
+ padding: 0;
+ border: 1px solid gray;
+}
+.edui-default .edui-toolbar .edui-state-disabled .edui-label {
+ color: #ccc;
+}
+.edui-default .edui-toolbar .edui-state-disabled .edui-icon {
+ opacity: 0.3;
+ filter: alpha(opacity = 30);
+}
+
+/* toolbar icons */
+.edui-default .edui-for-undo .edui-icon {
+ background-position: -160px 0;
+}
+
+.edui-default .edui-for-redo .edui-icon {
+ background-position: -100px 0;
+}
+
+.edui-default .edui-for-bold .edui-icon {
+ background-position: 0 0;
+}
+
+.edui-default .edui-for-italic .edui-icon {
+ background-position: -60px 0;
+}
+
+.edui-default .edui-for-fontborder .edui-icon {
+ background-position:-160px -40px;
+}
+.edui-default .edui-for-underline .edui-icon {
+ background-position: -140px 0;
+}
+
+.edui-default .edui-for-strikethrough .edui-icon {
+ background-position: -120px 0;
+}
+
+.edui-default .edui-for-subscript .edui-icon {
+ background-position: -600px 0;
+}
+
+.edui-default .edui-for-superscript .edui-icon {
+ background-position: -620px 0;
+}
+
+.edui-default .edui-for-blockquote .edui-icon {
+ background-position: -220px 0;
+}
+
+.edui-default .edui-for-forecolor .edui-icon {
+ background-position: -720px 0;
+}
+
+.edui-default .edui-for-backcolor .edui-icon {
+ background-position: -760px 0;
+}
+
+.edui-default .edui-for-inserttable .edui-icon {
+ background-position: -580px -20px;
+}
+
+.edui-default .edui-for-autotypeset .edui-icon {
+ background-position: -640px -40px;
+}
+
+.edui-default .edui-for-justifyleft .edui-icon {
+ background-position: -460px 0;
+}
+
+.edui-default .edui-for-justifycenter .edui-icon {
+ background-position: -420px 0;
+}
+
+.edui-default .edui-for-justifyright .edui-icon {
+ background-position: -480px 0;
+}
+
+.edui-default .edui-for-justifyjustify .edui-icon {
+ background-position: -440px 0;
+}
+
+.edui-default .edui-for-insertorderedlist .edui-icon {
+ background-position: -80px 0;
+}
+
+.edui-default .edui-for-insertunorderedlist .edui-icon {
+ background-position: -20px 0;
+}
+
+.edui-default .edui-for-lineheight .edui-icon {
+ background-position: -725px -40px;
+}
+
+.edui-default .edui-for-rowspacingbottom .edui-icon {
+ background-position: -745px -40px;
+}
+
+.edui-default .edui-for-rowspacingtop .edui-icon {
+ background-position: -765px -40px;
+}
+
+.edui-default .edui-for-horizontal .edui-icon {
+ background-position: -360px 0;
+}
+
+.edui-default .edui-for-link .edui-icon {
+ background-position: -500px 0;
+}
+
+.edui-default .edui-for-code .edui-icon {
+ background-position: -440px -40px;
+}
+
+.edui-default .edui-for-insertimage .edui-icon {
+ background-position: -726px -77px;
+}
+
+.edui-default .edui-for-insertframe .edui-icon {
+ background-position: -240px -40px;
+}
+
+.edui-default .edui-for-emoticon .edui-icon {
+ background-position: -60px -20px;
+}
+
+.edui-default .edui-for-spechars .edui-icon {
+ background-position: -240px 0;
+}
+
+.edui-default .edui-for-help .edui-icon {
+ background-position: -340px 0;
+}
+
+.edui-default .edui-for-print .edui-icon {
+ background-position: -440px -20px;
+}
+
+.edui-default .edui-for-preview .edui-icon {
+ background-position: -420px -20px;
+}
+
+.edui-default .edui-for-selectall .edui-icon {
+ background-position: -400px -20px;
+}
+
+.edui-default .edui-for-searchreplace .edui-icon {
+ background-position: -520px -20px;
+}
+
+.edui-default .edui-for-map .edui-icon {
+ background-position: -40px -40px;
+}
+
+.edui-default .edui-for-gmap .edui-icon {
+ background-position: -260px -40px;
+}
+
+.edui-default .edui-for-insertvideo .edui-icon {
+ background-position: -320px -20px;
+}
+
+.edui-default .edui-for-time .edui-icon {
+ background-position: -160px -20px;
+}
+
+.edui-default .edui-for-date .edui-icon {
+ background-position: -140px -20px;
+}
+
+.edui-default .edui-for-cut .edui-icon {
+ background-position: -680px 0;
+}
+
+.edui-default .edui-for-copy .edui-icon {
+ background-position: -700px 0;
+}
+
+.edui-default .edui-for-paste .edui-icon {
+ background-position: -560px 0;
+}
+
+.edui-default .edui-for-formatmatch .edui-icon {
+ background-position: -40px 0;
+}
+
+.edui-default .edui-for-pasteplain .edui-icon {
+ background-position: -360px -20px;
+}
+
+.edui-default .edui-for-directionalityltr .edui-icon {
+ background-position: -20px -20px;
+}
+
+.edui-default .edui-for-directionalityrtl .edui-icon {
+ background-position: -40px -20px;
+}
+
+.edui-default .edui-for-source .edui-icon {
+ background-position: -261px -0px;
+}
+
+.edui-default .edui-for-removeformat .edui-icon {
+ background-position: -580px 0;
+}
+
+.edui-default .edui-for-unlink .edui-icon {
+ background-position: -640px 0;
+}
+
+.edui-default .edui-for-touppercase .edui-icon {
+ background-position: -786px 0;
+}
+
+.edui-default .edui-for-tolowercase .edui-icon {
+ background-position: -806px 0;
+}
+
+.edui-default .edui-for-insertrow .edui-icon {
+ background-position: -478px -76px;
+}
+
+.edui-default .edui-for-insertrownext .edui-icon {
+ background-position: -498px -76px;
+}
+
+.edui-default .edui-for-insertcol .edui-icon {
+ background-position: -455px -76px;
+}
+
+.edui-default .edui-for-insertcolnext .edui-icon {
+ background-position: -429px -76px;
+}
+
+.edui-default .edui-for-mergeright .edui-icon {
+ background-position: -60px -40px;
+}
+
+.edui-default .edui-for-mergedown .edui-icon {
+ background-position: -80px -40px;
+}
+
+.edui-default .edui-for-splittorows .edui-icon {
+ background-position: -100px -40px;
+}
+
+.edui-default .edui-for-splittocols .edui-icon {
+ background-position: -120px -40px;
+}
+
+.edui-default .edui-for-insertparagraphbeforetable .edui-icon {
+ background-position: -140px -40px;
+}
+
+.edui-default .edui-for-deleterow .edui-icon {
+ background-position: -660px -20px;
+}
+
+.edui-default .edui-for-deletecol .edui-icon {
+ background-position: -640px -20px;
+}
+
+.edui-default .edui-for-splittocells .edui-icon {
+ background-position: -800px -20px;
+}
+
+.edui-default .edui-for-mergecells .edui-icon {
+ background-position: -760px -20px;
+}
+
+.edui-default .edui-for-deletetable .edui-icon {
+ background-position: -620px -20px;
+}
+
+.edui-default .edui-for-cleardoc .edui-icon {
+ background-position: -520px 0;
+}
+
+.edui-default .edui-for-fullscreen .edui-icon {
+ background-position: -100px -20px;
+}
+
+.edui-default .edui-for-anchor .edui-icon {
+ background-position: -200px 0;
+}
+
+.edui-default .edui-for-pagebreak .edui-icon {
+ background-position: -460px -40px;
+}
+
+.edui-default .edui-for-imagenone .edui-icon {
+ background-position: -480px -40px;
+}
+
+.edui-default .edui-for-imageleft .edui-icon {
+ background-position: -500px -40px;
+}
+
+.edui-default .edui-for-wordimage .edui-icon {
+ background-position: -660px -40px;
+}
+
+.edui-default .edui-for-imageright .edui-icon {
+ background-position: -520px -40px;
+}
+
+.edui-default .edui-for-imagecenter .edui-icon {
+ background-position: -540px -40px;
+}
+
+.edui-default .edui-for-indent .edui-icon {
+ background-position: -400px 0;
+}
+
+.edui-default .edui-for-outdent .edui-icon {
+ background-position: -540px 0;
+}
+
+.edui-default .edui-for-webapp .edui-icon {
+ background-position: -601px -40px
+}
+
+.edui-default .edui-for-table .edui-icon {
+ background-position: -580px -20px;
+}
+
+.edui-default .edui-for-edittable .edui-icon {
+ background-position: -420px -40px;
+}
+
+.edui-default .edui-for-template .edui-icon {
+ background-position: -339px -40px;
+}
+
+.edui-default .edui-for-delete .edui-icon {
+ background-position: -360px -40px;
+}
+
+.edui-default .edui-for-attachment .edui-icon {
+ background-position: -620px -40px;
+}
+
+.edui-default .edui-for-edittd .edui-icon {
+ background-position: -700px -40px;
+}
+
+.edui-default .edui-for-snapscreen .edui-icon {
+ background-position: -581px -40px
+}
+
+.edui-default .edui-for-scrawl .edui-icon {
+ background-position: -801px -41px
+}
+
+.edui-default .edui-for-background .edui-icon {
+ background-position: -680px -40px;
+}
+
+.edui-default .edui-for-music .edui-icon {
+ background-position: -18px -40px
+}
+
+.edui-default .edui-for-formula .edui-icon {
+ background-position: -200px -40px
+}
+
+.edui-default .edui-for-aligntd .edui-icon {
+ background-position: -236px -76px;
+}
+
+.edui-default .edui-for-insertparagraphtrue .edui-icon {
+ background-position: -625px -76px;
+}
+
+.edui-default .edui-for-insertparagraph .edui-icon {
+ background-position: -602px -76px;
+}
+
+.edui-default .edui-for-insertcaption .edui-icon {
+ background-position: -336px -76px;
+}
+
+.edui-default .edui-for-deletecaption .edui-icon {
+ background-position: -362px -76px;
+}
+
+.edui-default .edui-for-inserttitle .edui-icon {
+ background-position: -286px -76px;
+}
+
+.edui-default .edui-for-deletetitle .edui-icon {
+ background-position: -311px -76px;
+}
+
+.edui-default .edui-for-aligntable .edui-icon {
+ background-position: -440px 0;
+}
+
+.edui-default .edui-for-tablealignment-left .edui-icon {
+ background-position: -460px 0;
+}
+
+.edui-default .edui-for-tablealignment-center .edui-icon {
+ background-position: -420px 0;
+}
+
+.edui-default .edui-for-tablealignment-right .edui-icon {
+ background-position: -480px 0;
+}
+
+.edui-default .edui-for-drafts .edui-icon {
+ background-position: -560px 0;
+}
+
+.edui-default .edui-for-charts .edui-icon {
+ background: url( ../images/charts.png ) no-repeat 2px 3px!important;
+}
+
+.edui-default .edui-for-inserttitlecol .edui-icon {
+ background-position: -673px -76px;
+}
+
+.edui-default .edui-for-deletetitlecol .edui-icon {
+ background-position: -698px -76px;
+}
+
+.edui-default .edui-for-simpleupload .edui-icon {
+ background-position: -380px 0px;
+}
+/*splitbutton*/
+.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,
+.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow {
+ background: url(../images/icons.png) -741px 0;
+ _background: url(../images/icons.gif) -741px 0;
+ height: 20px;
+ width: 9px;
+}
+
+.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,
+.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body {
+ padding: 1px;
+}
+
+.edui-default .edui-toolbar .edui-splitborder {
+ width: 1px;
+ height: 20px;
+}
+
+.edui-default .edui-toolbar .edui-state-hover .edui-splitborder {
+ width: 1px;
+ border-left: 0px solid #dcac6c;
+}
+
+.edui-default .edui-toolbar .edui-state-active .edui-splitborder {
+ width: 0;
+ border-left: 1px solid gray;
+}
+
+.edui-default .edui-toolbar .edui-state-opened .edui-splitborder {
+ width: 1px;
+ border: 0;
+}
+
+.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,
+.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body {
+ background-color: #fff5d4;
+ border: 1px solid #dcac6c;
+ padding: 0;
+}
+
+.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,
+.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body {
+ background-color: #FFE69F;
+ border: 1px solid #DCAC6C;
+ padding: 0;
+}
+
+.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,
+.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body {
+ background-color: #ffffff;
+ border: 1px solid gray;
+ padding: 0;
+}
+
+.edui-default .edui-state-disabled .edui-arrow {
+ opacity: 0.3;
+ _filter: alpha(opacity = 30);
+}
+
+.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,
+.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body {
+ background-color: white;
+ border: 1px solid gray;
+ padding: 0;
+}
+
+.edui-default .edui-for-insertorderedlist .edui-bordereraser,
+.edui-default .edui-for-lineheight .edui-bordereraser,
+.edui-default .edui-for-rowspacingtop .edui-bordereraser,
+.edui-default .edui-for-rowspacingbottom .edui-bordereraser,
+.edui-default .edui-for-insertunorderedlist .edui-bordereraser {
+ background-color: white;
+}
+
+/* 解决嵌套导致的图标问题 */
+.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,
+.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,
+.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,
+.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,
+.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon {
+ /*background-position: 0 -40px;*/
+ background-image: none ;
+}
+
+/* 弹出菜单 */
+.edui-default .edui-popup {
+ z-index: 3000;
+ background-color: #ffffff;
+ width:auto;
+ height:auto;
+
+}
+
+.edui-default .edui-popup .edui-shadow {
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.edui-default .edui-popup-content {
+ border:1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ *border-right-width: 2px;
+ *border-bottom-width: 2px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);
+ -moz-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding;
+ background-clip: padding-box;
+ padding: 5px;
+ background:#ffffff;
+}
+
+.edui-default .edui-popup .edui-bordereraser {
+ background-color: white;
+ height: 3px;
+}
+
+.edui-default .edui-menu .edui-bordereraser {
+ height: 3px;
+}
+
+.edui-default .edui-anchor-topleft .edui-bordereraser {
+ left: 1px;
+ top: -2px;
+}
+
+.edui-default .edui-anchor-topright .edui-bordereraser {
+ right: 1px;
+ top: -2px;
+}
+
+.edui-default .edui-anchor-bottomleft .edui-bordereraser {
+ left: 0;
+ bottom: -6px;
+ height: 7px;
+ border-left: 1px solid gray;
+ border-right: 1px solid gray;
+}
+
+.edui-default .edui-anchor-bottomright .edui-bordereraser {
+ right: 0;
+ bottom: -6px;
+ height: 7px;
+ border-left: 1px solid gray;
+ border-right: 1px solid gray;
+}
+
+.edui-popup div{
+ width:auto;
+ height:auto;
+}
+.edui-default .edui-editor-messageholder {
+ display: block;
+ width: 150px;
+ height: auto;
+ border: 0;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ top: 28px;
+ right: 3px;
+}
+
+.edui-default .edui-message{
+ min-height: 10px;
+ text-shadow: 0 1px 0 rgba(255,255,255,0.5);
+ padding: 0;
+ margin-bottom: 3px;
+ position: relative;
+}
+.edui-default .edui-message-body{
+ border-radius: 3px;
+ padding: 8px 15px 8px 8px;
+ color: #c09853;
+ background-color: #fcf8e3;
+ border: 1px solid #fbeed5;
+}
+.edui-default .edui-message-type-info{
+ color: #3a87ad;
+ background-color: #d9edf7;
+ border-color: #bce8f1
+}
+.edui-default .edui-message-type-success{
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #d6e9c6
+}
+.edui-default .edui-message-type-danger,
+.edui-default .edui-message-type-error{
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #eed3d7
+}
+.edui-default .edui-message .edui-message-closer {
+ display: block;
+ width: 16px;
+ height: 16px;
+ line-height: 16px;
+ position: absolute;
+ top: 0;
+ right: 0;
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ float: right;
+ font-size: 20px;
+ font-weight: bold;
+ color: #999;
+ text-shadow: 0 1px 0 #fff;
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+}
+.edui-default .edui-message .edui-message-content {
+ font-size: 10pt;
+ word-wrap: break-word;
+ word-break: normal;
+}
+/* 弹出对话框按钮和对话框大小 */
+.edui-default .edui-dialog {
+ z-index: 2000;
+ position: absolute;
+
+}
+
+.edui-dialog div{
+ width:auto;
+}
+
+.edui-default .edui-dialog-wrap {
+ margin-right: 6px;
+ margin-bottom: 6px;
+}
+
+.edui-default .edui-dialog-fullscreen-flag {
+ margin-right: 0;
+ margin-bottom: 0;
+}
+
+.edui-default .edui-dialog-body {
+ position: relative;
+ padding:2px 0 0 2px;
+ _zoom: 1;
+}
+
+.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body {
+ padding: 0;
+}
+
+.edui-default .edui-dialog-shadow {
+ position: absolute;
+ z-index: -1;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ background-color: #ffffff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ *border-right-width: 2px;
+ *border-bottom-width: 2px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding;
+ background-clip: padding-box;
+}
+
+.edui-default .edui-dialog-foot {
+ background-color: white;
+}
+
+.edui-default .edui-dialog-titlebar {
+ height: 26px;
+ border-bottom: 1px solid #c6c6c6;
+ background: url(../images/dialog-title-bg.png) repeat-x bottom;
+ position: relative;
+ cursor: move;
+}
+.edui-default .edui-dialog-caption {
+ font-weight: bold;
+ font-size: 12px;
+ line-height: 26px;
+ padding-left: 5px;
+}
+
+.edui-default .edui-dialog-draghandle {
+ height: 26px;
+}
+
+.edui-default .edui-dialog-closebutton {
+ position: absolute !important;
+ right: 5px;
+ top: 3px;
+}
+
+.edui-default .edui-dialog-closebutton .edui-button-body {
+ height: 20px;
+ width: 20px;
+ cursor: pointer;
+ background: url("../images/icons-all.gif") no-repeat 0 -59px;
+}
+
+.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body {
+ background: url("../images/icons-all.gif") no-repeat 0 -89px;
+}
+
+.edui-default .edui-dialog-foot {
+ height: 40px;
+}
+
+.edui-default .edui-dialog-buttons {
+ position: absolute;
+ right: 0;
+}
+
+.edui-default .edui-dialog-buttons .edui-button {
+ margin-right: 10px;
+}
+
+.edui-default .edui-dialog-buttons .edui-button .edui-button-body {
+ background: url("../images/icons-all.gif") no-repeat;
+ height: 24px;
+ width: 96px;
+ font-size: 12px;
+ line-height: 24px;
+ text-align: center;
+ cursor: default;
+}
+
+.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body {
+ background: url("../images/icons-all.gif") no-repeat 0 -30px;
+}
+
+.edui-default .edui-dialog iframe {
+ border: 0;
+ padding: 0;
+ margin: 0;
+ vertical-align: top;
+}
+
+.edui-default .edui-dialog-modalmask {
+ opacity: 0.3;
+ filter: alpha(opacity = 30);
+ background-color: #ccc;
+ position: absolute;
+ /*z-index: 1999;*/
+}
+
+.edui-default .edui-dialog-dragmask {
+ position: absolute;
+ /*z-index: 2001;*/
+ background-color: transparent;
+ cursor: move;
+}
+
+.edui-default .edui-dialog-content {
+ position: relative;
+}
+
+.edui-default .dialogcontmask {
+ cursor: move;
+ visibility: hidden;
+ display: block;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+ filter: alpha(opacity = 0);
+}
+
+/*link-dialog*/
+.edui-default .edui-for-link .edui-dialog-content {
+ width: 420px;
+ height: 200px;
+ overflow: hidden;
+}
+/*background-dialog*/
+.edui-default .edui-for-background .edui-dialog-content {
+ width: 440px;
+ height: 280px;
+ overflow: hidden;
+}
+
+/*template-dialog*/
+.edui-default .edui-for-template .edui-dialog-content {
+ width: 630px;
+ height: 390px;
+ overflow: hidden;
+}
+
+/*scrawl-dialog*/
+.edui-default .edui-for-scrawl .edui-dialog-content {
+ width: 515px;
+ *width: 506px;
+ height: 360px;
+}
+
+/*spechars-dialog*/
+.edui-default .edui-for-spechars .edui-dialog-content {
+ width: 620px;
+ height: 500px;
+ *width: 630px;
+ *height: 570px;
+}
+
+/*image-dialog*/
+.edui-default .edui-for-insertimage .edui-dialog-content {
+ width: 650px;
+ height: 400px;
+ overflow: hidden;
+}
+/*webapp-dialog*/
+.edui-default .edui-for-webapp .edui-dialog-content {
+ width: 560px;
+ _width: 565px;
+ height: 450px;
+ overflow: hidden;
+}
+
+/*image-insertframe*/
+.edui-default .edui-for-insertframe .edui-dialog-content {
+ width: 350px;
+ height: 200px;
+ overflow: hidden;
+}
+
+/*wordImage-dialog*/
+.edui-default .edui-for-wordimage .edui-dialog-content {
+ width: 620px;
+ height: 380px;
+ overflow: hidden;
+}
+
+/*attachment-dialog*/
+.edui-default .edui-for-attachment .edui-dialog-content {
+ width: 650px;
+ height: 400px;
+ overflow: hidden;
+}
+
+
+/*map-dialog*/
+.edui-default .edui-for-map .edui-dialog-content {
+ width: 550px;
+ height: 400px;
+}
+
+/*gmap-dialog*/
+.edui-default .edui-for-gmap .edui-dialog-content {
+ width: 550px;
+ height: 400px;
+}
+
+/*video-dialog*/
+.edui-default .edui-for-insertvideo .edui-dialog-content {
+ width: 590px;
+ height: 390px;
+}
+
+/*anchor-dialog*/
+.edui-default .edui-for-anchor .edui-dialog-content {
+ width: 320px;
+ height: 60px;
+ overflow: hidden;
+}
+
+/*searchreplace-dialog*/
+.edui-default .edui-for-searchreplace .edui-dialog-content {
+ width: 400px;
+ height: 220px;
+}
+
+/*help-dialog*/
+.edui-default .edui-for-help .edui-dialog-content {
+ width: 400px;
+ height: 420px;
+}
+
+/*edittable-dialog*/
+.edui-default .edui-for-edittable .edui-dialog-content {
+ width: 540px;
+ _width:590px;
+ height: 335px;
+}
+
+/*edittip-dialog*/
+.edui-default .edui-for-edittip .edui-dialog-content {
+ width: 225px;
+ height: 60px;
+}
+
+/*edittd-dialog*/
+.edui-default .edui-for-edittd .edui-dialog-content {
+ width: 240px;
+ height: 50px;
+}
+/*snapscreen-dialog*/
+.edui-default .edui-for-snapscreen .edui-dialog-content {
+ width: 400px;
+ height: 220px;
+}
+
+/*music-dialog*/
+.edui-default .edui-for-music .edui-dialog-content {
+ width: 515px;
+ height: 360px;
+}
+
+/*段落弹出菜单*/
+.edui-default .edui-for-paragraph .edui-listitem-label {
+ font-family: Tahoma, Verdana, Arial, Helvetica;
+}
+
+.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p {
+ font-size: 22px;
+ line-height: 27px;
+}
+
+.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1 {
+ font-weight: bolder;
+ font-size: 32px;
+ line-height: 36px;
+}
+
+.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2 {
+ font-weight: bolder;
+ font-size: 27px;
+ line-height: 29px;
+}
+
+.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3 {
+ font-weight: bolder;
+ font-size: 19px;
+ line-height: 23px;
+}
+
+.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4 {
+ font-weight: bolder;
+ font-size: 16px;
+ line-height: 19px
+}
+
+.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5 {
+ font-weight: bolder;
+ font-size: 13px;
+ line-height: 16px;
+}
+
+.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6 {
+ font-weight: bolder;
+ font-size: 12px;
+ line-height: 14px;
+}
+/* 表格弹出菜单 */
+.edui-default .edui-for-inserttable .edui-splitborder {
+ display: none
+}
+.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow {
+ width: 0
+}
+.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{
+ border-left: 1px solid transparent;
+}
+.edui-default .edui-tablepicker .edui-infoarea {
+ height: 14px;
+ line-height: 14px;
+ font-size: 12px;
+ width: 220px;
+ margin-bottom: 3px;
+ clear: both;
+}
+
+.edui-default .edui-tablepicker .edui-infoarea .edui-label {
+ float: left;
+}
+
+.edui-default .edui-dialog-buttons .edui-label {
+ line-height: 24px;
+}
+
+.edui-default .edui-tablepicker .edui-infoarea .edui-clickable {
+ float: right;
+}
+
+.edui-default .edui-tablepicker .edui-pickarea {
+ background: url("../images/unhighlighted.gif") repeat;
+ height: 220px;
+ width: 220px;
+}
+
+.edui-default .edui-tablepicker .edui-pickarea .edui-overlay {
+ background: url("../images/highlighted.gif") repeat;
+}
+
+/* 颜色弹出菜单 */
+.edui-default .edui-colorpicker-topbar {
+ height: 27px;
+ width: 200px;
+ /*border-bottom: 1px gray dashed;*/
+}
+
+.edui-default .edui-colorpicker-preview {
+ height: 20px;
+ border: 1px inset black;
+ margin-left: 1px;
+ width: 128px;
+ float: left;
+}
+
+.edui-default .edui-colorpicker-nocolor {
+ float: right;
+ margin-right: 1px;
+ font-size: 12px;
+ line-height: 14px;
+ height: 14px;
+ border: 1px solid #333;
+ padding: 3px 5px;
+ cursor: pointer;
+}
+
+.edui-default .edui-colorpicker-tablefirstrow {
+ height: 30px;
+}
+
+.edui-default .edui-colorpicker-colorcell {
+ width: 14px;
+ height: 14px;
+ display: block;
+ margin: 0;
+ cursor: pointer;
+}
+
+.edui-default .edui-colorpicker-colorcell:hover {
+ width: 14px;
+ height: 14px;
+ margin: 0;
+}
+.edui-default .edui-colorpicker-advbtn{
+ display: block;
+ text-align: center;
+ cursor: pointer;
+ height:20px;
+}
+.arrow_down{
+ background: white url('../images/arrow_down.png') no-repeat center;
+}
+.arrow_up{
+ background: white url('../images/arrow_up.png') no-repeat center;
+}
+/*高级的样式*/
+.edui-colorpicker-adv{
+ position: relative;
+ overflow: hidden;
+ height: 180px;
+ display: none;
+}
+.edui-colorpicker-plant, .edui-colorpicker-hue {
+ border: solid 1px #666;
+}
+.edui-colorpicker-pad {
+ width: 150px;
+ height: 150px;
+ left: 14px;
+ top: 13px;
+ position: absolute;
+ background: red;
+ overflow: hidden;
+ cursor: crosshair;
+}
+.edui-colorpicker-cover{
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 150px;
+ height: 150px;
+ background: url("../images/tangram-colorpicker.png") -160px -200px;
+}
+.edui-colorpicker-padDot{
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 11px;
+ height: 11px;
+ overflow: hidden;
+ background: url(../images/tangram-colorpicker.png) 0px -200px repeat-x;
+ z-index: 1000;
+
+}
+.edui-colorpicker-sliderMain {
+ position: absolute;
+ left: 171px;
+ top: 13px;
+ width: 19px;
+ height: 152px;
+ background: url(../images/tangram-colorpicker.png) -179px -12px no-repeat;
+
+}
+.edui-colorpicker-slider {
+ width: 100%;
+ height: 100%;
+ cursor: pointer;
+}
+.edui-colorpicker-thumb{
+ position: absolute;
+ top: 0;
+ cursor: pointer;
+ height: 3px;
+ left: -1px;
+ right: -1px;
+ border: 1px solid black;
+ background: white;
+ opacity: .8;
+}
+/*自动排版弹出菜单*/
+.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body {
+ font-size: 12px;
+ margin-bottom: 3px;
+ clear: both;
+}
+
+.edui-default .edui-autotypesetpicker-body table {
+ border-collapse: separate;
+ border-spacing: 2px;
+}
+
+.edui-default .edui-autotypesetpicker-body td {
+ font-size: 12px;
+ word-wrap:break-word;
+}
+
+.edui-default .edui-autotypesetpicker-body td input {
+ margin: 3px 3px 3px 4px;
+ *margin: 1px 0 0 0;
+}
+/*自动排版弹出菜单*/
+.edui-default .edui-cellalignpicker .edui-cellalignpicker-body {
+ width: 70px;
+ font-size: 12px;
+ cursor: default;
+}
+
+.edui-default .edui-cellalignpicker-body table {
+ border-collapse: separate;
+ border-spacing: 0;
+}
+.edui-default .edui-cellalignpicker-body td{
+ padding: 1px;
+}
+.edui-default .edui-cellalignpicker-body .edui-icon{
+ height: 20px;
+ width: 20px;
+ padding: 1px;
+ background-image: url(../images/table-cell-align.png);
+}
+
+.edui-default .edui-cellalignpicker-body .edui-left{
+ background-position: 0 0;
+}
+
+.edui-default .edui-cellalignpicker-body .edui-center{
+ background-position: -25px 0;
+}
+.edui-default .edui-cellalignpicker-body .edui-right{
+ background-position: -51px 0;
+}
+
+.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{
+ background-position: -73px 0;
+}
+
+.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{
+ background-position: -98px 0;
+}
+
+.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{
+ background-position: -124px 0;
+}
+
+.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left {
+ background-position: -146px 0;
+ background-color: #f1f4f5;
+}
+
+.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center {
+ background-position: -245px 0;
+}
+
+.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right {
+ background-position: -271px 0;
+}
+/*分隔线*/
+.edui-default .edui-toolbar .edui-separator {
+ width: 2px;
+ height: 20px;
+ margin: 2px 4px 2px 3px;
+ background: url(../images/icons.png) -181px 0;
+ background: url(../images/icons.gif) -181px 0 \9;
+}
+
+/*颜色按钮 */
+.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump {
+ position: absolute;
+ overflow: hidden;
+ bottom: 1px;
+ left: 1px;
+ width: 18px;
+ height: 4px;
+}
+/*表情按钮及弹出菜单*/
+/*去除了表情的下拉箭头*/
+.edui-default .edui-for-emotion .edui-icon {
+ background-position: -60px -20px;
+}
+.edui-default .edui-for-emotion .edui-popup-content iframe
+{
+ width: 514px;
+ height: 380px;
+ overflow: hidden;
+}
+.edui-default .edui-for-emotion .edui-popup-content
+{
+ position: relative;
+ z-index: 555
+}
+
+.edui-default .edui-for-emotion .edui-splitborder {
+ display: none
+}
+
+.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow
+{
+ width: 0
+}
+.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder
+{
+ border-left: 1px solid transparent;
+}
+/*contextmenu*/
+.edui-default .edui-hassubmenu .edui-arrow {
+ height: 20px;
+ width: 20px;
+ float: right;
+ background: url("../images/icons-all.gif") no-repeat 10px -233px;
+}
+
+.edui-default .edui-menu-body .edui-menuitem {
+ padding: 1px;
+}
+
+.edui-default .edui-menuseparator {
+ margin: 2px 0;
+ height: 1px;
+ overflow: hidden;
+}
+
+.edui-default .edui-menuseparator-inner {
+ border-bottom: 1px solid #e2e3e3;
+ margin-left: 29px;
+ margin-right: 1px;
+}
+
+.edui-default .edui-menu-body .edui-state-hover {
+ padding: 0 !important;
+ background-color: #fff5d4;
+ border: 1px solid #dcac6c;
+}
+/*弹出菜单*/
+.edui-default .edui-shortcutmenu {
+ padding: 2px;
+ width: 190px;
+ height: 50px;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border-radius: 5px;
+}
+
+/*粘贴弹出菜单*/
+.edui-default .edui-wordpastepop .edui-popup-content{
+ border: none;
+ padding: 0;
+ width: 54px;
+ height: 21px;
+}
+.edui-default .edui-pasteicon {
+ width: 100%;
+ height: 100%;
+ background-image: url('../images/wordpaste.png');
+ background-position: 0 0;
+}
+
+.edui-default .edui-pasteicon.edui-state-opened {
+ background-position: 0 -34px;
+}
+
+.edui-default .edui-pastecontainer {
+ position: relative;
+ visibility: hidden;
+ width: 97px;
+ background: #fff;
+ border: 1px solid #ccc;
+}
+
+.edui-default .edui-pastecontainer .edui-title {
+ font-weight: bold;
+ background: #F8F8FF;
+ height: 25px;
+ line-height: 25px;
+ font-size: 12px;
+ padding-left: 5px;
+}
+
+.edui-default .edui-pastecontainer .edui-button {
+ overflow: hidden;
+ margin: 3px 0;
+}
+
+.edui-default .edui-pastecontainer .edui-button .edui-richtxticon,
+.edui-default .edui-pastecontainer .edui-button .edui-tagicon,
+.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{
+ float: left;
+ cursor: pointer;
+ width: 29px;
+ height: 29px;
+ margin-left: 5px;
+ background-image: url('../images/wordpaste.png');
+ background-repeat: no-repeat;
+}
+.edui-default .edui-pastecontainer .edui-button .edui-richtxticon {
+ margin-left: 0;
+ background-position: -109px 0;
+}
+.edui-default .edui-pastecontainer .edui-button .edui-tagicon {
+ background-position: -148px 1px;
+}
+
+.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon {
+ background-position: -72px 0;
+}
+
+.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon {
+ background-position: -109px -34px;
+}
+.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{
+ background-position: -148px -34px;
+}
+.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{
+ background-position: -72px -34px;
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/themes/default/css/ueditor.min.css b/public/static/admin_static/lib/ueditor/themes/default/css/ueditor.min.css
new file mode 100644
index 0000000..4bc00c7
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/themes/default/css/ueditor.min.css
@@ -0,0 +1,8 @@
+/*!
+ * UEditor
+ * version: ueditor
+ * build: Wed Aug 10 2016 11:06:03 GMT+0800 (CST)
+ */
+
+
+.edui-default .edui-box{border:0;padding:0;margin:0;overflow:hidden}.edui-default a.edui-box{display:block;text-decoration:none;color:#000}.edui-default a.edui-box:hover{text-decoration:none}.edui-default a.edui-box:active{text-decoration:none}.edui-default table.edui-box{border-collapse:collapse}.edui-default ul.edui-box{list-style-type:none}div.edui-box{position:relative;display:-moz-inline-box!important;display:inline-block!important;vertical-align:top}.edui-default .edui-clearfix{zoom:1}.edui-default .edui-clearfix:after{content:'\20';display:block;clear:both}* html div.edui-box{display:inline!important}:first-child+html div.edui-box{display:inline!important}.edui-default .edui-button-body,.edui-splitbutton-body,.edui-menubutton-body,.edui-combox-body{position:relative}.edui-default .edui-popup{position:absolute;-webkit-user-select:none;-moz-user-select:none}.edui-default .edui-popup .edui-shadow{position:absolute;z-index:-1}.edui-default .edui-popup .edui-bordereraser{position:absolute;overflow:hidden}.edui-default .edui-tablepicker .edui-canvas{position:relative}.edui-default .edui-tablepicker .edui-canvas .edui-overlay{position:absolute}.edui-default .edui-dialog-modalmask,.edui-dialog-dragmask{position:absolute;left:0;top:0;width:100%;height:100%}.edui-default .edui-toolbar{position:relative}.edui-default .edui-label{cursor:default}.edui-default span.edui-clickable{color:#00f;cursor:pointer;text-decoration:underline}.edui-default span.edui-unclickable{color:gray;cursor:default}.edui-default .edui-toolbar{cursor:default;-webkit-user-select:none;-moz-user-select:none;padding:1px;overflow:hidden;zoom:1;width:auto;height:auto}.edui-default .edui-toolbar .edui-button,.edui-default .edui-toolbar .edui-splitbutton,.edui-default .edui-toolbar .edui-menubutton,.edui-default .edui-toolbar .edui-combox{margin:1px}.edui-default .edui-editor{border:1px solid #d4d4d4;background-color:#fff;position:relative;overflow:visible;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.edui-editor div{width:auto;height:auto}.edui-default .edui-editor-toolbarbox{position:relative;zoom:1;-webkit-box-shadow:0 1px 4px rgba(204,204,204,.6);-moz-box-shadow:0 1px 4px rgba(204,204,204,.6);box-shadow:0 1px 4px rgba(204,204,204,.6);border-top-left-radius:2px;border-top-right-radius:2px}.edui-default .edui-editor-toolbarboxouter{border-bottom:1px solid #d4d4d4;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,.065);box-shadow:0 1px 4px rgba(0,0,0,.065)}.edui-default .edui-editor-toolbarboxinner{padding:2px}.edui-default .edui-editor-iframeholder{position:relative}.edui-default .edui-editor-bottomContainer{overflow:hidden}.edui-default .edui-editor-bottomContainer table{width:100%;height:0;overflow:hidden;border-spacing:0}.edui-default .edui-editor-bottomContainer td{white-space:nowrap;border-top:1px solid #ccc;line-height:20px;font-size:12px;font-family:Arial,Helvetica,Tahoma,Verdana,Sans-Serif}.edui-default .edui-editor-wordcount{text-align:right;margin-right:5px;color:#aaa}.edui-default .edui-editor-scale{width:12px}.edui-default .edui-editor-scale .edui-editor-icon{float:right;width:100%;height:12px;margin-top:10px;background:url(../images/scale.png) no-repeat;cursor:se-resize}.edui-default .edui-editor-breadcrumb{margin:2px 0 0 3px}.edui-default .edui-editor-breadcrumb span{cursor:pointer;text-decoration:underline;color:#00f}.edui-default .edui-toolbar .edui-for-fullscreen{float:right}.edui-default .edui-bubble .edui-popup-content{border:1px solid #DCAC6C;background-color:#fff6d9;padding:5px;font-size:10pt;font-family:"宋体"}.edui-default .edui-bubble .edui-shadow{}.edui-default .edui-editor-toolbarmsg{background-color:#FFF6D9;border-bottom:1px solid #ccc;position:absolute;bottom:-25px;left:0;z-index:1009;width:99.9%}.edui-default .edui-editor-toolbarmsg-upload{font-size:14px;color:#00f;width:100px;height:16px;line-height:16px;cursor:pointer;position:absolute;top:5px;left:350px}.edui-default .edui-editor-toolbarmsg-label{font-size:12px;line-height:16px;padding:4px}.edui-default .edui-editor-toolbarmsg-close{float:right;width:20px;height:16px;line-height:16px;cursor:pointer;color:red}.edui-default .edui-list .edui-bordereraser{display:none}.edui-default .edui-listitem{padding:1px;white-space:nowrap}.edui-default .edui-list .edui-state-hover{position:relative;background-color:#fff5d4;border:1px solid #dcac6c;padding:0}.edui-default .edui-for-fontfamily .edui-listitem-label{min-width:130px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-insertcode .edui-listitem-label{min-width:120px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-underline .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px;font-size:12px}.edui-default .edui-for-fontsize .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px}.edui-default .edui-for-paragraph .edui-listitem-label{min-width:200px;_width:200px;padding:2px 5px}.edui-default .edui-for-rowspacingtop .edui-listitem-label,.edui-default .edui-for-rowspacingbottom .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-lineheight .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-customstyle .edui-listitem-label{min-width:200px;_width:200px;width:200px!important;padding:2px 5px}.edui-default .edui-menu{z-index:3000}.edui-default .edui-menu .edui-popup-content{padding:3px}.edui-default .edui-menu-body{_width:150px;min-width:170px;background:url(../images/sparator_v.png) repeat-y 25px}.edui-default .edui-menuitem-body{}.edui-default .edui-menuitem{height:20px;cursor:default;vertical-align:top}.edui-default .edui-menuitem .edui-icon{width:20px!important;height:20px!important;background:url(../images/icons.png) 0 -4000px;background:url(../images/icons.gif) 0 -4000px\9}.edui-default .edui-menuitem .edui-label{font-size:12px;line-height:20px;height:20px;padding-left:10px}.edui-default .edui-state-checked .edui-menuitem-body{background:url(../images/icons-all.gif) no-repeat 6px -205px}.edui-default .edui-state-disabled .edui-menuitem-label{color:gray}.edui-default .edui-toolbar .edui-combox-body .edui-button-body{width:60px;font-size:12px;height:20px;line-height:20px;padding-left:5px;white-space:nowrap;margin:0 3px 0 0}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{background:url(../images/icons.png) -741px 0;_background:url(../images/icons.gif) -741px 0;height:20px;width:9px}.edui-default .edui-toolbar .edui-combox .edui-combox-body{border:1px solid #CCC;background-color:#fff;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-combox-body .edui-splitborder{display:none}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{border-left:1px solid #CCC}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body{background-color:#fff5d4;border:1px solid #dcac6c}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow{border-left:1px solid #dcac6c}.edui-default .edui-toolbar .edui-state-checked .edui-combox-body{background-color:#FFE69F;border:1px solid #DCAC6C}.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow{border-left:1px solid #DCAC6C}.edui-toolbar .edui-state-disabled .edui-combox-body{background-color:#F0F0EE;opacity:.3;filter:alpha(opacity=30)}.edui-toolbar .edui-state-opened .edui-combox-body{background-color:#fff;border:1px solid gray}.edui-default .edui-toolbar .edui-button .edui-icon,.edui-default .edui-toolbar .edui-menubutton .edui-icon,.edui-default .edui-toolbar .edui-splitbutton .edui-icon{height:20px!important;width:20px!important;background-image:url(../images/icons.png);background-image:url(../images/icons.gif) \9}.edui-default .edui-toolbar .edui-button .edui-button-wrap{padding:1px;position:relative}.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap{background-color:#fff5d4;padding:0;border:1px solid #dcac6c}.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap{background-color:#ffe69f;padding:0;border:1px solid #dcac6c;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap{background-color:#fff;padding:0;border:1px solid gray}.edui-default .edui-toolbar .edui-state-disabled .edui-label{color:#ccc}.edui-default .edui-toolbar .edui-state-disabled .edui-icon{opacity:.3;filter:alpha(opacity=30)}.edui-default .edui-for-undo .edui-icon{background-position:-160px 0}.edui-default .edui-for-redo .edui-icon{background-position:-100px 0}.edui-default .edui-for-bold .edui-icon{background-position:0 0}.edui-default .edui-for-italic .edui-icon{background-position:-60px 0}.edui-default .edui-for-fontborder .edui-icon{background-position:-160px -40px}.edui-default .edui-for-underline .edui-icon{background-position:-140px 0}.edui-default .edui-for-strikethrough .edui-icon{background-position:-120px 0}.edui-default .edui-for-subscript .edui-icon{background-position:-600px 0}.edui-default .edui-for-superscript .edui-icon{background-position:-620px 0}.edui-default .edui-for-blockquote .edui-icon{background-position:-220px 0}.edui-default .edui-for-forecolor .edui-icon{background-position:-720px 0}.edui-default .edui-for-backcolor .edui-icon{background-position:-760px 0}.edui-default .edui-for-inserttable .edui-icon{background-position:-580px -20px}.edui-default .edui-for-autotypeset .edui-icon{background-position:-640px -40px}.edui-default .edui-for-justifyleft .edui-icon{background-position:-460px 0}.edui-default .edui-for-justifycenter .edui-icon{background-position:-420px 0}.edui-default .edui-for-justifyright .edui-icon{background-position:-480px 0}.edui-default .edui-for-justifyjustify .edui-icon{background-position:-440px 0}.edui-default .edui-for-insertorderedlist .edui-icon{background-position:-80px 0}.edui-default .edui-for-insertunorderedlist .edui-icon{background-position:-20px 0}.edui-default .edui-for-lineheight .edui-icon{background-position:-725px -40px}.edui-default .edui-for-rowspacingbottom .edui-icon{background-position:-745px -40px}.edui-default .edui-for-rowspacingtop .edui-icon{background-position:-765px -40px}.edui-default .edui-for-horizontal .edui-icon{background-position:-360px 0}.edui-default .edui-for-link .edui-icon{background-position:-500px 0}.edui-default .edui-for-code .edui-icon{background-position:-440px -40px}.edui-default .edui-for-insertimage .edui-icon{background-position:-726px -77px}.edui-default .edui-for-insertframe .edui-icon{background-position:-240px -40px}.edui-default .edui-for-emoticon .edui-icon{background-position:-60px -20px}.edui-default .edui-for-spechars .edui-icon{background-position:-240px 0}.edui-default .edui-for-help .edui-icon{background-position:-340px 0}.edui-default .edui-for-print .edui-icon{background-position:-440px -20px}.edui-default .edui-for-preview .edui-icon{background-position:-420px -20px}.edui-default .edui-for-selectall .edui-icon{background-position:-400px -20px}.edui-default .edui-for-searchreplace .edui-icon{background-position:-520px -20px}.edui-default .edui-for-map .edui-icon{background-position:-40px -40px}.edui-default .edui-for-gmap .edui-icon{background-position:-260px -40px}.edui-default .edui-for-insertvideo .edui-icon{background-position:-320px -20px}.edui-default .edui-for-time .edui-icon{background-position:-160px -20px}.edui-default .edui-for-date .edui-icon{background-position:-140px -20px}.edui-default .edui-for-cut .edui-icon{background-position:-680px 0}.edui-default .edui-for-copy .edui-icon{background-position:-700px 0}.edui-default .edui-for-paste .edui-icon{background-position:-560px 0}.edui-default .edui-for-formatmatch .edui-icon{background-position:-40px 0}.edui-default .edui-for-pasteplain .edui-icon{background-position:-360px -20px}.edui-default .edui-for-directionalityltr .edui-icon{background-position:-20px -20px}.edui-default .edui-for-directionalityrtl .edui-icon{background-position:-40px -20px}.edui-default .edui-for-source .edui-icon{background-position:-261px -0px}.edui-default .edui-for-removeformat .edui-icon{background-position:-580px 0}.edui-default .edui-for-unlink .edui-icon{background-position:-640px 0}.edui-default .edui-for-touppercase .edui-icon{background-position:-786px 0}.edui-default .edui-for-tolowercase .edui-icon{background-position:-806px 0}.edui-default .edui-for-insertrow .edui-icon{background-position:-478px -76px}.edui-default .edui-for-insertrownext .edui-icon{background-position:-498px -76px}.edui-default .edui-for-insertcol .edui-icon{background-position:-455px -76px}.edui-default .edui-for-insertcolnext .edui-icon{background-position:-429px -76px}.edui-default .edui-for-mergeright .edui-icon{background-position:-60px -40px}.edui-default .edui-for-mergedown .edui-icon{background-position:-80px -40px}.edui-default .edui-for-splittorows .edui-icon{background-position:-100px -40px}.edui-default .edui-for-splittocols .edui-icon{background-position:-120px -40px}.edui-default .edui-for-insertparagraphbeforetable .edui-icon{background-position:-140px -40px}.edui-default .edui-for-deleterow .edui-icon{background-position:-660px -20px}.edui-default .edui-for-deletecol .edui-icon{background-position:-640px -20px}.edui-default .edui-for-splittocells .edui-icon{background-position:-800px -20px}.edui-default .edui-for-mergecells .edui-icon{background-position:-760px -20px}.edui-default .edui-for-deletetable .edui-icon{background-position:-620px -20px}.edui-default .edui-for-cleardoc .edui-icon{background-position:-520px 0}.edui-default .edui-for-fullscreen .edui-icon{background-position:-100px -20px}.edui-default .edui-for-anchor .edui-icon{background-position:-200px 0}.edui-default .edui-for-pagebreak .edui-icon{background-position:-460px -40px}.edui-default .edui-for-imagenone .edui-icon{background-position:-480px -40px}.edui-default .edui-for-imageleft .edui-icon{background-position:-500px -40px}.edui-default .edui-for-wordimage .edui-icon{background-position:-660px -40px}.edui-default .edui-for-imageright .edui-icon{background-position:-520px -40px}.edui-default .edui-for-imagecenter .edui-icon{background-position:-540px -40px}.edui-default .edui-for-indent .edui-icon{background-position:-400px 0}.edui-default .edui-for-outdent .edui-icon{background-position:-540px 0}.edui-default .edui-for-webapp .edui-icon{background-position:-601px -40px}.edui-default .edui-for-table .edui-icon{background-position:-580px -20px}.edui-default .edui-for-edittable .edui-icon{background-position:-420px -40px}.edui-default .edui-for-template .edui-icon{background-position:-339px -40px}.edui-default .edui-for-delete .edui-icon{background-position:-360px -40px}.edui-default .edui-for-attachment .edui-icon{background-position:-620px -40px}.edui-default .edui-for-edittd .edui-icon{background-position:-700px -40px}.edui-default .edui-for-snapscreen .edui-icon{background-position:-581px -40px}.edui-default .edui-for-scrawl .edui-icon{background-position:-801px -41px}.edui-default .edui-for-background .edui-icon{background-position:-680px -40px}.edui-default .edui-for-music .edui-icon{background-position:-18px -40px}.edui-default .edui-for-formula .edui-icon{background-position:-200px -40px}.edui-default .edui-for-aligntd .edui-icon{background-position:-236px -76px}.edui-default .edui-for-insertparagraphtrue .edui-icon{background-position:-625px -76px}.edui-default .edui-for-insertparagraph .edui-icon{background-position:-602px -76px}.edui-default .edui-for-insertcaption .edui-icon{background-position:-336px -76px}.edui-default .edui-for-deletecaption .edui-icon{background-position:-362px -76px}.edui-default .edui-for-inserttitle .edui-icon{background-position:-286px -76px}.edui-default .edui-for-deletetitle .edui-icon{background-position:-311px -76px}.edui-default .edui-for-aligntable .edui-icon{background-position:-440px 0}.edui-default .edui-for-tablealignment-left .edui-icon{background-position:-460px 0}.edui-default .edui-for-tablealignment-center .edui-icon{background-position:-420px 0}.edui-default .edui-for-tablealignment-right .edui-icon{background-position:-480px 0}.edui-default .edui-for-drafts .edui-icon{background-position:-560px 0}.edui-default .edui-for-charts .edui-icon{background:url( ../images/charts.png ) no-repeat 2px 3px!important}.edui-default .edui-for-inserttitlecol .edui-icon{background-position:-673px -76px}.edui-default .edui-for-deletetitlecol .edui-icon{background-position:-698px -76px}.edui-default .edui-for-simpleupload .edui-icon{background-position:-380px 0}.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow{background:url(../images/icons.png) -741px 0;_background:url(../images/icons.gif) -741px 0;height:20px;width:9px}.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body{padding:1px}.edui-default .edui-toolbar .edui-splitborder{width:1px;height:20px}.edui-default .edui-toolbar .edui-state-hover .edui-splitborder{width:1px;border-left:0 solid #dcac6c}.edui-default .edui-toolbar .edui-state-active .edui-splitborder{width:0;border-left:1px solid gray}.edui-default .edui-toolbar .edui-state-opened .edui-splitborder{width:1px;border:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body{background-color:#fff5d4;border:1px solid #dcac6c;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body{background-color:#FFE69F;border:1px solid #DCAC6C;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body{background-color:#fff;border:1px solid gray;padding:0}.edui-default .edui-state-disabled .edui-arrow{opacity:.3;_filter:alpha(opacity=30)}.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body{background-color:#fff;border:1px solid gray;padding:0}.edui-default .edui-for-insertorderedlist .edui-bordereraser,.edui-default .edui-for-lineheight .edui-bordereraser,.edui-default .edui-for-rowspacingtop .edui-bordereraser,.edui-default .edui-for-rowspacingbottom .edui-bordereraser,.edui-default .edui-for-insertunorderedlist .edui-bordereraser{background-color:#fff}.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon{background-image:none}.edui-default .edui-popup{z-index:3000;background-color:#fff;width:auto;height:auto}.edui-default .edui-popup .edui-shadow{left:0;top:0;width:100%;height:100%}.edui-default .edui-popup-content{border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 4px rgba(0,0,0,.2);-moz-box-shadow:0 3px 4px rgba(0,0,0,.2);box-shadow:0 3px 4px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;padding:5px;background:#fff}.edui-default .edui-popup .edui-bordereraser{background-color:#fff;height:3px}.edui-default .edui-menu .edui-bordereraser{height:3px}.edui-default .edui-anchor-topleft .edui-bordereraser{left:1px;top:-2px}.edui-default .edui-anchor-topright .edui-bordereraser{right:1px;top:-2px}.edui-default .edui-anchor-bottomleft .edui-bordereraser{left:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-default .edui-anchor-bottomright .edui-bordereraser{right:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-popup div{width:auto;height:auto}.edui-default .edui-editor-messageholder{display:block;width:150px;height:auto;border:0;margin:0;padding:0;position:absolute;top:28px;right:3px}.edui-default .edui-message{min-height:10px;text-shadow:0 1px 0 rgba(255,255,255,.5);padding:0;margin-bottom:3px;position:relative}.edui-default .edui-message-body{border-radius:3px;padding:8px 15px 8px 8px;color:#c09853;background-color:#fcf8e3;border:1px solid #fbeed5}.edui-default .edui-message-type-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.edui-default .edui-message-type-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.edui-default .edui-message-type-danger,.edui-default .edui-message-type-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.edui-default .edui-message .edui-message-closer{display:block;width:16px;height:16px;line-height:16px;position:absolute;top:0;right:0;padding:0;cursor:pointer;background:transparent;border:0;float:right;font-size:20px;font-weight:700;color:#999;text-shadow:0 1px 0 #fff;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.edui-default .edui-message .edui-message-content{font-size:10pt;word-wrap:break-word;word-break:normal}.edui-default .edui-dialog{z-index:2000;position:absolute}.edui-dialog div{width:auto}.edui-default .edui-dialog-wrap{margin-right:6px;margin-bottom:6px}.edui-default .edui-dialog-fullscreen-flag{margin-right:0;margin-bottom:0}.edui-default .edui-dialog-body{position:relative;padding:2px 0 0 2px;_zoom:1}.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body{padding:0}.edui-default .edui-dialog-shadow{position:absolute;z-index:-1;left:0;top:0;width:100%;height:100%;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.edui-default .edui-dialog-foot{background-color:#fff}.edui-default .edui-dialog-titlebar{height:26px;border-bottom:1px solid #c6c6c6;background:url(../images/dialog-title-bg.png) repeat-x bottom;position:relative;cursor:move}.edui-default .edui-dialog-caption{font-weight:700;font-size:12px;line-height:26px;padding-left:5px}.edui-default .edui-dialog-draghandle{height:26px}.edui-default .edui-dialog-closebutton{position:absolute!important;right:5px;top:3px}.edui-default .edui-dialog-closebutton .edui-button-body{height:20px;width:20px;cursor:pointer;background:url(../images/icons-all.gif) no-repeat 0 -59px}.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body{background:url(../images/icons-all.gif) no-repeat 0 -89px}.edui-default .edui-dialog-foot{height:40px}.edui-default .edui-dialog-buttons{position:absolute;right:0}.edui-default .edui-dialog-buttons .edui-button{margin-right:10px}.edui-default .edui-dialog-buttons .edui-button .edui-button-body{background:url(../images/icons-all.gif) no-repeat;height:24px;width:96px;font-size:12px;line-height:24px;text-align:center;cursor:default}.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body{background:url(../images/icons-all.gif) no-repeat 0 -30px}.edui-default .edui-dialog iframe{border:0;padding:0;margin:0;vertical-align:top}.edui-default .edui-dialog-modalmask{opacity:.3;filter:alpha(opacity=30);background-color:#ccc;position:absolute}.edui-default .edui-dialog-dragmask{position:absolute;background-color:transparent;cursor:move}.edui-default .edui-dialog-content{position:relative}.edui-default .dialogcontmask{cursor:move;visibility:hidden;display:block;position:absolute;width:100%;height:100%;opacity:0;filter:alpha(opacity=0)}.edui-default .edui-for-link .edui-dialog-content{width:420px;height:200px;overflow:hidden}.edui-default .edui-for-background .edui-dialog-content{width:440px;height:280px;overflow:hidden}.edui-default .edui-for-template .edui-dialog-content{width:630px;height:390px;overflow:hidden}.edui-default .edui-for-scrawl .edui-dialog-content{width:515px;*width:506px;height:360px}.edui-default .edui-for-spechars .edui-dialog-content{width:620px;height:500px;*width:630px;*height:570px}.edui-default .edui-for-insertimage .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-webapp .edui-dialog-content{width:560px;_width:565px;height:450px;overflow:hidden}.edui-default .edui-for-insertframe .edui-dialog-content{width:350px;height:200px;overflow:hidden}.edui-default .edui-for-wordimage .edui-dialog-content{width:620px;height:380px;overflow:hidden}.edui-default .edui-for-attachment .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-map .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-gmap .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-insertvideo .edui-dialog-content{width:590px;height:390px}.edui-default .edui-for-anchor .edui-dialog-content{width:320px;height:60px;overflow:hidden}.edui-default .edui-for-searchreplace .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-help .edui-dialog-content{width:400px;height:420px}.edui-default .edui-for-edittable .edui-dialog-content{width:540px;_width:590px;height:335px}.edui-default .edui-for-edittip .edui-dialog-content{width:225px;height:60px}.edui-default .edui-for-edittd .edui-dialog-content{width:240px;height:50px}.edui-default .edui-for-snapscreen .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-music .edui-dialog-content{width:515px;height:360px}.edui-default .edui-for-paragraph .edui-listitem-label{font-family:Tahoma,Verdana,Arial,Helvetica}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p{font-size:22px;line-height:27px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1{font-weight:bolder;font-size:32px;line-height:36px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2{font-weight:bolder;font-size:27px;line-height:29px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3{font-weight:bolder;font-size:19px;line-height:23px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4{font-weight:bolder;font-size:16px;line-height:19px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5{font-weight:bolder;font-size:13px;line-height:16px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6{font-weight:bolder;font-size:12px;line-height:14px}.edui-default .edui-for-inserttable .edui-splitborder{display:none}.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-tablepicker .edui-infoarea{height:14px;line-height:14px;font-size:12px;width:220px;margin-bottom:3px;clear:both}.edui-default .edui-tablepicker .edui-infoarea .edui-label{float:left}.edui-default .edui-dialog-buttons .edui-label{line-height:24px}.edui-default .edui-tablepicker .edui-infoarea .edui-clickable{float:right}.edui-default .edui-tablepicker .edui-pickarea{background:url(../images/unhighlighted.gif) repeat;height:220px;width:220px}.edui-default .edui-tablepicker .edui-pickarea .edui-overlay{background:url(../images/highlighted.gif) repeat}.edui-default .edui-colorpicker-topbar{height:27px;width:200px}.edui-default .edui-colorpicker-preview{height:20px;border:1px inset #000;margin-left:1px;width:128px;float:left}.edui-default .edui-colorpicker-nocolor{float:right;margin-right:1px;font-size:12px;line-height:14px;height:14px;border:1px solid #333;padding:3px 5px;cursor:pointer}.edui-default .edui-colorpicker-tablefirstrow{height:30px}.edui-default .edui-colorpicker-colorcell{width:14px;height:14px;display:block;margin:0;cursor:pointer}.edui-default .edui-colorpicker-colorcell:hover{width:14px;height:14px;margin:0}.edui-default .edui-colorpicker-advbtn{display:block;text-align:center;cursor:pointer;height:20px}.arrow_down{background:#fff url(../images/arrow_down.png) no-repeat center}.arrow_up{background:#fff url(../images/arrow_up.png) no-repeat center}.edui-colorpicker-adv{position:relative;overflow:hidden;height:180px;display:none}.edui-colorpicker-plant,.edui-colorpicker-hue{border:solid 1px #666}.edui-colorpicker-pad{width:150px;height:150px;left:14px;top:13px;position:absolute;background:red;overflow:hidden;cursor:crosshair}.edui-colorpicker-cover{position:absolute;top:0;left:0;width:150px;height:150px;background:url(../images/tangram-colorpicker.png) -160px -200px}.edui-colorpicker-padDot{position:absolute;top:0;left:0;width:11px;height:11px;overflow:hidden;background:url(../images/tangram-colorpicker.png) 0 -200px repeat-x;z-index:1000}.edui-colorpicker-sliderMain{position:absolute;left:171px;top:13px;width:19px;height:152px;background:url(../images/tangram-colorpicker.png) -179px -12px no-repeat}.edui-colorpicker-slider{width:100%;height:100%;cursor:pointer}.edui-colorpicker-thumb{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:#fff;opacity:.8}.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body{font-size:12px;margin-bottom:3px;clear:both}.edui-default .edui-autotypesetpicker-body table{border-collapse:separate;border-spacing:2px}.edui-default .edui-autotypesetpicker-body td{font-size:12px;word-wrap:break-word}.edui-default .edui-autotypesetpicker-body td input{margin:3px 3px 3px 4px;*margin:1px 0 0}.edui-default .edui-cellalignpicker .edui-cellalignpicker-body{width:70px;font-size:12px;cursor:default}.edui-default .edui-cellalignpicker-body table{border-collapse:separate;border-spacing:0}.edui-default .edui-cellalignpicker-body td{padding:1px}.edui-default .edui-cellalignpicker-body .edui-icon{height:20px;width:20px;padding:1px;background-image:url(../images/table-cell-align.png)}.edui-default .edui-cellalignpicker-body .edui-left{background-position:0 0}.edui-default .edui-cellalignpicker-body .edui-center{background-position:-25px 0}.edui-default .edui-cellalignpicker-body .edui-right{background-position:-51px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{background-position:-73px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{background-position:-98px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{background-position:-124px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left{background-position:-146px 0;background-color:#f1f4f5}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center{background-position:-245px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right{background-position:-271px 0}.edui-default .edui-toolbar .edui-separator{width:2px;height:20px;margin:2px 4px 2px 3px;background:url(../images/icons.png) -181px 0;background:url(../images/icons.gif) -181px 0 \9}.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump{position:absolute;overflow:hidden;bottom:1px;left:1px;width:18px;height:4px}.edui-default .edui-for-emotion .edui-icon{background-position:-60px -20px}.edui-default .edui-for-emotion .edui-popup-content iframe{width:514px;height:380px;overflow:hidden}.edui-default .edui-for-emotion .edui-popup-content{position:relative;z-index:555}.edui-default .edui-for-emotion .edui-splitborder{display:none}.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-hassubmenu .edui-arrow{height:20px;width:20px;float:right;background:url(../images/icons-all.gif) no-repeat 10px -233px}.edui-default .edui-menu-body .edui-menuitem{padding:1px}.edui-default .edui-menuseparator{margin:2px 0;height:1px;overflow:hidden}.edui-default .edui-menuseparator-inner{border-bottom:1px solid #e2e3e3;margin-left:29px;margin-right:1px}.edui-default .edui-menu-body .edui-state-hover{padding:0!important;background-color:#fff5d4;border:1px solid #dcac6c}.edui-default .edui-shortcutmenu{padding:2px;width:190px;height:50px;background-color:#fff;border:1px solid #ccc;border-radius:5px}.edui-default .edui-wordpastepop .edui-popup-content{border:0;padding:0;width:54px;height:21px}.edui-default .edui-pasteicon{width:100%;height:100%;background-image:url(../images/wordpaste.png);background-position:0 0}.edui-default .edui-pasteicon.edui-state-opened{background-position:0 -34px}.edui-default .edui-pastecontainer{position:relative;visibility:hidden;width:97px;background:#fff;border:1px solid #ccc}.edui-default .edui-pastecontainer .edui-title{font-weight:700;background:#F8F8FF;height:25px;line-height:25px;font-size:12px;padding-left:5px}.edui-default .edui-pastecontainer .edui-button{overflow:hidden;margin:3px 0}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon,.edui-default .edui-pastecontainer .edui-button .edui-tagicon,.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{float:left;cursor:pointer;width:29px;height:29px;margin-left:5px;background-image:url(../images/wordpaste.png);background-repeat:no-repeat}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon{margin-left:0;background-position:-109px 0}.edui-default .edui-pastecontainer .edui-button .edui-tagicon{background-position:-148px 1px}.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{background-position:-72px 0}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon{background-position:-109px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{background-position:-148px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{background-position:-72px -34px}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/themes/default/dialogbase.css b/public/static/admin_static/lib/ueditor/themes/default/dialogbase.css
new file mode 100644
index 0000000..cd663d5
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/themes/default/dialogbase.css
@@ -0,0 +1,100 @@
+/*弹出对话框页面样式组件
+*/
+
+/*reset
+*/
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+ margin: 0;
+ padding: 0;
+ outline: 0;
+ font-size: 100%;
+}
+
+body {
+ line-height: 1;
+}
+
+ol, ul {
+ list-style: none;
+}
+
+blockquote, q {
+ quotes: none;
+}
+
+ins {
+ text-decoration: none;
+}
+
+del {
+ text-decoration: line-through;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+/*module
+*/
+body {
+ background-color: #fff;
+ font: 12px/1.5 sans-serif, "宋体", "Arial Narrow", HELVETICA;
+ color: #646464;
+}
+
+/*tab*/
+.tabhead {
+ position: relative;
+ z-index: 10;
+}
+
+.tabhead span {
+ display: inline-block;
+ padding: 0 5px;
+ height: 30px;
+ border: 1px solid #ccc;
+ background: url("images/dialog-title-bg.png") repeat-x;
+ text-align: center;
+ line-height: 30px;
+ cursor: pointer;
+ *margin-right: 5px;
+}
+
+.tabhead span.focus {
+ height: 31px;
+ border-bottom: none;
+ background: #fff;
+}
+
+.tabbody {
+ position: relative;
+ top: -1px;
+ margin: 0 auto;
+ border: 1px solid #ccc;
+}
+
+/*button*/
+a.button {
+ display: block;
+ text-align: center;
+ line-height: 24px;
+ text-decoration: none;
+ height: 24px;
+ width: 95px;
+ border: 0;
+ color: #838383;
+ background: url(../../themes/default/images/icons-all.gif) no-repeat;
+}
+
+a.button:hover {
+ background-position: 0 -30px;
+}
\ No newline at end of file
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/anchor.gif b/public/static/admin_static/lib/ueditor/themes/default/images/anchor.gif
new file mode 100644
index 0000000..5aa797b
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/anchor.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/arrow.png b/public/static/admin_static/lib/ueditor/themes/default/images/arrow.png
new file mode 100644
index 0000000..d900886
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/arrow.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/arrow_down.png b/public/static/admin_static/lib/ueditor/themes/default/images/arrow_down.png
new file mode 100644
index 0000000..e9257e8
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/arrow_down.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/arrow_up.png b/public/static/admin_static/lib/ueditor/themes/default/images/arrow_up.png
new file mode 100644
index 0000000..74277af
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/arrow_up.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/button-bg.gif b/public/static/admin_static/lib/ueditor/themes/default/images/button-bg.gif
new file mode 100644
index 0000000..ec7fa2e
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/button-bg.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/cancelbutton.gif b/public/static/admin_static/lib/ueditor/themes/default/images/cancelbutton.gif
new file mode 100644
index 0000000..df4bc2c
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/cancelbutton.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/charts.png b/public/static/admin_static/lib/ueditor/themes/default/images/charts.png
new file mode 100644
index 0000000..713965c
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/charts.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/cursor_h.gif b/public/static/admin_static/lib/ueditor/themes/default/images/cursor_h.gif
new file mode 100644
index 0000000..d7c3e7e
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/cursor_h.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/cursor_h.png b/public/static/admin_static/lib/ueditor/themes/default/images/cursor_h.png
new file mode 100644
index 0000000..2088fc2
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/cursor_h.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/cursor_v.gif b/public/static/admin_static/lib/ueditor/themes/default/images/cursor_v.gif
new file mode 100644
index 0000000..bb508db
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/cursor_v.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/cursor_v.png b/public/static/admin_static/lib/ueditor/themes/default/images/cursor_v.png
new file mode 100644
index 0000000..6f39ca3
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/cursor_v.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/dialog-title-bg.png b/public/static/admin_static/lib/ueditor/themes/default/images/dialog-title-bg.png
new file mode 100644
index 0000000..f744f26
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/dialog-title-bg.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/filescan.png b/public/static/admin_static/lib/ueditor/themes/default/images/filescan.png
new file mode 100644
index 0000000..1d27158
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/filescan.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/highlighted.gif b/public/static/admin_static/lib/ueditor/themes/default/images/highlighted.gif
new file mode 100644
index 0000000..9272b49
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/highlighted.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/icons-all.gif b/public/static/admin_static/lib/ueditor/themes/default/images/icons-all.gif
new file mode 100644
index 0000000..21915e5
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/icons-all.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/icons.gif b/public/static/admin_static/lib/ueditor/themes/default/images/icons.gif
new file mode 100644
index 0000000..7abd30a
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/icons.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/icons.png b/public/static/admin_static/lib/ueditor/themes/default/images/icons.png
new file mode 100644
index 0000000..c015e3a
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/icons.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/loaderror.png b/public/static/admin_static/lib/ueditor/themes/default/images/loaderror.png
new file mode 100644
index 0000000..35ff333
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/loaderror.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/loading.gif b/public/static/admin_static/lib/ueditor/themes/default/images/loading.gif
new file mode 100644
index 0000000..b713e27
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/loading.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/lock.gif b/public/static/admin_static/lib/ueditor/themes/default/images/lock.gif
new file mode 100644
index 0000000..b4e6d78
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/lock.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/neweditor-tab-bg.png b/public/static/admin_static/lib/ueditor/themes/default/images/neweditor-tab-bg.png
new file mode 100644
index 0000000..8f398b0
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/neweditor-tab-bg.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/pagebreak.gif b/public/static/admin_static/lib/ueditor/themes/default/images/pagebreak.gif
new file mode 100644
index 0000000..8d1cffd
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/pagebreak.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/scale.png b/public/static/admin_static/lib/ueditor/themes/default/images/scale.png
new file mode 100644
index 0000000..f45adb5
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/scale.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/sortable.png b/public/static/admin_static/lib/ueditor/themes/default/images/sortable.png
new file mode 100644
index 0000000..1bca649
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/sortable.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/spacer.gif b/public/static/admin_static/lib/ueditor/themes/default/images/spacer.gif
new file mode 100644
index 0000000..5bfd67a
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/spacer.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/sparator_v.png b/public/static/admin_static/lib/ueditor/themes/default/images/sparator_v.png
new file mode 100644
index 0000000..8cf5662
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/sparator_v.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/table-cell-align.png b/public/static/admin_static/lib/ueditor/themes/default/images/table-cell-align.png
new file mode 100644
index 0000000..ddf4285
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/table-cell-align.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/tangram-colorpicker.png b/public/static/admin_static/lib/ueditor/themes/default/images/tangram-colorpicker.png
new file mode 100644
index 0000000..738e500
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/tangram-colorpicker.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/toolbar_bg.png b/public/static/admin_static/lib/ueditor/themes/default/images/toolbar_bg.png
new file mode 100644
index 0000000..7ab685f
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/toolbar_bg.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/unhighlighted.gif b/public/static/admin_static/lib/ueditor/themes/default/images/unhighlighted.gif
new file mode 100644
index 0000000..7ad0b67
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/unhighlighted.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/upload.png b/public/static/admin_static/lib/ueditor/themes/default/images/upload.png
new file mode 100644
index 0000000..08d4d92
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/upload.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/videologo.gif b/public/static/admin_static/lib/ueditor/themes/default/images/videologo.gif
new file mode 100644
index 0000000..555af74
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/videologo.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/word.gif b/public/static/admin_static/lib/ueditor/themes/default/images/word.gif
new file mode 100644
index 0000000..9ef5d09
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/word.gif differ
diff --git a/public/static/admin_static/lib/ueditor/themes/default/images/wordpaste.png b/public/static/admin_static/lib/ueditor/themes/default/images/wordpaste.png
new file mode 100644
index 0000000..9367758
Binary files /dev/null and b/public/static/admin_static/lib/ueditor/themes/default/images/wordpaste.png differ
diff --git a/public/static/admin_static/lib/ueditor/themes/iframe.css b/public/static/admin_static/lib/ueditor/themes/iframe.css
new file mode 100644
index 0000000..774013a
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/themes/iframe.css
@@ -0,0 +1 @@
+/*可以在这里添加你自己的css*/
diff --git a/public/static/admin_static/lib/ueditor/third-party/SyntaxHighlighter/shCore.js b/public/static/admin_static/lib/ueditor/third-party/SyntaxHighlighter/shCore.js
new file mode 100644
index 0000000..3249184
--- /dev/null
+++ b/public/static/admin_static/lib/ueditor/third-party/SyntaxHighlighter/shCore.js
@@ -0,0 +1,3655 @@
+// XRegExp 1.5.1
+// (c) 2007-2012 Steven Levithan
+// MIT License
+//
+// Provides an augmented, extensible, cross-browser implementation of regular expressions,
+// including support for additional syntax, flags, and methods
+
+var XRegExp;
+
+if (XRegExp) {
+ // Avoid running twice, since that would break references to native globals
+ throw Error("can't load XRegExp twice in the same frame");
+}
+
+// Run within an anonymous function to protect variables and avoid new globals
+(function (undefined) {
+
+ //---------------------------------
+ // Constructor
+ //---------------------------------
+
+ // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native
+ // regular expression in that additional syntax and flags are supported and cross-browser
+ // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and
+ // converts to type XRegExp
+ XRegExp = function (pattern, flags) {
+ var output = [],
+ currScope = XRegExp.OUTSIDE_CLASS,
+ pos = 0,
+ context, tokenResult, match, chr, regex;
+
+ if (XRegExp.isRegExp(pattern)) {
+ if (flags !== undefined)
+ throw TypeError("can't supply flags when constructing one RegExp from another");
+ return clone(pattern);
+ }
+ // Tokens become part of the regex construction process, so protect against infinite
+ // recursion when an XRegExp is constructed within a token handler or trigger
+ if (isInsideConstructor)
+ throw Error("can't call the XRegExp constructor within token definition functions");
+
+ flags = flags || "";
+ context = { // `this` object for custom tokens
+ hasNamedCapture: false,
+ captureNames: [],
+ hasFlag: function (flag) {return flags.indexOf(flag) > -1;},
+ setFlag: function (flag) {flags += flag;}
+ };
+
+ while (pos < pattern.length) {
+ // Check for custom tokens at the current position
+ tokenResult = runTokens(pattern, pos, currScope, context);
+
+ if (tokenResult) {
+ output.push(tokenResult.output);
+ pos += (tokenResult.match[0].length || 1);
+ } else {
+ // Check for native multicharacter metasequences (excluding character classes) at
+ // the current position
+ if (match = nativ.exec.call(nativeTokens[currScope], pattern.slice(pos))) {
+ output.push(match[0]);
+ pos += match[0].length;
+ } else {
+ chr = pattern.charAt(pos);
+ if (chr === "[")
+ currScope = XRegExp.INSIDE_CLASS;
+ else if (chr === "]")
+ currScope = XRegExp.OUTSIDE_CLASS;
+ // Advance position one character
+ output.push(chr);
+ pos++;
+ }
+ }
+ }
+
+ regex = RegExp(output.join(""), nativ.replace.call(flags, flagClip, ""));
+ regex._xregexp = {
+ source: pattern,
+ captureNames: context.hasNamedCapture ? context.captureNames : null
+ };
+ return regex;
+ };
+
+
+ //---------------------------------
+ // Public properties
+ //---------------------------------
+
+ XRegExp.version = "1.5.1";
+
+ // Token scope bitflags
+ XRegExp.INSIDE_CLASS = 1;
+ XRegExp.OUTSIDE_CLASS = 2;
+
+
+ //---------------------------------
+ // Private variables
+ //---------------------------------
+
+ var replacementToken = /\$(?:(\d\d?|[$&`'])|{([$\w]+)})/g,
+ flagClip = /[^gimy]+|([\s\S])(?=[\s\S]*\1)/g, // Nonnative and duplicate flags
+ quantifier = /^(?:[?*+]|{\d+(?:,\d*)?})\??/,
+ isInsideConstructor = false,
+ tokens = [],
+ // Copy native globals for reference ("native" is an ES3 reserved keyword)
+ nativ = {
+ exec: RegExp.prototype.exec,
+ test: RegExp.prototype.test,
+ match: String.prototype.match,
+ replace: String.prototype.replace,
+ split: String.prototype.split
+ },
+ compliantExecNpcg = nativ.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups
+ compliantLastIndexIncrement = function () {
+ var x = /^/g;
+ nativ.test.call(x, "");
+ return !x.lastIndex;
+ }(),
+ hasNativeY = RegExp.prototype.sticky !== undefined,
+ nativeTokens = {};
+
+ // `nativeTokens` match native multicharacter metasequences only (including deprecated octals,
+ // excluding character classes)
+ nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/;
+ nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/;
+
+
+ //---------------------------------
+ // Public methods
+ //---------------------------------
+
+ // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by
+ // the XRegExp library and can be used to create XRegExp plugins. This function is intended for
+ // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can
+ // be disabled by `XRegExp.freezeTokens`
+ XRegExp.addToken = function (regex, handler, scope, trigger) {
+ tokens.push({
+ pattern: clone(regex, "g" + (hasNativeY ? "y" : "")),
+ handler: handler,
+ scope: scope || XRegExp.OUTSIDE_CLASS,
+ trigger: trigger || null
+ });
+ };
+
+ // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag
+ // combination has previously been cached, the cached copy is returned; otherwise the newly
+ // created regex is cached
+ XRegExp.cache = function (pattern, flags) {
+ var key = pattern + "/" + (flags || "");
+ return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags));
+ };
+
+ // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh
+ // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global`
+ // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve
+ // special properties required for named capture
+ XRegExp.copyAsGlobal = function (regex) {
+ return clone(regex, "g");
+ };
+
+ // Accepts a string; returns the string with regex metacharacters escaped. The returned string
+ // can safely be used at any point within a regex to match the provided literal string. Escaped
+ // characters are [ ] { } ( ) * + ? - . , \ ^ $ | # and whitespace
+ XRegExp.escape = function (str) {
+ return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+ };
+
+ // Accepts a string to search, regex to search with, position to start the search within the
+ // string (default: 0), and an optional Boolean indicating whether matches must start at-or-
+ // after the position or at the specified position only. This function ignores the `lastIndex`
+ // of the provided regex in its own handling, but updates the property for compatibility
+ XRegExp.execAt = function (str, regex, pos, anchored) {
+ var r2 = clone(regex, "g" + ((anchored && hasNativeY) ? "y" : "")),
+ match;
+ r2.lastIndex = pos = pos || 0;
+ match = r2.exec(str); // Run the altered `exec` (required for `lastIndex` fix, etc.)
+ if (anchored && match && match.index !== pos)
+ match = null;
+ if (regex.global)
+ regex.lastIndex = match ? r2.lastIndex : 0;
+ return match;
+ };
+
+ // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing
+ // syntax and flag changes. Should be run after XRegExp and any plugins are loaded
+ XRegExp.freezeTokens = function () {
+ XRegExp.addToken = function () {
+ throw Error("can't run addToken after freezeTokens");
+ };
+ };
+
+ // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object.
+ // Note that this is also `true` for regex literals and regexes created by the `XRegExp`
+ // constructor. This works correctly for variables created in another frame, when `instanceof`
+ // and `constructor` checks would fail to work as intended
+ XRegExp.isRegExp = function (o) {
+ return Object.prototype.toString.call(o) === "[object RegExp]";
+ };
+
+ // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to
+ // iterate over regex matches compared to the traditional approaches of subverting
+ // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop
+ XRegExp.iterate = function (str, regex, callback, context) {
+ var r2 = clone(regex, "g"),
+ i = -1, match;
+ while (match = r2.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.)
+ if (regex.global)
+ regex.lastIndex = r2.lastIndex; // Doing this to follow expectations if `lastIndex` is checked within `callback`
+ callback.call(context, match, ++i, str, regex);
+ if (r2.lastIndex === match.index)
+ r2.lastIndex++;
+ }
+ if (regex.global)
+ regex.lastIndex = 0;
+ };
+
+ // Accepts a string and an array of regexes; returns the result of using each successive regex
+ // to search within the matches of the previous regex. The array of regexes can also contain
+ // objects with `regex` and `backref` properties, in which case the named or numbered back-
+ // references specified are passed forward to the next regex or returned. E.g.:
+ // var xregexpImgFileNames = XRegExp.matchChain(html, [
+ // {regex: / ]+)>/i, backref: 1}, // tag attributes
+ // {regex: XRegExp('(?ix) \\s src=" (? [^"]+ )'), backref: "src"}, // src attribute values
+ // {regex: XRegExp("^http://xregexp\\.com(/[^#?]+)", "i"), backref: 1}, // xregexp.com paths
+ // /[^\/]+$/ // filenames (strip directory paths)
+ // ]);
+ XRegExp.matchChain = function (str, chain) {
+ return function recurseChain (values, level) {
+ var item = chain[level].regex ? chain[level] : {regex: chain[level]},
+ regex = clone(item.regex, "g"),
+ matches = [], i;
+ for (i = 0; i < values.length; i++) {
+ XRegExp.iterate(values[i], regex, function (match) {
+ matches.push(item.backref ? (match[item.backref] || "") : match[0]);
+ });
+ }
+ return ((level === chain.length - 1) || !matches.length) ?
+ matches : recurseChain(matches, level + 1);
+ }([str], 0);
+ };
+
+
+ //---------------------------------
+ // New RegExp prototype methods
+ //---------------------------------
+
+ // Accepts a context object and arguments array; returns the result of calling `exec` with the
+ // first value in the arguments array. the context is ignored but is accepted for congruity
+ // with `Function.prototype.apply`
+ RegExp.prototype.apply = function (context, args) {
+ return this.exec(args[0]);
+ };
+
+ // Accepts a context object and string; returns the result of calling `exec` with the provided
+ // string. the context is ignored but is accepted for congruity with `Function.prototype.call`
+ RegExp.prototype.call = function (context, str) {
+ return this.exec(str);
+ };
+
+
+ //---------------------------------
+ // Overriden native methods
+ //---------------------------------
+
+ // Adds named capture support (with backreferences returned as `result.name`), and fixes two
+ // cross-browser issues per ES3:
+ // - Captured values for nonparticipating capturing groups should be returned as `undefined`,
+ // rather than the empty string.
+ // - `lastIndex` should not be incremented after zero-length matches.
+ RegExp.prototype.exec = function (str) {
+ var match, name, r2, origLastIndex;
+ if (!this.global)
+ origLastIndex = this.lastIndex;
+ match = nativ.exec.apply(this, arguments);
+ if (match) {
+ // Fix browsers whose `exec` methods don't consistently return `undefined` for
+ // nonparticipating capturing groups
+ if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) {
+ r2 = RegExp(this.source, nativ.replace.call(getNativeFlags(this), "g", ""));
+ // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed
+ // matching due to characters outside the match
+ nativ.replace.call((str + "").slice(match.index), r2, function () {
+ for (var i = 1; i < arguments.length - 2; i++) {
+ if (arguments[i] === undefined)
+ match[i] = undefined;
+ }
+ });
+ }
+ // Attach named capture properties
+ if (this._xregexp && this._xregexp.captureNames) {
+ for (var i = 1; i < match.length; i++) {
+ name = this._xregexp.captureNames[i - 1];
+ if (name)
+ match[name] = match[i];
+ }
+ }
+ // Fix browsers that increment `lastIndex` after zero-length matches
+ if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))
+ this.lastIndex--;
+ }
+ if (!this.global)
+ this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)
+ return match;
+ };
+
+ // Fix browser bugs in native method
+ RegExp.prototype.test = function (str) {
+ // Use the native `exec` to skip some processing overhead, even though the altered
+ // `exec` would take care of the `lastIndex` fixes
+ var match, origLastIndex;
+ if (!this.global)
+ origLastIndex = this.lastIndex;
+ match = nativ.exec.call(this, str);
+ // Fix browsers that increment `lastIndex` after zero-length matches
+ if (match && !compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))
+ this.lastIndex--;
+ if (!this.global)
+ this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)
+ return !!match;
+ };
+
+ // Adds named capture support and fixes browser bugs in native method
+ String.prototype.match = function (regex) {
+ if (!XRegExp.isRegExp(regex))
+ regex = RegExp(regex); // Native `RegExp`
+ if (regex.global) {
+ var result = nativ.match.apply(this, arguments);
+ regex.lastIndex = 0; // Fix IE bug
+ return result;
+ }
+ return regex.exec(this); // Run the altered `exec`
+ };
+
+ // Adds support for `${n}` tokens for named and numbered backreferences in replacement text,
+ // and provides named backreferences to replacement functions as `arguments[0].name`. Also
+ // fixes cross-browser differences in replacement text syntax when performing a replacement
+ // using a nonregex search value, and the value of replacement regexes' `lastIndex` property
+ // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary
+ // third (`flags`) parameter
+ String.prototype.replace = function (search, replacement) {
+ var isRegex = XRegExp.isRegExp(search),
+ captureNames, result, str, origLastIndex;
+
+ // There are too many combinations of search/replacement types/values and browser bugs that
+ // preclude passing to native `replace`, so don't try
+ //if (...)
+ // return nativ.replace.apply(this, arguments);
+
+ if (isRegex) {
+ if (search._xregexp)
+ captureNames = search._xregexp.captureNames; // Array or `null`
+ if (!search.global)
+ origLastIndex = search.lastIndex;
+ } else {
+ search = search + ""; // Type conversion
+ }
+
+ if (Object.prototype.toString.call(replacement) === "[object Function]") {
+ result = nativ.replace.call(this + "", search, function () {
+ if (captureNames) {
+ // Change the `arguments[0]` string primitive to a String object which can store properties
+ arguments[0] = new String(arguments[0]);
+ // Store named backreferences on `arguments[0]`
+ for (var i = 0; i < captureNames.length; i++) {
+ if (captureNames[i])
+ arguments[0][captureNames[i]] = arguments[i + 1];
+ }
+ }
+ // Update `lastIndex` before calling `replacement` (fix browsers)
+ if (isRegex && search.global)
+ search.lastIndex = arguments[arguments.length - 2] + arguments[0].length;
+ return replacement.apply(null, arguments);
+ });
+ } else {
+ str = this + ""; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`)
+ result = nativ.replace.call(str, search, function () {
+ var args = arguments; // Keep this function's `arguments` available through closure
+ return nativ.replace.call(replacement + "", replacementToken, function ($0, $1, $2) {
+ // Numbered backreference (without delimiters) or special variable
+ if ($1) {
+ switch ($1) {
+ case "$": return "$";
+ case "&": return args[0];
+ case "`": return args[args.length - 1].slice(0, args[args.length - 2]);
+ case "'": return args[args.length - 1].slice(args[args.length - 2] + args[0].length);
+ // Numbered backreference
+ default:
+ // What does "$10" mean?
+ // - Backreference 10, if 10 or more capturing groups exist
+ // - Backreference 1 followed by "0", if 1-9 capturing groups exist
+ // - Otherwise, it's the string "$10"
+ // Also note:
+ // - Backreferences cannot be more than two digits (enforced by `replacementToken`)
+ // - "$01" is equivalent to "$1" if a capturing group exists, otherwise it's the string "$01"
+ // - There is no "$0" token ("$&" is the entire match)
+ var literalNumbers = "";
+ $1 = +$1; // Type conversion; drop leading zero
+ if (!$1) // `$1` was "0" or "00"
+ return $0;
+ while ($1 > args.length - 3) {
+ literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers;
+ $1 = Math.floor($1 / 10); // Drop the last digit
+ }
+ return ($1 ? args[$1] || "" : "$") + literalNumbers;
+ }
+ // Named backreference or delimited numbered backreference
+ } else {
+ // What does "${n}" mean?
+ // - Backreference to numbered capture n. Two differences from "$n":
+ // - n can be more than two digits
+ // - Backreference 0 is allowed, and is the entire match
+ // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture
+ // - Otherwise, it's the string "${n}"
+ var n = +$2; // Type conversion; drop leading zeros
+ if (n <= args.length - 3)
+ return args[n];
+ n = captureNames ? indexOf(captureNames, $2) : -1;
+ return n > -1 ? args[n + 1] : $0;
+ }
+ });
+ });
+ }
+
+ if (isRegex) {
+ if (search.global)
+ search.lastIndex = 0; // Fix IE, Safari bug (last tested IE 9.0.5, Safari 5.1.2 on Windows)
+ else
+ search.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)
+ }
+
+ return result;
+ };
+
+ // A consistent cross-browser, ES3 compliant `split`
+ String.prototype.split = function (s /* separator */, limit) {
+ // If separator `s` is not a regex, use the native `split`
+ if (!XRegExp.isRegExp(s))
+ return nativ.split.apply(this, arguments);
+
+ var str = this + "", // Type conversion
+ output = [],
+ lastLastIndex = 0,
+ match, lastLength;
+
+ // Behavior for `limit`: if it's...
+ // - `undefined`: No limit
+ // - `NaN` or zero: Return an empty array
+ // - A positive number: Use `Math.floor(limit)`
+ // - A negative number: No limit
+ // - Other: Type-convert, then use the above rules
+ if (limit === undefined || +limit < 0) {
+ limit = Infinity;
+ } else {
+ limit = Math.floor(+limit);
+ if (!limit)
+ return [];
+ }
+
+ // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero
+ // and restore it to its original value when we're done using the regex
+ s = XRegExp.copyAsGlobal(s);
+
+ while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.)
+ if (s.lastIndex > lastLastIndex) {
+ output.push(str.slice(lastLastIndex, match.index));
+
+ if (match.length > 1 && match.index < str.length)
+ Array.prototype.push.apply(output, match.slice(1));
+
+ lastLength = match[0].length;
+ lastLastIndex = s.lastIndex;
+
+ if (output.length >= limit)
+ break;
+ }
+
+ if (s.lastIndex === match.index)
+ s.lastIndex++;
+ }
+
+ if (lastLastIndex === str.length) {
+ if (!nativ.test.call(s, "") || lastLength)
+ output.push("");
+ } else {
+ output.push(str.slice(lastLastIndex));
+ }
+
+ return output.length > limit ? output.slice(0, limit) : output;
+ };
+
+
+ //---------------------------------
+ // Private helper functions
+ //---------------------------------
+
+ // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp`
+ // instance with a fresh `lastIndex` (set to zero), preserving properties required for named
+ // capture. Also allows adding new flags in the process of copying the regex
+ function clone (regex, additionalFlags) {
+ if (!XRegExp.isRegExp(regex))
+ throw TypeError("type RegExp expected");
+ var x = regex._xregexp;
+ regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || ""));
+ if (x) {
+ regex._xregexp = {
+ source: x.source,
+ captureNames: x.captureNames ? x.captureNames.slice(0) : null
+ };
+ }
+ return regex;
+ }
+
+ function getNativeFlags (regex) {
+ return (regex.global ? "g" : "") +
+ (regex.ignoreCase ? "i" : "") +
+ (regex.multiline ? "m" : "") +
+ (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3
+ (regex.sticky ? "y" : "");
+ }
+
+ function runTokens (pattern, index, scope, context) {
+ var i = tokens.length,
+ result, match, t;
+ // Protect against constructing XRegExps within token handler and trigger functions
+ isInsideConstructor = true;
+ // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws
+ try {
+ while (i--) { // Run in reverse order
+ t = tokens[i];
+ if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) {
+ t.pattern.lastIndex = index;
+ match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc.
+ if (match && match.index === index) {
+ result = {
+ output: t.handler.call(context, match, scope),
+ match: match
+ };
+ break;
+ }
+ }
+ }
+ } catch (err) {
+ throw err;
+ } finally {
+ isInsideConstructor = false;
+ }
+ return result;
+ }
+
+ function indexOf (array, item, from) {
+ if (Array.prototype.indexOf) // Use the native array method if available
+ return array.indexOf(item, from);
+ for (var i = from || 0; i < array.length; i++) {
+ if (array[i] === item)
+ return i;
+ }
+ return -1;
+ }
+
+
+ //---------------------------------
+ // Built-in tokens
+ //---------------------------------
+
+ // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the
+ // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS`
+
+ // Comment pattern: (?# )
+ XRegExp.addToken(
+ /\(\?#[^)]*\)/,
+ function (match) {
+ // Keep tokens separated unless the following token is a quantifier
+ return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)";
+ }
+ );
+
+ // Capturing group (match the opening parenthesis only).
+ // Required for support of named capturing groups
+ XRegExp.addToken(
+ /\((?!\?)/,
+ function () {
+ this.captureNames.push(null);
+ return "(";
+ }
+ );
+
+ // Named capturing group (match the opening delimiter only): (?
+ XRegExp.addToken(
+ /\(\?<([$\w]+)>/,
+ function (match) {
+ this.captureNames.push(match[1]);
+ this.hasNamedCapture = true;
+ return "(";
+ }
+ );
+
+ // Named backreference: \k
+ XRegExp.addToken(
+ /\\k<([\w$]+)>/,
+ function (match) {
+ var index = indexOf(this.captureNames, match[1]);
+ // Keep backreferences separate from subsequent literal numbers. Preserve back-
+ // references to named groups that are undefined at this point as literal strings
+ return index > -1 ?
+ "\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? "" : "(?:)") :
+ match[0];
+ }
+ );
+
+ // Empty character class: [] or [^]
+ XRegExp.addToken(
+ /\[\^?]/,
+ function (match) {
+ // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S].
+ // (?!) should work like \b\B, but is unreliable in Firefox
+ return match[0] === "[]" ? "\\b\\B" : "[\\s\\S]";
+ }
+ );
+
+ // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx)
+ // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc.
+ XRegExp.addToken(
+ /^\(\?([imsx]+)\)/,
+ function (match) {
+ this.setFlag(match[1]);
+ return "";
+ }
+ );
+
+ // Whitespace and comments, in free-spacing (aka extended) mode only
+ XRegExp.addToken(
+ /(?:\s+|#.*)+/,
+ function (match) {
+ // Keep tokens separated unless the following token is a quantifier
+ return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)";
+ },
+ XRegExp.OUTSIDE_CLASS,
+ function () {return this.hasFlag("x");}
+ );
+
+ // Dot, in dotall (aka singleline) mode only
+ XRegExp.addToken(
+ /\./,
+ function () {return "[\\s\\S]";},
+ XRegExp.OUTSIDE_CLASS,
+ function () {return this.hasFlag("s");}
+ );
+
+
+ //---------------------------------
+ // Backward compatibility
+ //---------------------------------
+
+ // Uncomment the following block for compatibility with XRegExp 1.0-1.2:
+ /*
+ XRegExp.matchWithinChain = XRegExp.matchChain;
+ RegExp.prototype.addFlags = function (s) {return clone(this, s);};
+ RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;};
+ RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);};
+ RegExp.prototype.validate = function (s) {var r = RegExp("^(?:" + this.source + ")$(?!\\s)", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;};
+ */
+
+})();
+
+//
+// Begin anonymous function. This is used to contain local scope variables without polutting global scope.
+//
+if (typeof(SyntaxHighlighter) == 'undefined') var SyntaxHighlighter = function() {
+
+// CommonJS
+ if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined')
+ {
+ XRegExp = require('XRegExp').XRegExp;
+ }
+
+// Shortcut object which will be assigned to the SyntaxHighlighter variable.
+// This is a shorthand for local reference in order to avoid long namespace
+// references to SyntaxHighlighter.whatever...
+ var sh = {
+ defaults : {
+ /** Additional CSS class names to be added to highlighter elements. */
+ 'class-name' : '',
+
+ /** First line number. */
+ 'first-line' : 1,
+
+ /**
+ * Pads line numbers. Possible values are:
+ *
+ * false - don't pad line numbers.
+ * true - automaticaly pad numbers with minimum required number of leading zeroes.
+ * [int] - length up to which pad line numbers.
+ */
+ 'pad-line-numbers' : false,
+
+ /** Lines to highlight. */
+ 'highlight' : false,
+
+ /** Title to be displayed above the code block. */
+ 'title' : null,
+
+ /** Enables or disables smart tabs. */
+ 'smart-tabs' : true,
+
+ /** Gets or sets tab size. */
+ 'tab-size' : 4,
+
+ /** Enables or disables gutter. */
+ 'gutter' : true,
+
+ /** Enables or disables toolbar. */
+ 'toolbar' : true,
+
+ /** Enables quick code copy and paste from double click. */
+ 'quick-code' : true,
+
+ /** Forces code view to be collapsed. */
+ 'collapse' : false,
+
+ /** Enables or disables automatic links. */
+ 'auto-links' : false,
+
+ /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */
+ 'light' : false,
+
+ 'unindent' : true,
+
+ 'html-script' : false
+ },
+
+ config : {
+ space : ' ',
+
+ /** Enables use of tags. */
+ useScriptTags : true,
+
+ /** Blogger mode flag. */
+ bloggerMode : false,
+
+ stripBrs : false,
+
+ /** Name of the tag that SyntaxHighlighter will automatically look for. */
+ tagName : 'pre',
+
+ strings : {
+ expandSource : 'expand source',
+ help : '?',
+ alert: 'SyntaxHighlighter\n\n',
+ noBrush : 'Can\'t find brush for: ',
+ brushNotHtmlScript : 'Brush wasn\'t configured for html-script option: ',
+
+ // this is populated by the build script
+ aboutDialog : '@ABOUT@'
+ }
+ },
+
+ /** Internal 'global' variables. */
+ vars : {
+ discoveredBrushes : null,
+ highlighters : {}
+ },
+
+ /** This object is populated by user included external brush files. */
+ brushes : {},
+
+ /** Common regular expressions. */
+ regexLib : {
+ multiLineCComments : /\/\*[\s\S]*?\*\//gm,
+ singleLineCComments : /\/\/.*$/gm,
+ singleLinePerlComments : /#.*$/gm,
+ doubleQuotedString : /"([^\\"\n]|\\.)*"/g,
+ singleQuotedString : /'([^\\'\n]|\\.)*'/g,
+ multiLineDoubleQuotedString : new XRegExp('"([^\\\\"]|\\\\.)*"', 'gs'),
+ multiLineSingleQuotedString : new XRegExp("'([^\\\\']|\\\\.)*'", 'gs'),
+ xmlComments : /(<|<)!--[\s\S]*?--(>|>)/gm,
+ url : /\w+:\/\/[\w-.\/?%&=:@;#]*/g,
+
+ /** = ?> tags. */
+ phpScriptTags : { left: /(<|<)\?(?:=|php)?/g, right: /\?(>|>)/g, 'eof' : true },
+
+ /** <%= %> tags. */
+ aspScriptTags : { left: /(<|<)%=?/g, right: /%(>|>)/g },
+
+ /**
+ *
+ *
+ *
+ *
+ * xxx
+ *
+ *
+ *
+ * xxx
+ *
+ * xxx
+ *
+ *
+ *
+ *
+ *
+ * xxx
+ *
+ *
+ *
+ * xx[x xx]x
+ *
+ *
+ *
+ *
+ * xx[x xx]x
+ *
+ *
+ *
+ *
+ * xx[x xx]x
+ *
+ *
+ *
+ *
+ *
+ * xxxxxxxxx[x xx]x xxxxxxx
+ *
+ *
+ *
+ *
+ *
+ *
+ * xxxxxxxx[x]x xxx xxxxxxx
+ *
+ *
+ *
+ *