diff --git a/build/css/custom.css b/build/css/custom.css deleted file mode 100644 index 5fc627d8b6ad0c11bd7e85355c7ede2f6bb51a49..0000000000000000000000000000000000000000 --- a/build/css/custom.css +++ /dev/null @@ -1,3979 +0,0 @@ -.daterangepicker .ranges li { - color: #73879C; } - .daterangepicker .ranges li.active, .daterangepicker .ranges li:hover { - background: #536A7F; - border: 1px solid #536A7F; - color: #fff; } -.daterangepicker .input-mini { - background-color: #eee; - border: 1px solid #ccc; - box-shadow: none !important; } - .daterangepicker .input-mini.active { - border: 1px solid #ccc; } -.daterangepicker select.monthselect, .daterangepicker select.yearselect, .daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect { - font-size: 12px; - padding: 1px; - height: auto; - margin: 0; - cursor: default; - height: 30px; - border: 1px solid #ADB2B5; - line-height: 30px; - border-radius: 0px !important; } -.daterangepicker select.monthselect { - margin-right: 2%; } -.daterangepicker td.in-range { - background: #E4E7EA; - color: #73879C; } -.daterangepicker td.active, .daterangepicker td.active:hover { - background-color: #536A7F; - color: #fff; } -.daterangepicker th.available:hover { - background: #eee; - color: #34495E; } -.daterangepicker:before, .daterangepicker:after { - content: none; } -.daterangepicker .calendar.single { - margin: 0 0 4px 0; } - .daterangepicker .calendar.single .calendar-table { - width: 224px; - padding: 0 0 4px 0 !important; } - .daterangepicker .calendar.single .calendar-table thead tr:first-child th { - padding: 8px 5px; } - .daterangepicker .calendar.single .calendar-table thead th { - border-radius: 0; } -.daterangepicker.picker_1 { - color: #fff; - background: #34495E; } - .daterangepicker.picker_1 .calendar-table { - background: #34495E; } - .daterangepicker.picker_1 .calendar-table thead tr { - background: #213345; } - .daterangepicker.picker_1 .calendar-table thead tr:first-child { - background: #1ABB9C; } - .daterangepicker.picker_1 .calendar-table td.off { - background: #34495E; - color: #999; } - .daterangepicker.picker_1 .calendar-table td.available:hover { - color: #34495E; } -.daterangepicker.picker_2 .calendar-table thead tr { - color: #1ABB9C; } -.daterangepicker.picker_2 .calendar-table thead tr:first-child { - color: #73879C; } -.daterangepicker.picker_3 .calendar-table thead tr:first-child { - color: #fff; - background: #1ABB9C; } -.daterangepicker.picker_4 .calendar-table thead tr:first-child { - color: #fff; - background: #34495E; } -.daterangepicker.picker_4 .calendar-table td, .daterangepicker.picker_4 .calendar-table td.off { - background: #ECF0F1; - border: 1px solid #fff; - border-radius: 0; } -.daterangepicker.picker_4 .calendar-table td.active { - background: #34495E; } - -.calendar-exibit .show-calendar { - float: none; - display: block; - position: relative; - background-color: #fff; - border: 1px solid #ccc; - margin-bottom: 20px; - border: 1px solid rgba(0, 0, 0, 0.15); - overflow: hidden; } - .calendar-exibit .show-calendar .calendar { - margin: 0 0 4px 0; } - .calendar-exibit .show-calendar.picker_1 { - background: #34495E; } -.calendar-exibit .calendar-table { - padding: 0 0 4px 0; } - -@charset "UTF-8"; -.left_col { - background: #2A3F54; } - -.nav-sm .container.body .col-md-3.left_col { - min-height: 100%; - width: 70px; - padding: 0; - z-index: 9999; - position: absolute; } - -.nav-sm .container.body .col-md-3.left_col.menu_fixed { - position: fixed; - height: 100%; } - -.nav-sm .container.body .col-md-3.left_col .mCSB_container, -.nav-sm .container.body .col-md-3.left_col .mCustomScrollBox { - overflow: visible; } - -.nav-sm .hidden-small { - visibility: hidden; } - -.nav-sm .container.body .right_col { - padding: 10px 20px; - margin-left: 70px; - z-index: 2; } - -.nav-sm .navbar.nav_title { - width: 70px; } - -.nav-sm .navbar.nav_title a span { - display: none; } - -.nav-sm .navbar.nav_title a i { - font-size: 27px; - margin: 13px 0 0 3px; } - -.site_title i { - border: 1px solid #EAEAEA; - padding: 5px 6px; - border-radius: 50%; } - -.nav-sm .main_container .top_nav { - display: block; - margin-left: 70px; - z-index: 2; } - -.nav-sm .nav.side-menu li a { - text-align: center !important; - font-weight: 400; - font-size: 10px; - padding: 10px 5px; } - -.nav-sm .nav.child_menu li.active, -.nav-sm .nav.side-menu li.active-sm { - border-right: 5px solid #1ABB9C; } - -.nav-sm ul.nav.child_menu ul, -.nav-sm .nav.side-menu li.active-sm ul ul { - position: static; - width: 200px; - background: none; } - -.nav-sm > .nav.side-menu > li.active-sm > a { - color: #1ABB9C !important; } - -.nav-sm .nav.side-menu li a i.toggle-up { - display: none !important; } - -.nav-sm .nav.side-menu li a i { - font-size: 25px !important; - text-align: center; - width: 100% !important; - margin-bottom: 5px; } - -.nav-sm ul.nav.child_menu { - left: 100%; - position: absolute; - top: 0; - width: 210px; - z-index: 4000; - background: #3E5367; - display: none; } - -.nav-sm ul.nav.child_menu li { - padding: 0 10px; } - -.nav-sm ul.nav.child_menu li a { - text-align: left !important; } - -.nav-sm .profile { - display: none; } - -.menu_section { - margin-bottom: 35px; } - -.menu_section h3 { - padding-left: 23px; - color: #fff; - text-transform: uppercase; - letter-spacing: .5px; - font-weight: bold; - font-size: 11px; - margin-bottom: 0; - margin-top: 0; - text-shadow: 1px 1px #000; } - -.menu_section > ul { - margin-top: 10px; } - -.profile_pic { - width: 35%; - float: left; } - -.img-circle.profile_img { - width: 70%; - background: #fff; - margin-left: 15%; - z-index: 1000; - position: inherit; - margin-top: 20px; - border: 1px solid rgba(52, 73, 94, 0.44); - padding: 4px; } - -.profile_info { - padding: 25px 10px 10px; - width: 65%; - float: left; } - -.profile_info span { - font-size: 13px; - line-height: 30px; - color: #BAB8B8; } - -.profile_info h2 { - font-size: 14px; - color: #ECF0F1; - margin: 0; - font-weight: 300; } - -.profile.img_2 { - text-align: center; } - -.profile.img_2 .profile_pic { - width: 100%; } - -.profile.img_2 .profile_pic .img-circle.profile_img { - width: 50%; - margin: 10px 0 0; } - -.profile.img_2 .profile_info { - padding: 15px 10px 0; - width: 100%; - margin-bottom: 10px; - float: left; } - -.main_menu span.fa { - float: right; - text-align: center; - margin-top: 5px; - font-size: 10px; - min-width: inherit; - color: #C4CFDA; } - -.active a span.fa { - text-align: right !important; - margin-right: 4px; } - -.nav-sm .menu_section { - margin: 0; } - -.nav-sm span.fa, -.nav-sm .menu_section h3 { - display: none; } - -.nav-sm li li span.fa { - display: inline-block; } - -.nav_menu { - float: left; - background: #EDEDED; - border-bottom: 1px solid #D9DEE4; - margin-bottom: 10px; - width: 100%; - position: relative; } - -@media (min-width: 480px) { - .nav_menu { - position: static; } } -.nav-md .container.body .col-md-3.left_col { - min-height: 100%; - width: 230px; - padding: 0; - position: absolute; - display: -ms-flexbox; - display: flex; - z-index: 1; } - -.nav-md .container.body .col-md-3.left_col.menu_fixed { - height: 100%; - position: fixed; } - -body .container.body .right_col { - background: #F7F7F7; } - -.nav-md .container.body .right_col { - padding: 10px 20px 0; - margin-left: 230px; } - -.nav_title { - width: 230px; - float: left; - background: #2A3F54; - border-radius: 0; - height: 57px; } - -@media (max-width: 991px) { - .nav-md .container.body .right_col, .nav-md .container.body .top_nav { - width: 100%; - margin: 0; } - - .nav-md .container.body .col-md-3.left_col { - display: none; } - - .nav-md .container.body .right_col { - width: 100%; - padding-right: 0; } - - .right_col { - padding: 10px !important; } } -@media (max-width: 1200px) { - .x_title h2 { - width: 62%; - font-size: 17px; } - - .tile, .graph { - zoom: 85%; - height: inherit; } } -@media (max-width: 1270px) and (min-width: 192px) { - .x_title h2 small { - display: none; } } -.left_col .mCSB_scrollTools { - width: 6px; } - -.left_col .mCSB_dragger { - max-height: 400px !important; } - -/** ------------------------------------------ **/ -.blue { - color: #3498DB; } - -.purple { - color: #9B59B6; } - -.green { - color: #1ABB9C; } - -.aero { - color: #9CC2CB; } - -.red { - color: #E74C3C; } - -.dark { - color: #34495E; } - -.border-blue { - border-color: #3498DB !important; } - -.border-purple { - border-color: #9B59B6 !important; } - -.border-green { - border-color: #1ABB9C !important; } - -.border-aero { - border-color: #9CC2CB !important; } - -.border-red { - border-color: #E74C3C !important; } - -.border-dark { - border-color: #34495E !important; } - -.bg-white { - background: #fff !important; - border: 1px solid #fff !important; - color: #73879C; } - -.bg-green { - background: #1ABB9C !important; - border: 1px solid #1ABB9C !important; - color: #fff; } - -.bg-red { - background: #E74C3C !important; - border: 1px solid #E74C3C !important; - color: #fff; } - -.bg-blue { - background: #3498DB !important; - border: 1px solid #3498DB !important; - color: #fff; } - -.bg-orange { - background: #F39C12 !important; - border: 1px solid #F39C12 !important; - color: #fff; } - -.bg-purple { - background: #9B59B6 !important; - border: 1px solid #9B59B6 !important; - color: #fff; } - -.bg-blue-sky { - background: #50C1CF !important; - border: 1px solid #50C1CF !important; - color: #fff; } - -.container { - width: 100%; - padding: 0; } - -.navbar-nav > li > a, .navbar-brand, .navbar-nav > li > a { - color: #fff !important; } - -.top_nav .nav > li > a:focus, .top_nav .nav > li > a:hover, .top_nav .nav .open > a, .top_nav .nav .open > a:focus, .top_nav .nav .open > a:hover { - background: #D9DEE4; } - -body { - color: #73879C; - background: #2A3F54; - font-family: "Helvetica Neue", Roboto, Arial, "Droid Sans", sans-serif; - font-size: 13px; - font-weight: 400; - line-height: 1.471; } - -.main_container .top_nav { - display: block; - margin-left: 230px; } - -.no-padding { - padding: 0 !important; } - -.page-title { - width: 100%; - height: 65px; - padding: 10px 0; } - -.page-title .title_left { - width: 45%; - float: left; - display: block; } - -.page-title .title_left h3 { - margin: 9px 0; } - -.page-title .title_right { - width: 55%; - float: left; - display: block; } - -.page-title .title_right .pull-right { - margin: 10px 0; } - -.fixed_height_320 { - height: 320px; } - -.fixed_height_390 { - height: 390px; } - -.fixed_height_200 { - height: 200px; } - -.overflow_hidden { - overflow: hidden; } - -.progress-bar-dark { - background-color: #34495E !important; } - -.progress-bar-gray { - background-color: #BDC3C7 !important; } - -table.no-margin .progress { - margin-bottom: 0; } - -.main_content { - padding: 10px 20px; } - -.col-md-55 { - width: 50%; - margin-bottom: 10px; } - -@media (min-width: 768px) { - .col-md-55 { - width: 20%; } } -@media (min-width: 992px) { - .col-md-55 { - width: 20%; } } -@media (min-width: 1200px) { - .col-md-55 { - width: 20%; } } -@media (min-width: 192px) and (max-width: 1270px) { - table.tile_info span.right { - margin-right: 7px; - float: left; } } -.center-margin { - margin: 0 auto; - float: none !important; } - -.col-md-55, .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - float: left; - padding-right: 10px; - padding-left: 10px; } - -.row { - margin-right: -10px; - margin-left: -10px; } - -.grid_slider .col-md-6 { - padding: 0 40px; } - -h1, .h1, h2, .h2, h3, .h3 { - margin-top: 10px; - margin-bottom: 10px; } - -a { - color: #5A738E; - text-decoration: none; } - -a, a:visited, a:focus, a:active, :visited, :focus, :active, .btn:focus, .btn:active:focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn.active.focus { - outline: 0; } - -a:hover, a:focus { - text-decoration: none; } - -.navbar { - margin-bottom: 0; } - -.navbar-header { - background: #34495E; } - -.navbar-right { - margin-right: 0; } - -.top_nav .navbar-right { - margin: 0; - width: 70%; - float: right; } - -.top_nav .navbar-right li { - display: inline-block; - float: right; - position: static; } - -@media (min-width: 480px) { - .top_nav .navbar-right li { - position: relative; } } -.top_nav .dropdown-menu li { - width: 100%; } - -.top_nav .dropdown-menu li a { - width: 100%; - padding: 12px 20px; } - -.top_nav li a i { - font-size: 15px; } - -.navbar-static-top { - position: fixed; - top: 0; - width: 100%; } - -.sidebar-header { - border-bottom: 0; - margin-top: 46px; } - -.sidebar-header:first-of-type { - margin-top: 0; } - -.nav.side-menu > li { - position: relative; - display: block; - cursor: pointer; } - -.nav.side-menu > li > a { - margin-bottom: 6px; } - -.nav.side-menu > li > a:hover { - color: #F2F5F7 !important; } - -.nav.side-menu > li > a:hover, .nav > li > a:focus { - text-decoration: none; - background: transparent; } - -.nav.child_menu { - display: none; } - -.nav.child_menu li:hover, -.nav.child_menu li.active { - background-color: rgba(255, 255, 255, 0.06); } - -.nav.child_menu li { - padding-left: 36px; } - -.nav-md ul.nav.child_menu li:before { - background: #425668; - bottom: auto; - content: ""; - height: 8px; - left: 23px; - margin-top: 15px; - position: absolute; - right: auto; - width: 8px; - z-index: 1; - border-radius: 50%; } - -.nav-md ul.nav.child_menu li:after { - border-left: 1px solid #425668; - bottom: 0; - content: ""; - left: 27px; - position: absolute; - top: 0; } - -.nav.side-menu > li > a, .nav.child_menu > li > a { - color: #E7E7E7; - font-weight: 500; } - -.nav.child_menu li li:hover, -.nav.child_menu li li.active { - background: none; } - -.nav.child_menu li li a:hover, -.nav.child_menu li li a.active { - color: #fff; } - -.nav > li > a { - position: relative; - display: block; - padding: 13px 15px 12px; } - -.nav.side-menu > li.current-page, .nav.side-menu > li.active { - border-right: 5px solid #1ABB9C; } - -.nav li.current-page { - background: rgba(255, 255, 255, 0.05); } - -.nav li li li.current-page { - background: none; } - -.nav li li.current-page a { - color: #fff; } - -.nav.side-menu > li.active > a { - text-shadow: rgba(0, 0, 0, 0.25) 0 -1px 0; - background: linear-gradient(#334556, #2C4257), #2A3F54; - box-shadow: rgba(0, 0, 0, 0.25) 0 1px 0, inset rgba(255, 255, 255, 0.16) 0 1px 0; } - -.navbar-brand, .navbar-nav > li > a { - font-weight: 500; - color: #ECF0F1 !important; - margin-left: 0 !important; - line-height: 32px; } - -.site_title { - text-overflow: ellipsis; - overflow: hidden; - font-weight: 400; - font-size: 22px; - width: 100%; - color: #ECF0F1 !important; - margin-left: 0 !important; - line-height: 59px; - display: block; - height: 55px; - margin: 0; - padding-left: 10px; } - -.site_title:hover, .site_title:focus { - text-decoration: none; } - -.nav.navbar-nav > li > a { - color: #515356 !important; } - -.nav.top_menu > li > a { - position: relative; - display: block; - padding: 10px 15px; - color: #34495E !important; } - -.nav > li > a:hover, .nav > li > a:focus { - background-color: transparent; } - -.top_search { - padding: 0; } - -.top_search .form-control { - border-right: 0; - box-shadow: inset 0 1px 0px rgba(0, 0, 0, 0.075); - border-radius: 25px 0px 0px 25px; - padding-left: 20px; - border: 1px solid rgba(221, 226, 232, 0.49); } - -.top_search .form-control:focus { - border: 1px solid rgba(221, 226, 232, 0.49); - border-right: 0; } - -.top_search .input-group-btn button { - border-radius: 0px 25px 25px 0px; - border: 1px solid rgba(221, 226, 232, 0.49); - border-left: 0; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - color: #93A2B2; - margin-bottom: 0 !important; } - -.toggle { - float: left; - margin: 0; - padding-top: 16px; - width: 70px; } - -.toggle a { - padding: 15px 15px 0; - margin: 0; - cursor: pointer; } - -.toggle a i { - font-size: 26px; } - -.nav.child_menu > li > a { - color: rgba(255, 255, 255, 0.75); - font-size: 12px; - padding: 9px; } - -.panel_toolbox { - float: right; - min-width: 70px; } - -.panel_toolbox > li { - float: left; - cursor: pointer; } - -.panel_toolbox > li > a { - padding: 5px; - color: #C5C7CB; - font-size: 14px; } - -.panel_toolbox > li > a:hover { - background: #F5F7FA; } - -.line_30 { - line-height: 30px; } - -.main_menu_side { - padding: 0; } - -.bs-docs-sidebar .nav > li > a { - display: block; - padding: 4px 6px; } - -footer { - background: #fff; - padding: 15px 20px; - display: block; } - -.nav-sm footer { - margin-left: 70px; } - -.footer_fixed footer { - position: fixed; - left: 0px; - bottom: 0px; - width: 100%; } - -@media (min-width: 768px) { - .footer_fixed footer { - margin-left: 0; } } -@media (min-width: 768px) { - .footer_fixed .nav-sm footer { - margin-left: 0; } } -.tile-stats.sparkline { - padding: 10px; - text-align: center; } - -.jqstooltip { - background: #34495E !important; - width: 30px !important; - height: 22px !important; - text-decoration: none; } - -.tooltip { - display: block !important; } - -.tiles { - border-top: 1px solid #ccc; - margin-top: 15px; - padding-top: 5px; - margin-bottom: 0; } - -.tile { - overflow: hidden; } - -.top_tiles { - margin-bottom: 0; } - -.top_tiles .tile h2 { - font-size: 30px; - line-height: 30px; - margin: 3px 0 7px; - font-weight: bold; } - -article.media { - width: 100%; } - -/* ********* custom accordion **************************** */ -*, *:before, *:after { - box-sizing: border-box; } - -#integration-list { - width: 100%; - margin: 0 auto; - display: table; } - -#integration-list ul { - padding: 0; - margin: 20px 0; - color: #555; } - -#integration-list ul > li { - list-style: none; - border-top: 1px solid #ddd; - display: block; - padding: 15px; - overflow: hidden; } - -#integration-list ul:last-child { - border-bottom: 1px solid #ddd; } - -#integration-list ul > li:hover { - background: #efefef; } - -.expand { - display: block; - text-decoration: none; - color: #555; - cursor: pointer; } - -.expand h2 { - width: 85%; - float: left; } - -h2 { - font-size: 18px; - font-weight: 400; } - -#left, #right { - display: table; } - -#sup { - display: table-cell; - vertical-align: middle; - width: 80%; } - -.detail a { - text-decoration: none; - color: #C0392B; - border: 1px solid #C0392B; - padding: 6px 10px 5px; - font-size: 13px; - margin-right: 7px; } - -.detail { - margin: 10px 0 10px 0px; - display: none; - line-height: 22px; - height: 150px; } - -.detail span { - margin: 0; } - -.right-arrow { - width: 10px; - float: right; - font-weight: bold; - font-size: 20px; } - -.accordion .panel { - margin-bottom: 5px; - border-radius: 0; - border-bottom: 1px solid #efefef; } - -.accordion .panel-heading { - background: #F2F5F7; - padding: 13px; - width: 100%; - display: block; } - -.accordion .panel:hover { - background: #F2F5F7; } - -.x_panel { - position: relative; - width: 100%; - margin-bottom: 10px; - padding: 10px 17px; - display: inline-block; - background: #fff; - border: 1px solid #E6E9ED; - -webkit-column-break-inside: avoid; - -moz-column-break-inside: avoid; - column-break-inside: avoid; - opacity: 1; - transition: all .2s ease; } - -.x_title { - border-bottom: 2px solid #E6E9ED; - padding: 1px 5px 6px; - margin-bottom: 10px; } - -.x_title .filter { - width: 40%; - float: right; } - -.x_title h2 { - margin: 5px 0 6px; - float: left; - display: block; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; } - -.x_title h2 small { - margin-left: 10px; } - -.x_title span { - color: #BDBDBD; } - -.x_content { - padding: 0 5px 6px; - position: relative; - width: 100%; - float: left; - clear: both; - margin-top: 5px; } - -.x_content h4 { - font-size: 16px; - font-weight: 500; } - -legend { - padding-bottom: 7px; } - -.demo-placeholder { - height: 280px; } - -/** Contacts **/ -.profile_details:nth-child(3n) { - clear: both; } - -.profile_details .profile_view { - display: inline-block; - padding: 10px 0 0; - background: #fff; } - -.profile_details .profile_view .divider { - border-top: 1px solid #e5e5e5; - padding-top: 5px; - margin-top: 5px; } - -.profile_details .profile_view .ratings { - margin-bottom: 0; } - -.profile_details .profile_view .bottom { - background: #F2F5F7; - padding: 9px 0; - border-top: 1px solid #E6E9ED; } - -.profile_details .profile_view .left { - margin-top: 20px; } - -.profile_details .profile_view .left p { - margin-bottom: 3px; } - -.profile_details .profile_view .right { - margin-top: 0px; - padding: 10px; } - -.profile_details .profile_view .img-circle { - border: 1px solid #E6E9ED; - padding: 2px; } - -.profile_details .profile_view h2 { - margin: 5px 0; } - -.profile_details .profile_view .ratings { - text-align: left; - font-size: 16px; } - -.profile_details .profile_view .brief { - margin: 0; - font-weight: 300; } - -.profile_details .profile_left { - background: white; } - -.pagination.pagination-split li { - display: inline-block; - margin-right: 3px; } - -.pagination.pagination-split li a { - border-radius: 4px; - color: #768399; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; } - -/** Contacts **/ -/* ********* /custom accordion **************************** */ -/* ********* dashboard widget **************************** */ -table.tile h3, table.tile h4, table.tile span { - font-weight: bold; - vertical-align: middle !important; } - -table.tile th, table.tile td { - text-align: center; } - -table.tile th { - border-bottom: 1px solid #E6ECEE; } - -table.tile td { - padding: 5px 0; } - -table.tile td ul { - text-align: left; - padding-left: 0; } - -table.tile td ul li { - list-style: none; - width: 100%; } - -table.tile td ul li a { - width: 100%; } - -table.tile td ul li a big { - right: 0; - float: right; - margin-right: 13px; } - -table.tile_info { - width: 100%; } - -table.tile_info td { - text-align: left; - padding: 1px; - font-size: 15px; } - -table.tile_info td p { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - margin: 0; - line-height: 28px; } - -table.tile_info td i { - margin-right: 8px; - font-size: 17px; - float: left; - width: 18px; - line-height: 28px; } - -table.tile_info td:first-child { - width: 83%; } - -td span { - line-height: 28px; } - -.sidebar-widget { - overflow: hidden; } - -.error-number { - font-size: 90px; - line-height: 90px; - margin: 20px 0; } - -.col-middle { - margin-top: 5%; } - -.mid_center { - width: 370px; - margin: 0 auto; - text-align: center; - padding: 10px 20px; } - -h3.degrees { - font-size: 22px; - font-weight: 400; - text-align: center; } - -.degrees:after { - content: "o"; - position: relative; - top: -12px; - font-size: 13px; - font-weight: 300; } - -.daily-weather .day { - font-size: 14px; - border-top: 2px solid rgba(115, 135, 156, 0.36); - text-align: center; - border-bottom: 2px solid rgba(115, 135, 156, 0.36); - padding: 5px 0; } - -.weather-days .col-sm-2 { - overflow: hidden; - width: 16.66666667%; } - -.weather .row { - margin-bottom: 0; } - -/* ********* tables styling ******************************* */ -.bulk-actions { - display: none; } - -table.countries_list { - width: 100%; } - -table.countries_list td { - padding: 0 10px; - line-height: 30px; - border-top: 1px solid #eeeeee; } - -.dataTables_paginate a { - padding: 6px 9px !important; - background: #ddd !important; - border-color: #ddd !important; } - -.paging_full_numbers a.paginate_active { - background-color: rgba(38, 185, 154, 0.59) !important; - border-color: rgba(38, 185, 154, 0.59) !important; } - -button.DTTT_button, div.DTTT_button, a.DTTT_button { - border: 1px solid #E7E7E7 !important; - background: #E7E7E7 !important; - box-shadow: none !important; } - -table.jambo_table { - border: 1px solid rgba(221, 221, 221, 0.78); } - -table.jambo_table thead { - background: rgba(52, 73, 94, 0.94); - color: #ECF0F1; } - -table.jambo_table tbody tr:hover td { - background: rgba(38, 185, 154, 0.07); - border-top: 1px solid rgba(38, 185, 154, 0.11); - border-bottom: 1px solid rgba(38, 185, 154, 0.11); } - -table.jambo_table tbody tr.selected { - background: rgba(38, 185, 154, 0.16); } - -table.jambo_table tbody tr.selected td { - border-top: 1px solid rgba(38, 185, 154, 0.4); - border-bottom: 1px solid rgba(38, 185, 154, 0.4); } - -.dataTables_paginate a { - background: #ff0000; } - -.dataTables_wrapper { - position: relative; - clear: both; - zoom: 1; } - -.dataTables_processing { - position: absolute; - top: 50%; - left: 50%; - width: 250px; - height: 30px; - margin-left: -125px; - margin-top: -15px; - padding: 14px 0 2px 0; - border: 1px solid #ddd; - text-align: center; - color: #999; - font-size: 14px; - background-color: white; } - -.dataTables_length { - width: 40%; - float: left; } - -.dataTables_filter { - width: 50%; - float: right; - text-align: right; } - -.dataTables_info { - width: 60%; - float: left; } - -.dataTables_paginate { - float: right; - text-align: right; } - -table.dataTable th.focus, -table.dataTable td.focus { - outline: 2px solid #1ABB9C !important; - outline-offset: -1px; } - -table.display { - margin: 0 auto; - clear: both; - width: 100%; } - -table.display thead th { - padding: 8px 18px 8px 10px; - border-bottom: 1px solid black; - font-weight: bold; - cursor: pointer; } - -table.display tfoot th { - padding: 3px 18px 3px 10px; - border-top: 1px solid black; - font-weight: bold; } - -table.display tr.heading2 td { - border-bottom: 1px solid #aaa; } - -table.display td { - padding: 3px 10px; } - -table.display td.center { - text-align: center; } - -table.display thead th:active, table.display thead td:active { - outline: none; } - -.dataTables_scroll { - clear: both; } - -.dataTables_scrollBody { - *margin-top: -1px; - -webkit-overflow-scrolling: touch; } - -.top .dataTables_info { - float: none; } - -.clear { - clear: both; } - -.dataTables_empty { - text-align: center; } - -tfoot input { - margin: 0.5em 0; - width: 100%; - color: #444; } - -tfoot input.search_init { - color: #999; } - -td.group { - background-color: #d1cfd0; - border-bottom: 2px solid #A19B9E; - border-top: 2px solid #A19B9E; } - -td.details { - background-color: #d1cfd0; - border: 2px solid #A19B9E; } - -.example_alt_pagination div.dataTables_info { - width: 40%; } - -.paging_full_numbers { - width: 400px; - height: 22px; - line-height: 22px; } - -.paging_full_numbers a:active { - outline: none; } - -.paging_full_numbers a:hover { - text-decoration: none; } - -.paging_full_numbers a.paginate_button, .paging_full_numbers a.paginate_active { - border: 1px solid #aaa; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - padding: 2px 5px; - margin: 0 3px; - cursor: pointer; } - -.paging_full_numbers a.paginate_button { - background-color: #ddd; } - -.paging_full_numbers a.paginate_button:hover { - background-color: #ccc; - text-decoration: none !important; } - -.paging_full_numbers a.paginate_active { - background-color: #99B3FF; } - -table.display tr.even.row_selected td { - background-color: #B0BED9; } - -table.display tr.odd.row_selected td { - background-color: #9FAFD1; } - -div.box { - height: 100px; - padding: 10px; - overflow: auto; - border: 1px solid #8080FF; - background-color: #E5E5FF; } - -/* ********* /tables styling ****************************** */ -/* ********* /dashboard widget **************************** */ -/* ********* widgets *************************************** */ -ul.msg_list li { - background: #f7f7f7; - padding: 5px; - display: -ms-flexbox; - display: flex; - margin: 6px 6px 0; - width: 96% !important; } - -ul.msg_list li:last-child { - margin-bottom: 6px; - padding: 10px; } - -ul.msg_list li a { - padding: 3px 5px !important; } - -ul.msg_list li a .image img { - border-radius: 2px 2px 2px 2px; - -webkit-border-radius: 2px 2px 2px 2px; - float: left; - margin-right: 10px; - width: 11%; } - -ul.msg_list li a .time { - font-size: 11px; - font-style: italic; - font-weight: bold; - position: absolute; - right: 35px; } - -ul.msg_list li a .message { - display: block !important; - font-size: 11px; } - -.dropdown-menu.msg_list span { - white-space: normal; } - -.dropdown-menu { - border: medium none; - box-shadow: none; - display: none; - float: left; - font-size: 12px; - left: 0; - list-style: none outside none; - padding: 0; - position: absolute; - text-shadow: none; - top: 100%; - z-index: 9998; - border: 1px solid #D9DEE4; - border-top-left-radius: 0; - border-top-right-radius: 0; } - -.dropdown-menu > li > a { - color: #5A738E; } - -.navbar-nav .open .dropdown-menu { - position: absolute; - background: #fff; - margin-top: 0; - border: 1px solid #D9DEE4; - -webkit-box-shadow: none; - right: 0; - left: auto; - width: 220px; } - -.navbar-nav .open .dropdown-menu.msg_list { - width: 300px; } - -.info-number .badge { - font-size: 10px; - font-weight: normal; - line-height: 13px; - padding: 2px 6px; - position: absolute; - right: 2px; - top: 8px; } - -ul.to_do { - padding: 0; } - -ul.to_do li { - background: #f3f3f3; - border-radius: 3px; - position: relative; - padding: 7px; - margin-bottom: 5px; - list-style: none; } - -ul.to_do p { - margin: 0; } - -.dashboard-widget { - background: #f6f6f6; - border-top: 5px solid #79C3DF; - border-radius: 3px; - padding: 5px 10px 10px; } - -.dashboard-widget .dashboard-widget-title { - font-weight: normal; - border-bottom: 1px solid #c1cdcd; - margin: 0 0 10px 0; - padding-bottom: 5px; - padding-left: 40px; - line-height: 30px; } - -.dashboard-widget .dashboard-widget-title i { - font-size: 100%; - margin-left: -35px; - margin-right: 10px; - color: #33a1c9; - padding: 3px 6px; - border: 1px solid #abd9ea; - border-radius: 5px; - background: #fff; } - -ul.quick-list { - width: 45%; - padding-left: 0; - display: inline-block; } - -ul.quick-list li { - padding-left: 10px; - list-style: none; - margin: 0; - padding-bottom: 6px; - padding-top: 4px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; } - -ul.quick-list li i { - padding-right: 10px; - color: #757679; } - -.dashboard-widget-content { - padding-top: 9px; } - -.dashboard-widget-content .sidebar-widget { - width: 50%; - display: inline-block; - vertical-align: top; - background: #fff; - border: 1px solid #abd9ea; - border-radius: 5px; - text-align: center; - float: right; - padding: 2px; - margin-top: 10px; } - -.widget_summary { - width: 100%; - display: -ms-inline-flexbox; - display: inline-flex; } - -.widget_summary .w_left { - float: left; - text-align: left; } - -.widget_summary .w_center { - float: left; } - -.widget_summary .w_right { - float: left; - text-align: right; } - -.widget_summary .w_right span { - font-size: 20px; } - -.w_20 { - width: 20%; } - -.w_25 { - width: 25%; } - -.w_55 { - width: 55%; } - -h5.graph_title { - text-align: left; - margin-left: 10px; } - -h5.graph_title i { - margin-right: 10px; - font-size: 17px; } - -span.right { - float: right; - font-size: 14px !important; } - -.tile_info a { - text-overflow: ellipsis; } - -.sidebar-footer { - bottom: 0px; - clear: both; - display: block; - padding: 5px 0 0 0; - position: fixed; - width: 230px; - background: #2A3F54; } - -.sidebar-footer a { - padding: 7px 0 3px; - text-align: center; - width: 25%; - font-size: 17px; - display: block; - float: left; - background: #172D44; } - -.sidebar-footer a:hover { - background: #425567; } - -/** top tiles */ -.tile_count { - margin-bottom: 20px; - margin-top: 20px; } - -.tile_count .tile_stats_count { - border-bottom: 1px solid #D9DEE4; - padding: 0 10px 0 20px; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - position: relative; } - -@media (min-width: 992px) { - footer { - margin-left: 230px; } } -@media (min-width: 992px) { - .tile_count .tile_stats_count { - margin-bottom: 10px; - border-bottom: 0; - padding-bottom: 10px; } } -.tile_count .tile_stats_count:before { - content: ""; - position: absolute; - left: 0; - height: 65px; - border-left: 2px solid #ADB2B5; - margin-top: 10px; } - -@media (min-width: 992px) { - .tile_count .tile_stats_count:first-child:before { - border-left: 0; } } -.tile_count .tile_stats_count .count { - font-size: 30px; - line-height: 47px; - font-weight: 600; } - -@media (min-width: 768px) { - .tile_count .tile_stats_count .count { - font-size: 40px; } } -@media (min-width: 992px) and (max-width: 1100px) { - .tile_count .tile_stats_count .count { - font-size: 30px; } } -.tile_count .tile_stats_count span { - font-size: 12px; } - -@media (min-width: 768px) { - .tile_count .tile_stats_count span { - font-size: 13px; } } -.tile_count .tile_stats_count .count_bottom i { - width: 12px; } - -/** /top tiles **/ -.dashboard_graph { - background: #fff; - padding: 7px 10px; } - -.dashboard_graph .col-md-9, .dashboard_graph .col-md-3 { - padding: 0; } - -a.user-profile { - color: #5E6974 !important; } - -.user-profile img { - width: 29px; - height: 29px; - border-radius: 50%; - margin-right: 10px; } - -ul.top_profiles { - height: 330px; - width: 100%; } - -ul.top_profiles li { - margin: 0; - padding: 3px 5px; } - -ul.top_profiles li:nth-child(odd) { - background-color: #eee; } - -.media .profile_thumb { - border: 1px solid; - width: 50px; - height: 50px; - margin: 5px 10px 5px 0; - border-radius: 50%; - padding: 9px 12px; } - -.media .profile_thumb i { - font-size: 30px; } - -.media .date { - background: #ccc; - width: 52px; - margin-right: 10px; - border-radius: 10px; - padding: 5px; } - -.media .date .month { - margin: 0; - text-align: center; - color: #fff; } - -.media .date .day { - text-align: center; - color: #fff; - font-size: 27px; - margin: 0; - line-height: 27px; - font-weight: bold; } - -.event .media-body a.title { - font-weight: bold; } - -.event .media-body p { - margin-bottom: 0; } - -h4.graph_title { - margin: 7px; - text-align: center; } - -/* ********* /widgets *************************************** */ -/* ********* iconts-display **************************** */ -.fontawesome-icon-list .fa-hover a:hover { - background-color: #ddd; - color: #fff; - text-decoration: none; } - -.fontawesome-icon-list .fa-hover a { - display: block; - line-height: 32px; - height: 32px; - padding-left: 10px; - border-radius: 4px; } - -.fontawesome-icon-list .fa-hover a:hover .fa { - font-size: 28px; - vertical-align: -6px; } - -.fontawesome-icon-list .fa-hover a .fa { - width: 32px; - font-size: 16px; - display: inline-block; - text-align: right; - margin-right: 10px; } - -.main_menu .fa { - width: 26px; - opacity: .99; - display: inline-block; - font-family: FontAwesome; - font-style: normal; - font-weight: normal; - font-size: 18px; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; } - -/* ********* /iconts-display **************************** */ -/** tile stats **/ -.tile-stats { - position: relative; - display: block; - margin-bottom: 12px; - border: 1px solid #E4E4E4; - -webkit-border-radius: 5px; - overflow: hidden; - padding-bottom: 5px; - -webkit-background-clip: padding-box; - -moz-border-radius: 5px; - -moz-background-clip: padding; - border-radius: 5px; - background-clip: padding-box; - background: #FFF; - transition: all 300ms ease-in-out; } - -.tile-stats:hover .icon i { - animation-name: tansformAnimation; - animation-duration: .5s; - animation-iteration-count: 1; - color: rgba(58, 58, 58, 0.41); - animation-timing-function: ease; - animation-fill-mode: forwards; - -webkit-animation-name: tansformAnimation; - -webkit-animation-duration: .5s; - -webkit-animation-iteration-count: 1; - -webkit-animation-timing-function: ease; - -webkit-animation-fill-mode: forwards; - -moz-animation-name: tansformAnimation; - -moz-animation-duration: .5s; - -moz-animation-iteration-count: 1; - -moz-animation-timing-function: ease; - -moz-animation-fill-mode: forwards; } - -.tile-stats .icon { - width: 20px; - height: 20px; - color: #BAB8B8; - position: absolute; - right: 53px; - top: 22px; - z-index: 1; } - -.tile-stats .icon i { - margin: 0; - font-size: 60px; - line-height: 0; - vertical-align: bottom; - padding: 0; } - -.tile-stats .count { - font-size: 38px; - font-weight: bold; - line-height: 1.65857; } - -.tile-stats .count, .tile-stats h3, .tile-stats p { - position: relative; - margin: 0; - margin-left: 10px; - z-index: 5; - padding: 0; } - -.tile-stats h3 { - color: #BAB8B8; } - -.tile-stats p { - margin-top: 5px; - font-size: 12px; } - -.tile-stats > .dash-box-footer { - position: relative; - text-align: center; - margin-top: 5px; - padding: 3px 0; - color: #fff; - color: rgba(255, 255, 255, 0.8); - display: block; - z-index: 10; - background: rgba(0, 0, 0, 0.1); - text-decoration: none; } - -.tile-stats > .dash-box-footer:hover { - color: #fff; - background: rgba(0, 0, 0, 0.15); } - -.tile-stats > .dash-box-footer:hover { - color: #fff; - background: rgba(0, 0, 0, 0.15); } - -table.tile_info { - padding: 10px 15px; } - -table.tile_info span.right { - margin-right: 0; - float: right; - position: absolute; - right: 4%; } - -.tile:hover { - text-decoration: none; } - -.tile_header { - border-bottom: transparent; - padding: 7px 15px; - margin-bottom: 15px; - background: #E7E7E7; } - -.tile_head h4 { - margin-top: 0; - margin-bottom: 5px; } - -.tiles-bottom { - padding: 5px 10px; - margin-top: 10px; - background: rgba(194, 194, 194, 0.3); - text-align: left; } - -/** /tile stats **/ -/** inbox **/ -a.star { - color: #428bca !important; } - -.mail_content { - background: none repeat scroll 0 0 #FFFFFF; - border-radius: 4px; - margin-top: 20px; - min-height: 500px; - padding: 10px 11px; - width: 100%; } - -.list-btn-mail { - margin-bottom: 15px; } - -.list-btn-mail.active { - border-bottom: 1px solid #39B3D7; - padding: 0 0 14px; } - -.list-btn-mail > i { - float: left; - font-size: 18px; - font-style: normal; - width: 33px; } - -.list-btn-mail > .cn { - background: none repeat scroll 0 0 #39B3D7; - border-radius: 12px; - color: #FFFFFF; - float: right; - font-style: normal; - padding: 0 5px; } - -.button-mail { - margin: 0 0 15px !important; - text-align: left; - width: 100%; } - -button, -.buttons, -.btn, -.modal-footer .btn + .btn { - margin-bottom: 5px; - margin-right: 5px; } - -.btn-group-vertical .btn, .btn-group .btn { - margin-bottom: 0; - margin-right: 0; } - -.mail_list_column { - border-left: 1px solid #DBDBDB; } - -.mail_view { - border-left: 1px solid #DBDBDB; } - -.mail_list { - width: 100%; - border-bottom: 1px solid #DBDBDB; - margin-bottom: 2px; - display: inline-block; } - -.mail_list .left { - width: 5%; - float: left; - margin-right: 3%; } - -.mail_list .right { - width: 90%; - float: left; } - -.mail_list h3 { - font-size: 15px; - font-weight: bold; - margin: 0px 0 6px; } - -.mail_list h3 small { - float: right; - color: #ADABAB; - font-size: 11px; - line-height: 20px; } - -.mail_list .badge { - padding: 3px 6px; - font-size: 8px; - background: #BAB7B7; } - -@media (max-width: 767px) { - .mail_list { - margin-bottom: 5px; - display: inline-block; } } -.mail_heading h4 { - font-size: 18px; - border-bottom: 1px solid #ddd; - padding-bottom: 10px; - margin-top: 20px; } - -.attachment { - margin-top: 30px; } - -.attachment ul { - width: 100%; - list-style: none; - padding-left: 0; - display: inline-block; - margin-bottom: 30px; } - -.attachment ul li { - float: left; - width: 150px; - margin-right: 10px; - margin-bottom: 10px; } - -.attachment ul li img { - height: 150px; - border: 1px solid #ddd; - padding: 5px; - margin-bottom: 10px; } - -.attachment ul li span { - float: right; } - -.attachment .file-name { - float: left; } - -.attachment .links { - width: 100%; - display: inline-block; } - -.compose { - padding: 0; - position: fixed; - bottom: 0; - right: 0; - background: #fff; - border: 1px solid #D9DEE4; - border-right: 0; - border-bottom: 0; - border-top-left-radius: 5px; - z-index: 9999; - display: none; } - -.compose .compose-header { - padding: 5px; - background: #169F85; - color: #fff; - border-top-left-radius: 5px; } - -.compose .compose-header .close { - text-shadow: 0 1px 0 #ffffff; - line-height: .8; } - -.compose .compose-body .editor.btn-toolbar { - margin: 0; } - -.compose .compose-body .editor-wrapper { - height: 100%; - min-height: 50px; - max-height: 180px; - border-radius: 0; - border-left: none; - border-right: none; - overflow: auto; } - -.compose .compose-footer { - padding: 10px; } - -/** /inbox **/ -/* ********* form design **************************** */ -.editor.btn-toolbar { - zoom: 1; - background: #F7F7F7; - margin: 5px 2px; - padding: 3px 0; - border: 1px solid #EFEFEF; } - -.input-group { - margin-bottom: 10px; } - -.ln_solid { - border-top: 1px solid #e5e5e5; - color: #ffffff; - background-color: #ffffff; - height: 1px; - margin: 20px 0; } - -span.section { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333; - border: 0; - border-bottom: 1px solid #e5e5e5; } - -.form-control { - border-radius: 0; - width: 100%; } - -.form-horizontal .control-label { - padding-top: 8px; } - -.form-control:focus { - border-color: #CCD0D7; - box-shadow: none !important; } - -legend { - font-size: 18px; - color: inherit; } - -.form-horizontal .form-group { - margin-right: 0; - margin-left: 0; } - -.form-control-feedback { - margin-top: 8px; - height: 23px; - color: #bbb; - line-height: 24px; - font-size: 15px; } - -.form-control-feedback.left { - border-right: 1px solid #ccc; - left: 13px; } - -.form-control-feedback.right { - border-left: 1px solid #ccc; - right: 13px; } - -.form-control.has-feedback-left { - padding-left: 45px; } - -.form-control.has-feedback-right { - padding-right: 45px; } - -.form-group { - margin-bottom: 10px; } - -.validate { - margin-top: 10px; } - -.invalid-form-error-message { - margin-top: 10px; - padding: 5px; } - -.invalid-form-error-message.filled { - border-left: 2px solid #E74C3C; } - -p.parsley-success { - color: #468847; - background-color: #DFF0D8; - border: 1px solid #D6E9C6; } - -p.parsley-error { - color: #B94A48; - background-color: #F2DEDE; - border: 1px solid #EED3D7; } - -ul.parsley-errors-list { - list-style: none; - color: #E74C3C; - padding-left: 0; } - -input.parsley-error, textarea.parsley-error, select.parsley-error { - background: #FAEDEC; - border: 1px solid #E85445; } - -.btn-group .parsley-errors-list { - display: none; } - -.bad input, .bad select, .bad textarea { - border: 1px solid #CE5454; - box-shadow: 0 0 4px -2px #CE5454; - position: relative; - left: 0; - -moz-animation: .7s 1 shake linear; - -webkit-animation: 0.7s 1 shake linear; } - -.item input, .item textarea { - transition: 0.42s; } - -/* alerts (when validation fails) */ -.item .alert { - float: left; - margin: 0 0 0 20px; - padding: 3px 10px; - color: #FFF; - border-radius: 3px 4px 4px 3px; - background-color: #CE5454; - max-width: 170px; - white-space: pre; - position: relative; - left: -15px; - opacity: 0; - z-index: 1; - transition: 0.15s ease-out; } - -.item .alert::after { - content: ''; - display: block; - height: 0; - width: 0; - border-color: transparent #CE5454 transparent transparent; - border-style: solid; - border-width: 11px 7px; - position: absolute; - left: -13px; - top: 1px; } - -.item.bad .alert { - left: 0; - opacity: 1; } - -.inl-bl { - display: inline-block; } - -.well .markup { - background: #fff; - color: #777; - position: relative; - padding: 45px 15px 15px; - margin: 15px 0 0 0; - background-color: #fff; - border-radius: 0 0 4px 4px; - box-shadow: none; } - -.well .markup::after { - content: "Example"; - position: absolute; - top: 15px; - left: 15px; - font-size: 12px; - font-weight: bold; - color: #bbb; - text-transform: uppercase; - letter-spacing: 1px; } - -/* ***** autocomplete ***** */ -.autocomplete-suggestions { - border: 1px solid #e4e4e4; - background: #F4F4F4; - cursor: default; - overflow: auto; } - -.autocomplete-suggestion { - padding: 2px 5px; - font-size: 1.2em; - white-space: nowrap; - overflow: hidden; } - -.autocomplete-selected { - background: #f0f0f0; } - -.autocomplete-suggestions strong { - font-weight: normal; - color: #3399ff; - font-weight: bolder; } - -/* ***** /autocomplete *****/ -/* ***** buttons ********/ -.btn { - border-radius: 3px; } - -a.btn-success, a.btn-primary, a.btn-warning, a.btn-danger { - color: #fff; } - -.btn-success { - background: #26B99A; - border: 1px solid #169F85; } - -.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { - background: #169F85; } - -.btn-dark { - color: #E9EDEF; - background-color: #4B5F71; - border-color: #364B5F; } - -.btn-dark:hover, .btn-dark:focus, .btn-dark:active, .btn-dark.active, .open .dropdown-toggle.btn-dark { - color: #FFFFFF; - background-color: #394D5F; - border-color: #394D5F; } - -.btn-round { - border-radius: 30px; } - -.btn.btn-app { - position: relative; - padding: 15px 5px; - margin: 0 0 10px 10px; - min-width: 80px; - height: 60px; - box-shadow: none; - border-radius: 0; - text-align: center; - color: #666; - border: 1px solid #ddd; - background-color: #fafafa; - font-size: 12px; } - -.btn.btn-app > .fa, .btn.btn-app > .glyphicon, .btn.btn-app > .ion { - font-size: 20px; - display: block; } - -.btn.btn-app:hover { - background: #f4f4f4; - color: #444; - border-color: #aaa; } - -.btn.btn-app:active, .btn.btn-app:focus { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } - -.btn.btn-app > .badge { - position: absolute; - top: -3px; - right: -10px; - font-size: 10px; - font-weight: 400; } - -/* ***** /buttons *******/ -/* ********* /form design **************************** */ -/* ********* form textarea **************************** */ -textarea { - padding: 10px; - vertical-align: top; - width: 200px; } - -textarea:focus { - outline-style: solid; - outline-width: 2px; } - -.btn_ { - display: inline-block; - padding: 3px 9px; - margin-bottom: 0; - font-size: 14px; - line-height: 20px; - text-align: center; - vertical-align: middle; - cursor: pointer; - color: #333333; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - background-color: #f5f5f5; - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=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); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - border: 1px solid #cccccc; - border-bottom-color: #b3b3b3; - border-radius: 4px; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); } - -/* ********* /form textarea **************************** */ -/* ********* glyphicons **************************** */ -.bs-glyphicons { - margin: 0 -10px 20px; - overflow: hidden; } - -.bs-glyphicons-list { - padding-left: 0; - list-style: none; } - -.bs-glyphicons li { - float: left; - width: 25%; - height: 115px; - padding: 10px; - font-size: 10px; - line-height: 1.4; - text-align: center; - background-color: #f9f9f9; - border: 1px solid #fff; } - -.bs-glyphicons .glyphicon { - margin-top: 5px; - margin-bottom: 10px; - font-size: 24px; } - -.bs-glyphicons .glyphicon-class { - display: block; - text-align: center; - word-wrap: break-word; } - -.bs-glyphicons li:hover { - color: #fff; - background-color: #1ABB9C; } - -@media (min-width: 768px) { - .bs-glyphicons { - margin-right: 0; - margin-left: 0; } - - .bs-glyphicons li { - width: 12.5%; - font-size: 12px; } } -/* ********* /glyphicons **************************** */ -/* ********* form tags input **************************** */ -.tagsinput { - border: 1px solid #CCC; - background: #FFF; - padding: 6px 6px 0; - width: 300px; - overflow-y: auto; } - -span.tag { - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - display: block; - float: left; - padding: 5px 9px; - text-decoration: none; - background: #1ABB9C; - color: #F1F6F7; - margin-right: 5px; - font-weight: 500; - margin-bottom: 5px; - font-family: helvetica; } - -span.tag a { - color: #F1F6F7 !important; } - -.tagsinput span.tag a { - font-weight: bold; - color: #82ad2b; - text-decoration: none; - font-size: 11px; } - -.tagsinput input { - width: 80px; - margin: 0px; - font-family: helvetica; - font-size: 13px; - border: 1px solid transparent; - padding: 3px; - background: transparent; - color: #000; - outline: 0px; } - -.tagsinput div { - display: block; - float: left; } - -.tags_clear { - clear: both; - width: 100%; - height: 0px; } - -.not_valid { - background: #FBD8DB !important; - color: #90111A !important; } - -/* ********* /form tags input **************************** */ -/** Tabs **/ -ul.bar_tabs { - overflow: visible; - background: #F5F7FA; - height: 25px; - margin: 21px 0 14px; - padding-left: 14px; - position: relative; - z-index: 1; - width: 100%; - border-bottom: 1px solid #E6E9ED; } - -ul.bar_tabs > li { - border: 1px solid #E6E9ED; - color: #333 !important; - margin-top: -17px; - margin-left: 8px; - background: #fff; - border-bottom: none; - border-radius: 4px 4px 0 0; } - -ul.bar_tabs > li.active { - border-right: 6px solid #D3D6DA; - border-top: 0; - margin-top: -15px; } - -ul.bar_tabs > li a { - padding: 10px 17px; - background: #F5F7FA; - margin: 0; - border-top-right-radius: 0; } - -ul.bar_tabs > li a:hover { - border: 1px solid transparent; } - -ul.bar_tabs > li.active a { - border-bottom: none; } - -ul.bar_tabs.right { - padding-right: 14px; } - -ul.bar_tabs.right li { - float: right; } - -a:focus { - outline: none; } - -/** /Tabs **/ -/* ********* timeline **************************** */ -ul.timeline li { - position: relative; - border-bottom: 1px solid #e8e8e8; - clear: both; } - -.timeline .block { - margin: 0; - border-left: 3px solid #e8e8e8; - overflow: visible; - padding: 10px 15px; - margin-left: 105px; } - -.timeline.widget { - min-width: 0; - max-width: inherit; } - -.timeline.widget .block { - margin-left: 5px; } - -.timeline .tags { - position: absolute; - top: 15px; - left: 0; - width: 84px; } - -.timeline .tag { - display: block; - height: 30px; - font-size: 13px; - padding: 8px; } - -.timeline .tag span { - display: block; - overflow: hidden; - width: 100%; - white-space: nowrap; - text-overflow: ellipsis; } - -.tag { - line-height: 1; - background: #1ABB9C; - color: #fff !important; } - -.tag:after { - content: " "; - height: 30px; - width: 0; - position: absolute; - left: 100%; - top: 0; - margin: 0; - pointer-events: none; - border-top: 14px solid transparent; - border-bottom: 14px solid transparent; - border-left: 11px solid #1ABB9C; } - -.timeline h2.title { - position: relative; - font-size: 16px; - margin: 0; } - -.timeline h2.title:before { - content: ""; - position: absolute; - left: -23px; - top: 3px; - display: block; - width: 14px; - height: 14px; - border: 3px solid #d2d3d2; - border-radius: 14px; - background: #f9f9f9; } - -.timeline .byline { - padding: .25em 0; } - -.byline { - -webkit-font-smoothing: antialiased; - font-style: italic; - font-size: .9375em; - line-height: 1.3; - color: #aab6aa; } - -ul.social li { - border: 0; } - -/* ********* /timeline **************************** */ -/* ********* profile/social **************************** */ -.social-sidebar, .social-body { - float: right; } - -.social-sidebar { - background: #EDEDED; - width: 22%; } - -.social-body { - border: 1px solid #ccc; - width: 78%; } - -.thumb img { - width: 50px; - height: 50px; - border-radius: 50%; } - -.chat .thumb img { - width: 27px; - height: 27px; - border-radius: 50%; } - -.chat .status { - float: left; - margin: 16px 0 0 -16px; - font-size: 14px; - font-weight: bold; - width: 12px; - height: 12px; - display: block; - border: 2px solid #FFF; - z-index: 12312; - border-radius: 50%; } - -.chat .status.online { - background: #1ABB9C; } - -.chat .status.away { - background: #F39C12; } - -.chat .status.offline { - background: #ccc; } - -.chat .media-body { - padding-top: 5px; } - -/* ********* /profile/social **************************** */ -/* ********* widgets **************************** */ -.dashboard_graph .x_title { - padding: 5px 5px 7px; } - -.dashboard_graph .x_title h3 { - margin: 0; - font-weight: normal; } - -.chart { - position: relative; - display: inline-block; - width: 110px; - height: 110px; - margin-top: 5px; - margin-bottom: 5px; - text-align: center; } - -.chart canvas { - position: absolute; - top: 0; - left: 0; } - -.percent { - display: inline-block; - line-height: 110px; - z-index: 2; - font-size: 18px; } - -.percent:after { - content: '%'; - margin-left: 0.1em; - font-size: .8em; } - -.angular { - margin-top: 100px; } - -.angular .chart { - margin-top: 0; } - -.widget { - min-width: 250px; - max-width: 310px; } - -.widget_tally_box .btn-group button { - text-align: center; } - -.widget_tally_box .btn-group button { - color: inherit; - font-weight: 500; - background-color: #f5f5f5; - border: 1px solid #e7e7e7; } - -ul.widget_tally, ul.widget_tally li { - width: 100%; } - -ul.widget_tally li { - padding: 2px 10px; - border-bottom: 1px solid #ECECEC; - padding-bottom: 4px; } - -ul.widget_tally .month { - width: 70%; - float: left; } - -ul.widget_tally .count { - width: 30%; - float: left; - text-align: right; } - -.pie_bg { - border-bottom: 1px solid rgba(101, 204, 182, 0.16); - padding-bottom: 15px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - padding-bottom: 10px; - box-shadow: 0 4px 6px -6px #222; } - -.widget_tally_box .flex { - display: -ms-flexbox; - display: flex; } - -ul.widget_profile_box { - width: 100%; - height: 42px; - padding: 3px; - background: #ececec; - margin-top: 40px; - margin-left: 1px; } - -ul.widget_profile_box li:first-child { - width: 25%; - float: left; } - -ul.widget_profile_box li:first-child a { - float: left; } - -ul.widget_profile_box li:last-child { - width: 25%; - float: right; } - -ul.widget_profile_box li:last-child a { - float: right; } - -ul.widget_profile_box li a { - font-size: 22px; - text-align: center; - width: 35px; - height: 35px; - border: 1px solid rgba(52, 73, 94, 0.44); - display: block; - border-radius: 50%; - padding: 0px; } - -ul.widget_profile_box li a:hover { - color: #1ABB9C !important; - border: 1px solid #26b99a; } - -ul.widget_profile_box li .profile_img { - width: 85px; - height: 85px; - margin: 0; - margin-top: -28px; } - -.widget_tally_box p, .widget_tally_box span { - text-align: center; } - -.widget_tally_box .name { - text-align: center; - margin: 25px; } - -.widget_tally_box .name_title { - text-align: center; - margin: 5px; } - -.widget_tally_box ul.legend { - margin: 0; } - -.widget_tally_box ul.legend p, .widget_tally_box ul.legend span { - text-align: left; } - -.widget_tally_box ul.legend li .icon { - font-size: 20px; - float: left; - width: 14px; } - -.widget_tally_box ul.legend li .name { - font-size: 14px; - margin: 5px 0 0 14px; - text-overflow: ellipsis; - float: left; } - -.widget_tally_box ul.legend p { - display: inline-block; - margin: 0; } - -.widget_tally_box ul.verticle_bars li { - height: 140px; - width: 23%; } - -.widget .verticle_bars li .progress.vertical.progress_wide { - width: 65%; } - -ul.count2 { - width: 100%; - margin-left: 1px; - border: 1px solid #ddd; - border-left: 0; - border-right: 0; - padding: 10px 0; } - -ul.count2 li { - width: 30%; - text-align: center; } - -ul.count2 li h3 { - font-weight: 400; - margin: 0; } - -ul.count2 li span { - font-weight: 300; } - -/* ********* /widgets **************************** */ -.divider { - border-bottom: 1px solid #ddd; - margin: 10px; } - -.divider-dashed { - border-top: 1px dashed #e7eaec; - background-color: #ffffff; - height: 1px; - margin: 10px 0; } - -ul.messages { - padding: 0; - list-style: none; } - -ul.messages li, .tasks li { - border-bottom: 1px dotted #e6e6e6; - padding: 8px 0; } - -ul.messages li img.avatar, img.avatar { - height: 32px; - width: 32px; - float: left; - display: inline-block; - border-radius: 2px; - padding: 2px; - background: #f7f7f7; - border: 1px solid #e6e6e6; } - -ul.messages li .message_date { - float: right; - text-align: right; } - -ul.messages li .message_wrapper { - margin-left: 50px; - margin-right: 40px; } - -ul.messages li .message_wrapper h4.heading { - font-weight: 600; - margin: 0; - cursor: pointer; - margin-bottom: 10px; - line-height: 100%; } - -ul.messages li .message_wrapper blockquote { - padding: 0px 10px; - margin: 0; - border-left: 5px solid #eee; } - -ul.user_data li { - margin-bottom: 6px; } - -ul.user_data li p { - margin-bottom: 0; } - -ul.user_data li .progress { - width: 90%; } - -.project_progress .progress { - margin-bottom: 3px !important; - margin-top: 5px; } - -.projects .list-inline { - margin: 0; } - -.profile_title { - background: #F5F7FA; - border: 0; - padding: 7px 0; - display: -ms-flexbox; - display: flex; } - -ul.stats-overview { - border-bottom: 1px solid #e8e8e8; - padding-bottom: 10px; - margin-bottom: 10px; } - -ul.stats-overview li { - display: inline-block; - text-align: center; - padding: 0 15px; - width: 30%; - font-size: 14px; - border-right: 1px solid #e8e8e8; } - -ul.stats-overview li:last-child { - border-right: 0; } - -ul.stats-overview li .name { - font-size: 12px; } - -ul.stats-overview li .value { - font-size: 14px; - font-weight: bold; - display: block; } - -ul.stats-overview li:first-child { - padding-left: 0; } - -ul.project_files li { - margin-bottom: 5px; } - -ul.project_files li a i { - width: 20px; } - -.project_detail p { - margin-bottom: 10px; } - -.project_detail p.title { - font-weight: bold; - margin-bottom: 0; } - -.avatar img { - border-radius: 50%; - max-width: 45px; } - -/* ********* pricing **************************** */ -.pricing { - background: #fff; } - -.pricing .title { - background: #1ABB9C; - height: 110px; - color: #fff; - padding: 15px 0 0; - text-align: center; } - -.pricing .title h2 { - text-transform: capitalize; - font-size: 18px; - border-radius: 5px 5px 0 0; - margin: 0; - font-weight: 400; } - -.pricing .title h1 { - font-size: 30px; - margin: 12px; } - -.pricing .title span { - background: rgba(51, 51, 51, 0.28); - padding: 2px 5px; } - -.pricing_features { - background: #FAFAFA; - padding: 20px 15px; - min-height: 230px; - font-size: 13.5px; } - -.pricing_features ul li { - margin-top: 10px; } - -.pricing_footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - text-align: center; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; } - -.pricing_footer p { - font-size: 13px; - padding: 10px 0 2px; - display: block; } - -.ui-ribbon-container { - position: relative; } - -.ui-ribbon-container .ui-ribbon-wrapper { - position: absolute; - overflow: hidden; - width: 85px; - height: 88px; - top: -3px; - right: -3px; } - -.ui-ribbon-container.ui-ribbon-primary .ui-ribbon { - background-color: #5b90bf; } - -.ui-ribbon-container .ui-ribbon { - position: relative; - display: block; - text-align: center; - font-size: 15px; - font-weight: 700; - color: #fff; - transform: rotate(45deg); - padding: 7px 0; - left: -5px; - top: 15px; - width: 120px; - line-height: 20px; - background-color: #555; - box-shadow: 0 0 3px rgba(0, 0, 0, 0.3); } - -.ui-ribbon-container.ui-ribbon-primary .ui-ribbon:after, .ui-ribbon-container.ui-ribbon-primary .ui-ribbon:before { - border-top: 2px solid #5b90bf; } - -.ui-ribbon-container .ui-ribbon:before { - left: 0; - bottom: -1px; } - -.ui-ribbon-container .ui-ribbon:before { - right: 0; } - -.ui-ribbon-container .ui-ribbon:after, .ui-ribbon-container .ui-ribbon:before { - position: absolute; - content: " "; - line-height: 0; - border-top: 2px solid #555; - border-left: 2px solid transparent; - border-right: 2px solid transparent; } - -/* ********* /pricing **************************** */ -/* ********* media gallery **************************** */ -.thumbnail .image { - height: 120px; - overflow: hidden; } - -.caption { - padding: 9px 5px; - background: #F7F7F7; } - -.caption p { - margin-bottom: 5px; } - -.thumbnail { - height: 190px; - overflow: hidden; } - -.view { - overflow: hidden; - position: relative; - text-align: center; - box-shadow: 1px 1px 2px #e6e6e6; - cursor: default; } - -.view .mask, .view .content { - position: absolute; - width: 100%; - overflow: hidden; - top: 0; - left: 0; } - -.view img { - display: block; - position: relative; } - -.view .tools { - text-transform: uppercase; - color: #fff; - text-align: center; - position: relative; - font-size: 17px; - padding: 3px; - background: rgba(0, 0, 0, 0.35); - margin: 43px 0 0 0; } - -.mask.no-caption .tools { - margin: 90px 0 0 0; } - -.view .tools a { - display: inline-block; - color: #FFF; - font-size: 18px; - font-weight: 400; - padding: 0 4px; } - -.view p { - font-family: Georgia, serif; - font-style: italic; - font-size: 12px; - position: relative; - color: #fff; - padding: 10px 20px 20px; - text-align: center; } - -.view a.info { - display: inline-block; - text-decoration: none; - padding: 7px 14px; - background: #000; - color: #fff; - text-transform: uppercase; - box-shadow: 0 0 1px #000; } - -.view-first img { - transition: all 0.2s linear; } - -.view-first .mask { - opacity: 0; - background-color: rgba(0, 0, 0, 0.5); - transition: all 0.4s ease-in-out; } - -.view-first .tools { - transform: translateY(-100px); - opacity: 0; - transition: all 0.2s ease-in-out; } - -.view-first p { - transform: translateY(100px); - opacity: 0; - transition: all 0.2s linear; } - -.view-first:hover img { - transform: scale(1.1); } - -.view-first:hover .mask { - opacity: 1; } - -.view-first:hover .tools, .view-first:hover p { - opacity: 1; - transform: translateY(0px); } - -.view-first:hover p { - transition-delay: 0.1s; } - -/* ********* /media gallery **************************** */ -/* ********* verticle tabs **************************** */ -/*! - * bootstrap-vertical-tabs - v1.2.1 - * https://dbtek.github.io/bootstrap-vertical-tabs - * 2014-11-07 - * Copyright (c) 2014 İsmail Demirbilek - * License: MIT - */ -.tabs-left, .tabs-right { - border-bottom: none; - padding-top: 2px; } - -.tabs-left { - border-right: 1px solid #F7F7F7; } - -.tabs-right { - border-left: 1px solid #F7F7F7; } - -.tabs-left > li, .tabs-right > li { - float: none; - margin-bottom: 2px; } - -.tabs-left > li { - margin-right: -1px; } - -.tabs-right > li { - margin-left: -1px; } - -.tabs-left > li.active > a, .tabs-left > li.active > a:hover, .tabs-left > li.active > a:focus { - border-bottom-color: #F7F7F7; - border-right-color: transparent; } - -.tabs-right > li.active > a, .tabs-right > li.active > a:hover, .tabs-right > li.active > a:focus { - border-bottom: 1px solid #F7F7F7; - border-left-color: transparent; } - -.tabs-left > li > a { - border-radius: 4px 0 0 4px; - margin-right: 0; - display: block; - background: #F7F7F7; - text-overflow: ellipsis; - overflow: hidden; } - -.tabs-right > li > a { - border-radius: 0 4px 4px 0; - margin-right: 0; - background: #F7F7F7; - text-overflow: ellipsis; - overflow: hidden; } - -.sideways { - margin-top: 50px; - border: none; - position: relative; } - -.sideways > li { - height: 20px; - width: 120px; - margin-bottom: 100px; } - -.sideways > li > a { - border-bottom: 1px solid #ddd; - border-right-color: transparent; - text-align: center; - border-radius: 4px 4px 0px 0px; } - -.sideways > li.active > a, .sideways > li.active > a:hover, .sideways > li.active > a:focus { - border-bottom-color: transparent; - border-right-color: #ddd; - border-left-color: #ddd; } - -.sideways.tabs-left { - left: -50px; } - -.sideways.tabs-right { - right: -50px; } - -.sideways.tabs-right > li { - transform: rotate(90deg); } - -.sideways.tabs-left > li { - transform: rotate(-90deg); } - -/* ********* /verticle tabs **************************** */ -/* ********* moris **************************** */ -.morris-hover { - position: absolute; - z-index: 1000; } - -.morris-hover.morris-default-style { - padding: 6px; - color: #666; - background: rgba(243, 242, 243, 0.8); - border: solid 2px rgba(195, 194, 196, 0.8); - font-family: sans-serif; - font-size: 12px; - text-align: center; } - -.morris-hover.morris-default-style .morris-hover-row-label { - font-weight: bold; - margin: 0.25em 0; } - -.morris-hover.morris-default-style .morris-hover-point { - white-space: nowrap; - margin: 0.1em 0; } - -/* ********* /moris **************************** */ -/* ********* ecommerce **************************** */ -.price { - font-size: 40px; - font-weight: 400; - color: #26B99A; - margin: 0; } - -.prod_title { - border-bottom: 1px solid #DFDFDF; - padding-bottom: 5px; - margin: 30px 0; - font-size: 20px; - font-weight: 400; } - -.product-image img { - width: 90%; } - -.prod_color li { - margin: 0 10px; } - -.prod_color li p { - margin-bottom: 0; } - -.prod_size li { - padding: 0; } - -.prod_color .color { - width: 25px; - height: 25px; - border: 2px solid rgba(51, 51, 51, 0.28) !important; - padding: 2px; - border-radius: 50px; } - -.product_gallery a { - width: 100px; - height: 100px; - float: left; - margin: 10px; - border: 1px solid #e5e5e5; } - -.product_gallery a img { - width: 100%; - margin-top: 15px; } - -.product_price { - margin: 20px 0; - padding: 5px 10px; - background-color: #FFFFFF; - text-align: left; - border: 2px dashed #E0E0E0; } - -.price-tax { - font-size: 18px; } - -.product_social { - margin: 20px 0; } - -.product_social ul li a i { - font-size: 35px; } - -/* ********* /ecommerce **************************** */ -/** login **/ -.login { - background: #F7F7F7; } - -.login .fa-paw { - font-size: 26px; } - -a.hiddenanchor { - display: none; } - -.login_wrapper { - right: 0px; - margin: 0px auto; - margin-top: 5%; - max-width: 350px; - position: relative; } - -.registration_form, .login_form { - position: absolute; - top: 0px; - width: 100%; } - -.registration_form { - z-index: 21; - opacity: 0; - width: 100%; } - -.login_form { - z-index: 22; } - -#signup:target ~ .login_wrapper .registration_form, #signin:target ~ .login_wrapper .login_form { - z-index: 22; - animation-name: fadeInLeft; - animation-delay: .1s; } - -#signup:target ~ .login_wrapper .login_form, #signin:target ~ .login_wrapper .registration_form { - animation-name: fadeOutLeft; } - -.animate { - -webkit-animation-duration: 0.5s; - -webkit-animation-timing-function: ease; - -webkit-animation-fill-mode: both; - -moz-animation-duration: 0.5s; - -moz-animation-timing-function: ease; - -moz-animation-fill-mode: both; - -o-animation-duration: 0.5s; - -o-animation-timing-function: ease; - -o-animation-fill-mode: both; - -ms-animation-duration: 0.5s; - -ms-animation-timing-function: ease; - -ms-animation-fill-mode: both; - animation-duration: 0.5s; - animation-timing-function: ease; - animation-fill-mode: both; } - -/** /login **/ -/** signup **/ -.login_box { - padding: 20px; - margin: auto; } - -.left { - float: left; } - -.alignleft { - float: left; - margin-right: 15px; } - -.alignright { - float: right; - margin-left: 15px; } - -.clearfix:after, form:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; } - -.login_content { - margin: 0 auto; - padding: 25px 0 0; - position: relative; - text-align: center; - text-shadow: 0 1px 0 #fff; - min-width: 280px; } - -.login_content a, -.login_content .btn-default:hover { - text-decoration: none; } - -.login_content a:hover { - text-decoration: underline; } - -.login_content h1 { - font: normal 25px Helvetica, Arial, sans-serif; - letter-spacing: -0.05em; - line-height: 20px; - margin: 10px 0 30px; } - -.login_content h1:before, .login_content h1:after { - content: ""; - height: 1px; - position: absolute; - top: 10px; - width: 27%; } - -.login_content h1:after { - background: #7e7e7e; - background: linear-gradient(left, #7e7e7e 0%, white 100%); - right: 0; } - -.login_content h1:before { - background: #7e7e7e; - background: linear-gradient(right, #7e7e7e 0%, white 100%); - left: 0; } - -.login_content h1:before, .login_content h1:after { - content: ""; - height: 1px; - position: absolute; - top: 10px; - width: 20%; } - -.login_content h1:after { - background: #7e7e7e; - background: linear-gradient(left, #7e7e7e 0%, white 100%); - right: 0; } - -.login_content h1:before { - background: #7e7e7e; - background: linear-gradient(right, #7e7e7e 0%, white 100%); - left: 0; } - -.login_content form { - margin: 20px 0; - position: relative; } - -.login_content form input[type="text"], .login_content form input[type="email"], .login_content form input[type="password"] { - border-radius: 3px; - -ms-box-shadow: 0 1px 0 #fff, 0 -2px 5px rgba(0, 0, 0, 0.08) inset; - -o-box-shadow: 0 1px 0 #fff, 0 -2px 5px rgba(0, 0, 0, 0.08) inset; - box-shadow: 0 1px 0 #fff, 0 -2px 5px rgba(0, 0, 0, 0.08) inset; - border: 1px solid #c8c8c8; - color: #777; - margin: 0 0 20px; - width: 100%; } - -.login_content form input[type="text"]:focus, .login_content form input[type="email"]:focus, .login_content form input[type="password"]:focus { - -ms-box-shadow: 0 0 2px #ed1c24 inset; - -o-box-shadow: 0 0 2px #ed1c24 inset; - box-shadow: 0 0 2px #A97AAD inset; - background-color: #fff; - border: 1px solid #A878AF; - outline: none; } - -#username { - background-position: 10px 10px !important; } - -#password { - background-position: 10px -53px !important; } - -.login_content form div a { - font-size: 12px; - margin: 10px 15px 0 0; } - -.reset_pass { - margin-top: 10px !important; } - -.login_content div .reset_pass { - margin-top: 13px !important; - margin-right: 39px; - float: right; } - -.separator { - border-top: 1px solid #D8D8D8; - margin-top: 10px; - padding-top: 10px; } - -.button { - background: #f7f9fa; - background: linear-gradient(top, #f7f9fa 0%, #f0f0f0 100%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f9fa', endColorstr='#f0f0f0', GradientType=0); - -ms-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset; - -o-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset; - border-radius: 0 0 5px 5px; - border-top: 1px solid #CFD5D9; - padding: 15px 0; } - -.login_content form input[type="submit"], #content form .submit { - float: left; - margin-left: 38px; } - -.button a { - background: url(http://cssdeck.com/uploads/media/items/8/8bcLQqF.png) 0 -112px no-repeat; - color: #7E7E7E; - font-size: 17px; - padding: 2px 0 2px 40px; - text-decoration: none; - transition: all 0.3s ease; } - -.button a:hover { - background-position: 0 -135px; - color: #00aeef; } - -header { - width: 100%; } - -/** signup **/ -/** NProgress **/ -#nprogress .bar { - background: #1ABB9C; } - -#nprogress .peg { - box-shadow: 0 0 10px #1ABB9C, 0 0 5px #1ABB9C; } - -#nprogress .spinner-icon { - border-top-color: #1ABB9C; - border-left-color: #1ABB9C; } - -/** /NProgress **/ -/** bootstrap-wysiwyg **/ -.editor-wrapper { - min-height: 250px; - background-color: white; - border-collapse: separate; - border: 1px solid #cccccc; - padding: 4px; - box-sizing: content-box; - box-shadow: rgba(0, 0, 0, 0.07451) 0px 1px 1px 0px inset; - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; - overflow: scroll; - outline: none; } - -.voiceBtn { - width: 20px; - color: transparent; - background-color: transparent; - transform: scale(2, 2); - -webkit-transform: scale(2, 2); - -moz-transform: scale(2, 2); - border: transparent; - cursor: pointer; - box-shadow: none; - -webkit-box-shadow: none; } - -div[data-role="editor-toolbar"] { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } - -.dropdown-menu a { - cursor: pointer; } - -/** /bootstrap-wysiwyg **/ -/** Select2 **/ -.select2-container--default .select2-selection--single, -.select2-container--default .select2-selection--multiple { - background-color: #fff; - border: 1px solid #ccc; - border-radius: 0; - min-height: 38px; } - -.select2-container--default .select2-selection--single .select2-selection__rendered { - color: #73879C; - padding-top: 5px; } - -.select2-container--default .select2-selection--multiple .select2-selection__rendered { - padding-top: 3px; } - -.select2-container--default .select2-selection--single .select2-selection__arrow { - height: 36px; } - -.select2-container--default .select2-selection--multiple .select2-selection__choice, -.select2-container--default .select2-selection--multiple .select2-selection__clear { - margin-top: 2px; - border: none; - border-radius: 0; - padding: 3px 5px; } - -.select2-container--default.select2-container--focus .select2-selection--multiple { - border: 1px solid #ccc; } - -/** /Select2 **/ -/** Switchery **/ -.switchery { - width: 32px; - height: 20px; } - -.switchery > small { - width: 20px; - height: 20px; } - -/** /Switchery **/ -/** Normalize.css **/ -fieldset { - border: none; - margin: 0; - padding: 0; } - -/** /Normalize.css **/ -/** Cropper **/ -.cropper .img-container, -.cropper .img-preview { - background-color: #f7f7f7; - width: 100%; - text-align: center; } - -.cropper .img-container { - min-height: 200px; - max-height: 516px; - margin-bottom: 20px; } - -@media (min-width: 768px) { - .cropper .img-container { - min-height: 516px; } } -.cropper .img-container > img { - max-width: 100%; } - -.cropper .docs-preview { - margin-right: -15px; } - -.cropper .img-preview { - float: left; - margin-right: 10px; - margin-bottom: 10px; - overflow: hidden; } - -.cropper .img-preview > img { - max-width: 100%; } - -.cropper .preview-lg { - width: 263px; - height: 148px; } - -.cropper .preview-md { - width: 139px; - height: 78px; } - -.cropper .preview-sm { - width: 69px; - height: 39px; } - -.cropper .preview-xs { - width: 35px; - height: 20px; - margin-right: 0; } - -.cropper .docs-data > .input-group { - margin-bottom: 10px; } - -.cropper .docs-data > .input-group > label { - min-width: 80px; } - -.cropper .docs-data > .input-group > span { - min-width: 50px; } - -.cropper .docs-buttons > .btn, -.cropper .docs-buttons > .btn-group, -.cropper .docs-buttons > .form-control { - margin-right: 5px; - margin-bottom: 10px; } - -.cropper .docs-toggles > .btn, -.cropper .docs-toggles > .btn-group, -.cropper .docs-toggles > .dropdown { - margin-bottom: 10px; } - -.cropper .docs-tooltip { - display: block; - margin: -6px -12px; - padding: 6px 12px; } - -.cropper .docs-tooltip > .icon { - margin: 0 -3px; - vertical-align: top; } - -.cropper .tooltip-inner { - white-space: normal; } - -.cropper .btn-upload .tooltip-inner, -.cropper .btn-toggle .tooltip-inner { - white-space: nowrap; } - -.cropper .btn-toggle { - padding: 6px; } - -.cropper .btn-toggle > .docs-tooltip { - margin: -6px; - padding: 6px; } - -@media (max-width: 400px) { - .cropper .btn-group-crop { - margin-right: -15px !important; } - - .cropper .btn-group-crop > .btn { - padding-left: 5px; - padding-right: 5px; } - - .cropper .btn-group-crop .docs-tooltip { - margin-left: -5px; - margin-right: -5px; - padding-left: 5px; - padding-right: 5px; } } -.cropper .docs-options .dropdown-menu { - width: 100%; } - -.cropper .docs-options .dropdown-menu > li { - padding: 3px 20px; } - -.cropper .docs-options .dropdown-menu > li:hover { - background-color: #f7f7f7; } - -.cropper .docs-options .dropdown-menu > li > label { - display: block; } - -.cropper .docs-cropped .modal-body { - text-align: center; } - -.cropper .docs-cropped .modal-body > img, -.cropper .docs-cropped .modal-body > canvas { - max-width: 100%; } - -.cropper .docs-diagram .modal-dialog { - max-width: 352px; } - -.cropper .docs-cropped canvas { - max-width: 100%; } - -/** /Cropper **/ -/** jQuery Smart Wizard **/ -.form_wizard .stepContainer { - display: block; - position: relative; - margin: 0; - padding: 0; - border: 0 solid #CCC; - overflow-x: hidden; } - -.wizard_horizontal ul.wizard_steps { - display: table; - list-style: none; - position: relative; - width: 100%; - margin: 0 0 20px; } - -.wizard_horizontal ul.wizard_steps li { - display: table-cell; - text-align: center; } - -.wizard_horizontal ul.wizard_steps li a, .wizard_horizontal ul.wizard_steps li:hover { - display: block; - position: relative; - -moz-opacity: 1; - filter: alpha(opacity=100); - opacity: 1; - color: #666; } - -.wizard_horizontal ul.wizard_steps li a:before { - content: ""; - position: absolute; - height: 4px; - background: #ccc; - top: 20px; - width: 100%; - z-index: 4; - left: 0; } - -.wizard_horizontal ul.wizard_steps li a.disabled .step_no { - background: #ccc; } - -.wizard_horizontal ul.wizard_steps li a .step_no { - width: 40px; - height: 40px; - line-height: 40px; - border-radius: 100px; - display: block; - margin: 0 auto 5px; - font-size: 16px; - text-align: center; - position: relative; - z-index: 5; } - -.wizard_horizontal ul.wizard_steps li a.selected:before, .step_no { - background: #34495E; - color: #fff; } - -.wizard_horizontal ul.wizard_steps li a.done:before, .wizard_horizontal ul.wizard_steps li a.done .step_no { - background: #1ABB9C; - color: #fff; } - -.wizard_horizontal ul.wizard_steps li:first-child a:before { - left: 50%; } - -.wizard_horizontal ul.wizard_steps li:last-child a:before { - right: 50%; - width: 50%; - left: auto; } - -.wizard_verticle .stepContainer { - width: 80%; - float: left; - padding: 0 10px; } - -.actionBar { - width: 100%; - border-top: 1px solid #ddd; - padding: 10px 5px; - text-align: right; - margin-top: 10px; } - -.actionBar .buttonDisabled { - cursor: not-allowed; - pointer-events: none; - opacity: .65; - filter: alpha(opacity=65); - box-shadow: none; } - -.actionBar a { - margin: 0 3px; } - -.wizard_verticle .wizard_content { - width: 80%; - float: left; - padding-left: 20px; } - -.wizard_verticle ul.wizard_steps { - display: table; - list-style: none; - position: relative; - width: 20%; - float: left; - margin: 0 0 20px; } - -.wizard_verticle ul.wizard_steps li { - display: list-item; - text-align: center; } - -.wizard_verticle ul.wizard_steps li a { - height: 80px; } - -.wizard_verticle ul.wizard_steps li a:first-child { - margin-top: 20px; } - -.wizard_verticle ul.wizard_steps li a, .wizard_verticle ul.wizard_steps li:hover { - display: block; - position: relative; - -moz-opacity: 1; - filter: alpha(opacity=100); - opacity: 1; - color: #666; } - -.wizard_verticle ul.wizard_steps li a:before { - content: ""; - position: absolute; - height: 100%; - background: #ccc; - top: 20px; - width: 4px; - z-index: 4; - left: 49%; } - -.wizard_verticle ul.wizard_steps li a.disabled .step_no { - background: #ccc; } - -.wizard_verticle ul.wizard_steps li a .step_no { - width: 40px; - height: 40px; - line-height: 40px; - border-radius: 100px; - display: block; - margin: 0 auto 5px; - font-size: 16px; - text-align: center; - position: relative; - z-index: 5; } - -.wizard_verticle ul.wizard_steps li a.selected:before, .step_no { - background: #34495E; - color: #fff; } - -.wizard_verticle ul.wizard_steps li a.done:before, .wizard_verticle ul.wizard_steps li a.done .step_no { - background: #1ABB9C; - color: #fff; } - -.wizard_verticle ul.wizard_steps li:first-child a:before { - left: 49%; } - -.wizard_verticle ul.wizard_steps li:last-child a:before { - left: 49%; - left: auto; - width: 0; } - -.form_wizard .loader { - display: none; } - -.form_wizard .msgBox { - display: none; } - -/** jQuery Smart Wizard **/ -/** bootstrap-progressbar **/ -.progress { - border-radius: 0; } - -.progress-bar-info { - background-color: #3498DB; } - -.progress-bar-success { - background-color: #26B99A; } - -.progress_summary .progress { - margin: 5px 0 12px !important; } - -.progress_summary .row { - margin-bottom: 5px; } - -.progress_summary .row .col-xs-2 { - padding: 0; } - -.progress_summary .more_info span { - text-align: right; - float: right; } - -.progress_summary .data span { - text-align: right; - float: right; } - -.progress_summary p { - margin-bottom: 3px; - width: 100%; } - -.progress_title .left { - float: left; - text-align: left; } - -.progress_title .right { - float: right; - text-align: right; - font-weight: 300; } - -.progress.progress_sm { - border-radius: 0; - margin-bottom: 18px; - height: 10px !important; } - -.progress.progress_sm .progress-bar { - height: 10px !important; } - -.dashboard_graph p { - margin: 0 0 4px; } - -ul.verticle_bars { - width: 100%; } - -ul.verticle_bars li { - width: 23%; - height: 200px; - margin: 0; } - -.progress.vertical.progress_wide { - width: 35px; } - -/** bootstrap-progressbar **/ -/** PNotify **/ -.alert-success { - color: #ffffff; - background-color: rgba(38, 185, 154, 0.88); - border-color: rgba(38, 185, 154, 0.88); } - -.alert-info { - color: #E9EDEF; - background-color: rgba(52, 152, 219, 0.88); - border-color: rgba(52, 152, 219, 0.88); } - -.alert-warning { - color: #E9EDEF; - background-color: rgba(243, 156, 18, 0.88); - border-color: rgba(243, 156, 18, 0.88); } - -.alert-danger, -.alert-error { - color: #E9EDEF; - background-color: rgba(231, 76, 60, 0.88); - border-color: rgba(231, 76, 60, 0.88); } - -.ui-pnotify.dark .ui-pnotify-container { - color: #E9EDEF; - background-color: rgba(52, 73, 94, 0.88); - border-color: rgba(52, 73, 94, 0.88); } - -.custom-notifications { - position: fixed; - margin: 15px; - right: 0; - float: right; - width: 400px; - z-index: 4000; - bottom: 0; } - -ul.notifications { - float: right; - display: block; - margin-bottom: 7px; - padding: 0; - width: 100%; } - -.notifications li { - float: right; - margin: 3px; - width: 36px; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.3); } - -.notifications li:last-child { - margin-left: 0; } - -.notifications a { - display: block; - text-align: center; - text-decoration: none; - text-transform: uppercase; - padding: 9px 8px; } - -.tabbed_notifications .text { - padding: 5px 15px; - height: 140px; - border-radius: 7px; - box-shadow: 6px 6px 6px rgba(0, 0, 0, 0.3); } - -.tabbed_notifications div p { - display: inline-block; } - -.tabbed_notifications h2 { - font-weight: bold; - text-transform: uppercase; - width: 80%; - float: left; - height: 20px; - text-overflow: ellipsis; - overflow: hidden; - display: block; } - -.tabbed_notifications .close { - padding: 5px; - color: #E9EDEF; - float: right; - opacity: 1; } - -/** /PNotify **/ -/** FullCalendar **/ -.fc-state-default { - background: #f5f5f5; - color: #73879C; } - -.fc-state-down, -.fc-state-active { - color: #333; - background: #ccc; } - -/** /FullCalendar **/ -/** Dropzone.js **/ -.dropzone { - min-height: 300px; - border: 1px solid #e5e5e5; } - -/** /Dropzone.js **/ diff --git a/build/css/custom.min.css b/build/css/custom.min.css deleted file mode 100644 index 6ca9d339fbaa412ae3bb6923eec2a8fcf3216955..0000000000000000000000000000000000000000 --- a/build/css/custom.min.css +++ /dev/null @@ -1,9 +0,0 @@ -.daterangepicker .ranges li{color:#73879C}.daterangepicker .ranges li.active,.daterangepicker .ranges li:hover{background:#536A7F;border:1px solid #536A7F;color:#fff}.daterangepicker .input-mini{background-color:#eee;border:1px solid #ccc;box-shadow:none !important}.daterangepicker .input-mini.active{border:1px solid #ccc}.daterangepicker select.monthselect,.daterangepicker select.yearselect,.daterangepicker select.hourselect,.daterangepicker select.minuteselect,.daterangepicker select.secondselect,.daterangepicker select.ampmselect{font-size:12px;padding:1px;height:auto;margin:0;cursor:default;height:30px;border:1px solid #ADB2B5;line-height:30px;border-radius:0px !important}.daterangepicker select.monthselect{margin-right:2%}.daterangepicker td.in-range{background:#E4E7EA;color:#73879C}.daterangepicker td.active,.daterangepicker td.active:hover{background-color:#536A7F;color:#fff}.daterangepicker th.available:hover{background:#eee;color:#34495E}.daterangepicker:before,.daterangepicker:after{content:none}.daterangepicker .calendar.single{margin:0 0 4px 0}.daterangepicker .calendar.single .calendar-table{width:224px;padding:0 0 4px 0 !important}.daterangepicker .calendar.single .calendar-table thead tr:first-child th{padding:8px 5px}.daterangepicker .calendar.single .calendar-table thead th{border-radius:0}.daterangepicker.picker_1{color:#fff;background:#34495E}.daterangepicker.picker_1 .calendar-table{background:#34495E}.daterangepicker.picker_1 .calendar-table thead tr{background:#213345}.daterangepicker.picker_1 .calendar-table thead tr:first-child{background:#1ABB9C}.daterangepicker.picker_1 .calendar-table td.off{background:#34495E;color:#999}.daterangepicker.picker_1 .calendar-table td.available:hover{color:#34495E}.daterangepicker.picker_2 .calendar-table thead tr{color:#1ABB9C}.daterangepicker.picker_2 .calendar-table thead tr:first-child{color:#73879C}.daterangepicker.picker_3 .calendar-table thead tr:first-child{color:#fff;background:#1ABB9C}.daterangepicker.picker_4 .calendar-table thead tr:first-child{color:#fff;background:#34495E}.daterangepicker.picker_4 .calendar-table td,.daterangepicker.picker_4 .calendar-table td.off{background:#ECF0F1;border:1px solid #fff;border-radius:0}.daterangepicker.picker_4 .calendar-table td.active{background:#34495E}.calendar-exibit .show-calendar{float:none;display:block;position:relative;background-color:#fff;border:1px solid #ccc;margin-bottom:20px;border:1px solid rgba(0,0,0,0.15);overflow:hidden}.calendar-exibit .show-calendar .calendar{margin:0 0 4px 0}.calendar-exibit .show-calendar.picker_1{background:#34495E}.calendar-exibit .calendar-table{padding:0 0 4px 0} - -.left_col{background:#2A3F54}.nav-sm .container.body .col-md-3.left_col{min-height:100%;width:70px;padding:0;z-index:9999;position:absolute}.nav-sm .container.body .col-md-3.left_col.menu_fixed{position:fixed;height:100%}.nav-sm .container.body .col-md-3.left_col .mCSB_container,.nav-sm .container.body .col-md-3.left_col .mCustomScrollBox{overflow:visible}.nav-sm .hidden-small{visibility:hidden}.nav-sm .container.body .right_col{padding:10px 20px;margin-left:70px;z-index:2}.nav-sm .navbar.nav_title{width:70px}.nav-sm .navbar.nav_title a span{display:none}.nav-sm .navbar.nav_title a i{font-size:27px;margin:13px 0 0 3px}.site_title i{border:1px solid #EAEAEA;padding:5px 6px;border-radius:50%}.nav-sm .main_container .top_nav{display:block;margin-left:70px;z-index:2}.nav-sm .nav.side-menu li a{text-align:center !important;font-weight:400;font-size:10px;padding:10px 5px}.nav-sm .nav.child_menu li.active,.nav-sm .nav.side-menu li.active-sm{border-right:5px solid #1ABB9C}.nav-sm ul.nav.child_menu ul,.nav-sm .nav.side-menu li.active-sm ul ul{position:static;width:200px;background:none}.nav-sm>.nav.side-menu>li.active-sm>a{color:#1ABB9C !important}.nav-sm .nav.side-menu li a i.toggle-up{display:none !important}.nav-sm .nav.side-menu li a i{font-size:25px !important;text-align:center;width:100% !important;margin-bottom:5px}.nav-sm ul.nav.child_menu{left:100%;position:absolute;top:0;width:210px;z-index:4000;background:#3E5367;display:none}.nav-sm ul.nav.child_menu li{padding:0 10px}.nav-sm ul.nav.child_menu li a{text-align:left !important}.nav-sm .profile{display:none}.menu_section{margin-bottom:35px}.menu_section h3{padding-left:23px;color:#fff;text-transform:uppercase;letter-spacing:.5px;font-weight:bold;font-size:11px;margin-bottom:0;margin-top:0;text-shadow:1px 1px #000}.menu_section>ul{margin-top:10px}.profile_pic{width:35%;float:left}.img-circle.profile_img{width:70%;background:#fff;margin-left:15%;z-index:1000;position:inherit;margin-top:20px;border:1px solid rgba(52,73,94,0.44);padding:4px}.profile_info{padding:25px 10px 10px;width:65%;float:left}.profile_info span{font-size:13px;line-height:30px;color:#BAB8B8}.profile_info h2{font-size:14px;color:#ECF0F1;margin:0;font-weight:300}.profile.img_2{text-align:center}.profile.img_2 .profile_pic{width:100%}.profile.img_2 .profile_pic .img-circle.profile_img{width:50%;margin:10px 0 0}.profile.img_2 .profile_info{padding:15px 10px 0;width:100%;margin-bottom:10px;float:left}.main_menu span.fa{float:right;text-align:center;margin-top:5px;font-size:10px;min-width:inherit;color:#C4CFDA}.active a span.fa{text-align:right !important;margin-right:4px}.nav-sm .menu_section{margin:0}.nav-sm span.fa,.nav-sm .menu_section h3{display:none}.nav-sm li li span.fa{display:inline-block}.nav_menu{float:left;background:#EDEDED;border-bottom:1px solid #D9DEE4;margin-bottom:10px;width:100%;position:relative}@media (min-width: 480px){.nav_menu{position:static}}.nav-md .container.body .col-md-3.left_col{min-height:100%;width:230px;padding:0;position:absolute;display:-ms-flexbox;display:flex;z-index:1}.nav-md .container.body .col-md-3.left_col.menu_fixed{height:100%;position:fixed}body .container.body .right_col{background:#F7F7F7}.nav-md .container.body .right_col{padding:10px 20px 0;margin-left:230px}.nav_title{width:230px;float:left;background:#2A3F54;border-radius:0;height:57px}@media (max-width: 991px){.nav-md .container.body .right_col,.nav-md .container.body .top_nav{width:100%;margin:0}.nav-md .container.body .col-md-3.left_col{display:none}.nav-md .container.body .right_col{width:100%;padding-right:0}.right_col{padding:10px !important}}@media (max-width: 1200px){.x_title h2{width:62%;font-size:17px}.tile,.graph{zoom:85%;height:inherit}}@media (max-width: 1270px) and (min-width: 192px){.x_title h2 small{display:none}}.left_col .mCSB_scrollTools{width:6px}.left_col .mCSB_dragger{max-height:400px !important}.blue{color:#3498DB}.purple{color:#9B59B6}.green{color:#1ABB9C}.aero{color:#9CC2CB}.red{color:#E74C3C}.dark{color:#34495E}.border-blue{border-color:#3498DB !important}.border-purple{border-color:#9B59B6 !important}.border-green{border-color:#1ABB9C !important}.border-aero{border-color:#9CC2CB !important}.border-red{border-color:#E74C3C !important}.border-dark{border-color:#34495E !important}.bg-white{background:#fff !important;border:1px solid #fff !important;color:#73879C}.bg-green{background:#1ABB9C !important;border:1px solid #1ABB9C !important;color:#fff}.bg-red{background:#E74C3C !important;border:1px solid #E74C3C !important;color:#fff}.bg-blue{background:#3498DB !important;border:1px solid #3498DB !important;color:#fff}.bg-orange{background:#F39C12 !important;border:1px solid #F39C12 !important;color:#fff}.bg-purple{background:#9B59B6 !important;border:1px solid #9B59B6 !important;color:#fff}.bg-blue-sky{background:#50C1CF !important;border:1px solid #50C1CF !important;color:#fff}.container{width:100%;padding:0}.navbar-nav>li>a,.navbar-brand,.navbar-nav>li>a{color:#fff !important}.top_nav .nav>li>a:focus,.top_nav .nav>li>a:hover,.top_nav .nav .open>a,.top_nav .nav .open>a:focus,.top_nav .nav .open>a:hover{background:#D9DEE4}body{color:#73879C;background:#2A3F54;font-family:"Helvetica Neue", Roboto, Arial, "Droid Sans", sans-serif;font-size:13px;font-weight:400;line-height:1.471}.main_container .top_nav{display:block;margin-left:230px}.no-padding{padding:0 !important}.page-title{width:100%;height:65px;padding:10px 0}.page-title .title_left{width:45%;float:left;display:block}.page-title .title_left h3{margin:9px 0}.page-title .title_right{width:55%;float:left;display:block}.page-title .title_right .pull-right{margin:10px 0}.fixed_height_320{height:320px}.fixed_height_390{height:390px}.fixed_height_200{height:200px}.overflow_hidden{overflow:hidden}.progress-bar-dark{background-color:#34495E !important}.progress-bar-gray{background-color:#BDC3C7 !important}table.no-margin .progress{margin-bottom:0}.main_content{padding:10px 20px}.col-md-55{width:50%;margin-bottom:10px}@media (min-width: 768px){.col-md-55{width:20%}}@media (min-width: 992px){.col-md-55{width:20%}}@media (min-width: 1200px){.col-md-55{width:20%}}@media (min-width: 192px) and (max-width: 1270px){table.tile_info span.right{margin-right:7px;float:left}}.center-margin{margin:0 auto;float:none !important}.col-md-55,.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;float:left;padding-right:10px;padding-left:10px}.row{margin-right:-10px;margin-left:-10px}.grid_slider .col-md-6{padding:0 40px}h1,.h1,h2,.h2,h3,.h3{margin-top:10px;margin-bottom:10px}a{color:#5A738E;text-decoration:none}a,a:visited,a:focus,a:active,:visited,:focus,:active,.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:0}a:hover,a:focus{text-decoration:none}.navbar{margin-bottom:0}.navbar-header{background:#34495E}.navbar-right{margin-right:0}.top_nav .navbar-right{margin:0;width:70%;float:right}.top_nav .navbar-right li{display:inline-block;float:right;position:static}@media (min-width: 480px){.top_nav .navbar-right li{position:relative}}.top_nav .dropdown-menu li{width:100%}.top_nav .dropdown-menu li a{width:100%;padding:12px 20px}.top_nav li a i{font-size:15px}.navbar-static-top{position:fixed;top:0;width:100%}.sidebar-header{border-bottom:0;margin-top:46px}.sidebar-header:first-of-type{margin-top:0}.nav.side-menu>li{position:relative;display:block;cursor:pointer}.nav.side-menu>li>a{margin-bottom:6px}.nav.side-menu>li>a:hover{color:#F2F5F7 !important}.nav.side-menu>li>a:hover,.nav>li>a:focus{text-decoration:none;background:transparent}.nav.child_menu{display:none}.nav.child_menu li:hover,.nav.child_menu li.active{background-color:rgba(255,255,255,0.06)}.nav.child_menu li{padding-left:36px}.nav-md ul.nav.child_menu li:before{background:#425668;bottom:auto;content:"";height:8px;left:23px;margin-top:15px;position:absolute;right:auto;width:8px;z-index:1;border-radius:50%}.nav-md ul.nav.child_menu li:after{border-left:1px solid #425668;bottom:0;content:"";left:27px;position:absolute;top:0}.nav.side-menu>li>a,.nav.child_menu>li>a{color:#E7E7E7;font-weight:500}.nav.child_menu li li:hover,.nav.child_menu li li.active{background:none}.nav.child_menu li li a:hover,.nav.child_menu li li a.active{color:#fff}.nav>li>a{position:relative;display:block;padding:13px 15px 12px}.nav.side-menu>li.current-page,.nav.side-menu>li.active{border-right:5px solid #1ABB9C}.nav li.current-page{background:rgba(255,255,255,0.05)}.nav li li li.current-page{background:none}.nav li li.current-page a{color:#fff}.nav.side-menu>li.active>a{text-shadow:rgba(0,0,0,0.25) 0 -1px 0;background:linear-gradient(#334556, #2C4257),#2A3F54;box-shadow:rgba(0,0,0,0.25) 0 1px 0,inset rgba(255,255,255,0.16) 0 1px 0}.navbar-brand,.navbar-nav>li>a{font-weight:500;color:#ECF0F1 !important;margin-left:0 !important;line-height:32px}.site_title{text-overflow:ellipsis;overflow:hidden;font-weight:400;font-size:22px;width:100%;color:#ECF0F1 !important;margin-left:0 !important;line-height:59px;display:block;height:55px;margin:0;padding-left:10px}.site_title:hover,.site_title:focus{text-decoration:none}.nav.navbar-nav>li>a{color:#515356 !important}.nav.top_menu>li>a{position:relative;display:block;padding:10px 15px;color:#34495E !important}.nav>li>a:hover,.nav>li>a:focus{background-color:transparent}.top_search{padding:0}.top_search .form-control{border-right:0;box-shadow:inset 0 1px 0px rgba(0,0,0,0.075);border-radius:25px 0px 0px 25px;padding-left:20px;border:1px solid rgba(221,226,232,0.49)}.top_search .form-control:focus{border:1px solid rgba(221,226,232,0.49);border-right:0}.top_search .input-group-btn button{border-radius:0px 25px 25px 0px;border:1px solid rgba(221,226,232,0.49);border-left:0;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);color:#93A2B2;margin-bottom:0 !important}.toggle{float:left;margin:0;padding-top:16px;width:70px}.toggle a{padding:15px 15px 0;margin:0;cursor:pointer}.toggle a i{font-size:26px}.nav.child_menu>li>a{color:rgba(255,255,255,0.75);font-size:12px;padding:9px}.panel_toolbox{float:right;min-width:70px}.panel_toolbox>li{float:left;cursor:pointer}.panel_toolbox>li>a{padding:5px;color:#C5C7CB;font-size:14px}.panel_toolbox>li>a:hover{background:#F5F7FA}.line_30{line-height:30px}.main_menu_side{padding:0}.bs-docs-sidebar .nav>li>a{display:block;padding:4px 6px}footer{background:#fff;padding:15px 20px;display:block}.nav-sm footer{margin-left:70px}.footer_fixed footer{position:fixed;left:0px;bottom:0px;width:100%}@media (min-width: 768px){.footer_fixed footer{margin-left:0}}@media (min-width: 768px){.footer_fixed .nav-sm footer{margin-left:0}}.tile-stats.sparkline{padding:10px;text-align:center}.jqstooltip{background:#34495E !important;width:30px !important;height:22px !important;text-decoration:none}.tooltip{display:block !important}.tiles{border-top:1px solid #ccc;margin-top:15px;padding-top:5px;margin-bottom:0}.tile{overflow:hidden}.top_tiles{margin-bottom:0}.top_tiles .tile h2{font-size:30px;line-height:30px;margin:3px 0 7px;font-weight:bold}article.media{width:100%}*,*:before,*:after{box-sizing:border-box}#integration-list{width:100%;margin:0 auto;display:table}#integration-list ul{padding:0;margin:20px 0;color:#555}#integration-list ul>li{list-style:none;border-top:1px solid #ddd;display:block;padding:15px;overflow:hidden}#integration-list ul:last-child{border-bottom:1px solid #ddd}#integration-list ul>li:hover{background:#efefef}.expand{display:block;text-decoration:none;color:#555;cursor:pointer}.expand h2{width:85%;float:left}h2{font-size:18px;font-weight:400}#left,#right{display:table}#sup{display:table-cell;vertical-align:middle;width:80%}.detail a{text-decoration:none;color:#C0392B;border:1px solid #C0392B;padding:6px 10px 5px;font-size:13px;margin-right:7px}.detail{margin:10px 0 10px 0px;display:none;line-height:22px;height:150px}.detail span{margin:0}.right-arrow{width:10px;float:right;font-weight:bold;font-size:20px}.accordion .panel{margin-bottom:5px;border-radius:0;border-bottom:1px solid #efefef}.accordion .panel-heading{background:#F2F5F7;padding:13px;width:100%;display:block}.accordion .panel:hover{background:#F2F5F7}.x_panel{position:relative;width:100%;margin-bottom:10px;padding:10px 17px;display:inline-block;background:#fff;border:1px solid #E6E9ED;-webkit-column-break-inside:avoid;-moz-column-break-inside:avoid;column-break-inside:avoid;opacity:1;transition:all .2s ease}.x_title{border-bottom:2px solid #E6E9ED;padding:1px 5px 6px;margin-bottom:10px}.x_title .filter{width:40%;float:right}.x_title h2{margin:5px 0 6px;float:left;display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.x_title h2 small{margin-left:10px}.x_title span{color:#BDBDBD}.x_content{padding:0 5px 6px;position:relative;width:100%;float:left;clear:both;margin-top:5px}.x_content h4{font-size:16px;font-weight:500}legend{padding-bottom:7px}.demo-placeholder{height:280px}.profile_details:nth-child(3n){clear:both}.profile_details .profile_view{display:inline-block;padding:10px 0 0;background:#fff}.profile_details .profile_view .divider{border-top:1px solid #e5e5e5;padding-top:5px;margin-top:5px}.profile_details .profile_view .ratings{margin-bottom:0}.profile_details .profile_view .bottom{background:#F2F5F7;padding:9px 0;border-top:1px solid #E6E9ED}.profile_details .profile_view .left{margin-top:20px}.profile_details .profile_view .left p{margin-bottom:3px}.profile_details .profile_view .right{margin-top:0px;padding:10px}.profile_details .profile_view .img-circle{border:1px solid #E6E9ED;padding:2px}.profile_details .profile_view h2{margin:5px 0}.profile_details .profile_view .ratings{text-align:left;font-size:16px}.profile_details .profile_view .brief{margin:0;font-weight:300}.profile_details .profile_left{background:white}.pagination.pagination-split li{display:inline-block;margin-right:3px}.pagination.pagination-split li a{border-radius:4px;color:#768399;-moz-border-radius:4px;-webkit-border-radius:4px}table.tile h3,table.tile h4,table.tile span{font-weight:bold;vertical-align:middle !important}table.tile th,table.tile td{text-align:center}table.tile th{border-bottom:1px solid #E6ECEE}table.tile td{padding:5px 0}table.tile td ul{text-align:left;padding-left:0}table.tile td ul li{list-style:none;width:100%}table.tile td ul li a{width:100%}table.tile td ul li a big{right:0;float:right;margin-right:13px}table.tile_info{width:100%}table.tile_info td{text-align:left;padding:1px;font-size:15px}table.tile_info td p{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0;line-height:28px}table.tile_info td i{margin-right:8px;font-size:17px;float:left;width:18px;line-height:28px}table.tile_info td:first-child{width:83%}td span{line-height:28px}.sidebar-widget{overflow:hidden}.error-number{font-size:90px;line-height:90px;margin:20px 0}.col-middle{margin-top:5%}.mid_center{width:370px;margin:0 auto;text-align:center;padding:10px 20px}h3.degrees{font-size:22px;font-weight:400;text-align:center}.degrees:after{content:"o";position:relative;top:-12px;font-size:13px;font-weight:300}.daily-weather .day{font-size:14px;border-top:2px solid rgba(115,135,156,0.36);text-align:center;border-bottom:2px solid rgba(115,135,156,0.36);padding:5px 0}.weather-days .col-sm-2{overflow:hidden;width:16.66666667%}.weather .row{margin-bottom:0}.bulk-actions{display:none}table.countries_list{width:100%}table.countries_list td{padding:0 10px;line-height:30px;border-top:1px solid #eeeeee}.dataTables_paginate a{padding:6px 9px !important;background:#ddd !important;border-color:#ddd !important}.paging_full_numbers a.paginate_active{background-color:rgba(38,185,154,0.59) !important;border-color:rgba(38,185,154,0.59) !important}button.DTTT_button,div.DTTT_button,a.DTTT_button{border:1px solid #E7E7E7 !important;background:#E7E7E7 !important;box-shadow:none !important}table.jambo_table{border:1px solid rgba(221,221,221,0.78)}table.jambo_table thead{background:rgba(52,73,94,0.94);color:#ECF0F1}table.jambo_table tbody tr:hover td{background:rgba(38,185,154,0.07);border-top:1px solid rgba(38,185,154,0.11);border-bottom:1px solid rgba(38,185,154,0.11)}table.jambo_table tbody tr.selected{background:rgba(38,185,154,0.16)}table.jambo_table tbody tr.selected td{border-top:1px solid rgba(38,185,154,0.4);border-bottom:1px solid rgba(38,185,154,0.4)}.dataTables_paginate a{background:#ff0000}.dataTables_wrapper{position:relative;clear:both;zoom:1}.dataTables_processing{position:absolute;top:50%;left:50%;width:250px;height:30px;margin-left:-125px;margin-top:-15px;padding:14px 0 2px 0;border:1px solid #ddd;text-align:center;color:#999;font-size:14px;background-color:white}.dataTables_length{width:40%;float:left}.dataTables_filter{width:50%;float:right;text-align:right}.dataTables_info{width:60%;float:left}.dataTables_paginate{float:right;text-align:right}table.dataTable th.focus,table.dataTable td.focus{outline:2px solid #1ABB9C !important;outline-offset:-1px}table.display{margin:0 auto;clear:both;width:100%}table.display thead th{padding:8px 18px 8px 10px;border-bottom:1px solid black;font-weight:bold;cursor:pointer}table.display tfoot th{padding:3px 18px 3px 10px;border-top:1px solid black;font-weight:bold}table.display tr.heading2 td{border-bottom:1px solid #aaa}table.display td{padding:3px 10px}table.display td.center{text-align:center}table.display thead th:active,table.display thead td:active{outline:none}.dataTables_scroll{clear:both}.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.top .dataTables_info{float:none}.clear{clear:both}.dataTables_empty{text-align:center}tfoot input{margin:0.5em 0;width:100%;color:#444}tfoot input.search_init{color:#999}td.group{background-color:#d1cfd0;border-bottom:2px solid #A19B9E;border-top:2px solid #A19B9E}td.details{background-color:#d1cfd0;border:2px solid #A19B9E}.example_alt_pagination div.dataTables_info{width:40%}.paging_full_numbers{width:400px;height:22px;line-height:22px}.paging_full_numbers a:active{outline:none}.paging_full_numbers a:hover{text-decoration:none}.paging_full_numbers a.paginate_button,.paging_full_numbers a.paginate_active{border:1px solid #aaa;-webkit-border-radius:5px;-moz-border-radius:5px;padding:2px 5px;margin:0 3px;cursor:pointer}.paging_full_numbers a.paginate_button{background-color:#ddd}.paging_full_numbers a.paginate_button:hover{background-color:#ccc;text-decoration:none !important}.paging_full_numbers a.paginate_active{background-color:#99B3FF}table.display tr.even.row_selected td{background-color:#B0BED9}table.display tr.odd.row_selected td{background-color:#9FAFD1}div.box{height:100px;padding:10px;overflow:auto;border:1px solid #8080FF;background-color:#E5E5FF}ul.msg_list li{background:#f7f7f7;padding:5px;display:-ms-flexbox;display:flex;margin:6px 6px 0;width:96% !important}ul.msg_list li:last-child{margin-bottom:6px;padding:10px}ul.msg_list li a{padding:3px 5px !important}ul.msg_list li a .image img{border-radius:2px 2px 2px 2px;-webkit-border-radius:2px 2px 2px 2px;float:left;margin-right:10px;width:11%}ul.msg_list li a .time{font-size:11px;font-style:italic;font-weight:bold;position:absolute;right:35px}ul.msg_list li a .message{display:block !important;font-size:11px}.dropdown-menu.msg_list span{white-space:normal}.dropdown-menu{border:medium none;box-shadow:none;display:none;float:left;font-size:12px;left:0;list-style:none outside none;padding:0;position:absolute;text-shadow:none;top:100%;z-index:9998;border:1px solid #D9DEE4;border-top-left-radius:0;border-top-right-radius:0}.dropdown-menu>li>a{color:#5A738E}.navbar-nav .open .dropdown-menu{position:absolute;background:#fff;margin-top:0;border:1px solid #D9DEE4;-webkit-box-shadow:none;right:0;left:auto;width:220px}.navbar-nav .open .dropdown-menu.msg_list{width:300px}.info-number .badge{font-size:10px;font-weight:normal;line-height:13px;padding:2px 6px;position:absolute;right:2px;top:8px}ul.to_do{padding:0}ul.to_do li{background:#f3f3f3;border-radius:3px;position:relative;padding:7px;margin-bottom:5px;list-style:none}ul.to_do p{margin:0}.dashboard-widget{background:#f6f6f6;border-top:5px solid #79C3DF;border-radius:3px;padding:5px 10px 10px}.dashboard-widget .dashboard-widget-title{font-weight:normal;border-bottom:1px solid #c1cdcd;margin:0 0 10px 0;padding-bottom:5px;padding-left:40px;line-height:30px}.dashboard-widget .dashboard-widget-title i{font-size:100%;margin-left:-35px;margin-right:10px;color:#33a1c9;padding:3px 6px;border:1px solid #abd9ea;border-radius:5px;background:#fff}ul.quick-list{width:45%;padding-left:0;display:inline-block}ul.quick-list li{padding-left:10px;list-style:none;margin:0;padding-bottom:6px;padding-top:4px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}ul.quick-list li i{padding-right:10px;color:#757679}.dashboard-widget-content{padding-top:9px}.dashboard-widget-content .sidebar-widget{width:50%;display:inline-block;vertical-align:top;background:#fff;border:1px solid #abd9ea;border-radius:5px;text-align:center;float:right;padding:2px;margin-top:10px}.widget_summary{width:100%;display:-ms-inline-flexbox;display:inline-flex}.widget_summary .w_left{float:left;text-align:left}.widget_summary .w_center{float:left}.widget_summary .w_right{float:left;text-align:right}.widget_summary .w_right span{font-size:20px}.w_20{width:20%}.w_25{width:25%}.w_55{width:55%}h5.graph_title{text-align:left;margin-left:10px}h5.graph_title i{margin-right:10px;font-size:17px}span.right{float:right;font-size:14px !important}.tile_info a{text-overflow:ellipsis}.sidebar-footer{bottom:0px;clear:both;display:block;padding:5px 0 0 0;position:fixed;width:230px;background:#2A3F54}.sidebar-footer a{padding:7px 0 3px;text-align:center;width:25%;font-size:17px;display:block;float:left;background:#172D44}.sidebar-footer a:hover{background:#425567}.tile_count{margin-bottom:20px;margin-top:20px}.tile_count .tile_stats_count{border-bottom:1px solid #D9DEE4;padding:0 10px 0 20px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative}@media (min-width: 992px){footer{margin-left:230px}}@media (min-width: 992px){.tile_count .tile_stats_count{margin-bottom:10px;border-bottom:0;padding-bottom:10px}}.tile_count .tile_stats_count:before{content:"";position:absolute;left:0;height:65px;border-left:2px solid #ADB2B5;margin-top:10px}@media (min-width: 992px){.tile_count .tile_stats_count:first-child:before{border-left:0}}.tile_count .tile_stats_count .count{font-size:30px;line-height:47px;font-weight:600}@media (min-width: 768px){.tile_count .tile_stats_count .count{font-size:40px}}@media (min-width: 992px) and (max-width: 1100px){.tile_count .tile_stats_count .count{font-size:30px}}.tile_count .tile_stats_count span{font-size:12px}@media (min-width: 768px){.tile_count .tile_stats_count span{font-size:13px}}.tile_count .tile_stats_count .count_bottom i{width:12px}.dashboard_graph{background:#fff;padding:7px 10px}.dashboard_graph .col-md-9,.dashboard_graph .col-md-3{padding:0}a.user-profile{color:#5E6974 !important}.user-profile img{width:29px;height:29px;border-radius:50%;margin-right:10px}ul.top_profiles{height:330px;width:100%}ul.top_profiles li{margin:0;padding:3px 5px}ul.top_profiles li:nth-child(odd){background-color:#eee}.media .profile_thumb{border:1px solid;width:50px;height:50px;margin:5px 10px 5px 0;border-radius:50%;padding:9px 12px}.media .profile_thumb i{font-size:30px}.media .date{background:#ccc;width:52px;margin-right:10px;border-radius:10px;padding:5px}.media .date .month{margin:0;text-align:center;color:#fff}.media .date .day{text-align:center;color:#fff;font-size:27px;margin:0;line-height:27px;font-weight:bold}.event .media-body a.title{font-weight:bold}.event .media-body p{margin-bottom:0}h4.graph_title{margin:7px;text-align:center}.fontawesome-icon-list .fa-hover a:hover{background-color:#ddd;color:#fff;text-decoration:none}.fontawesome-icon-list .fa-hover a{display:block;line-height:32px;height:32px;padding-left:10px;border-radius:4px}.fontawesome-icon-list .fa-hover a:hover .fa{font-size:28px;vertical-align:-6px}.fontawesome-icon-list .fa-hover a .fa{width:32px;font-size:16px;display:inline-block;text-align:right;margin-right:10px}.main_menu .fa{width:26px;opacity:.99;display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;font-size:18px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.tile-stats{position:relative;display:block;margin-bottom:12px;border:1px solid #E4E4E4;-webkit-border-radius:5px;overflow:hidden;padding-bottom:5px;-webkit-background-clip:padding-box;-moz-border-radius:5px;-moz-background-clip:padding;border-radius:5px;background-clip:padding-box;background:#FFF;transition:all 300ms ease-in-out}.tile-stats:hover .icon i{animation-name:tansformAnimation;animation-duration:.5s;animation-iteration-count:1;color:rgba(58,58,58,0.41);animation-timing-function:ease;animation-fill-mode:forwards;-webkit-animation-name:tansformAnimation;-webkit-animation-duration:.5s;-webkit-animation-iteration-count:1;-webkit-animation-timing-function:ease;-webkit-animation-fill-mode:forwards;-moz-animation-name:tansformAnimation;-moz-animation-duration:.5s;-moz-animation-iteration-count:1;-moz-animation-timing-function:ease;-moz-animation-fill-mode:forwards}.tile-stats .icon{width:20px;height:20px;color:#BAB8B8;position:absolute;right:53px;top:22px;z-index:1}.tile-stats .icon i{margin:0;font-size:60px;line-height:0;vertical-align:bottom;padding:0}.tile-stats .count{font-size:38px;font-weight:bold;line-height:1.65857}.tile-stats .count,.tile-stats h3,.tile-stats p{position:relative;margin:0;margin-left:10px;z-index:5;padding:0}.tile-stats h3{color:#BAB8B8}.tile-stats p{margin-top:5px;font-size:12px}.tile-stats>.dash-box-footer{position:relative;text-align:center;margin-top:5px;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none}.tile-stats>.dash-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)}.tile-stats>.dash-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)}table.tile_info{padding:10px 15px}table.tile_info span.right{margin-right:0;float:right;position:absolute;right:4%}.tile:hover{text-decoration:none}.tile_header{border-bottom:transparent;padding:7px 15px;margin-bottom:15px;background:#E7E7E7}.tile_head h4{margin-top:0;margin-bottom:5px}.tiles-bottom{padding:5px 10px;margin-top:10px;background:rgba(194,194,194,0.3);text-align:left}a.star{color:#428bca !important}.mail_content{background:none repeat scroll 0 0 #FFFFFF;border-radius:4px;margin-top:20px;min-height:500px;padding:10px 11px;width:100%}.list-btn-mail{margin-bottom:15px}.list-btn-mail.active{border-bottom:1px solid #39B3D7;padding:0 0 14px}.list-btn-mail>i{float:left;font-size:18px;font-style:normal;width:33px}.list-btn-mail>.cn{background:none repeat scroll 0 0 #39B3D7;border-radius:12px;color:#FFFFFF;float:right;font-style:normal;padding:0 5px}.button-mail{margin:0 0 15px !important;text-align:left;width:100%}button,.buttons,.btn,.modal-footer .btn+.btn{margin-bottom:5px;margin-right:5px}.btn-group-vertical .btn,.btn-group .btn{margin-bottom:0;margin-right:0}.mail_list_column{border-left:1px solid #DBDBDB}.mail_view{border-left:1px solid #DBDBDB}.mail_list{width:100%;border-bottom:1px solid #DBDBDB;margin-bottom:2px;display:inline-block}.mail_list .left{width:5%;float:left;margin-right:3%}.mail_list .right{width:90%;float:left}.mail_list h3{font-size:15px;font-weight:bold;margin:0px 0 6px}.mail_list h3 small{float:right;color:#ADABAB;font-size:11px;line-height:20px}.mail_list .badge{padding:3px 6px;font-size:8px;background:#BAB7B7}@media (max-width: 767px){.mail_list{margin-bottom:5px;display:inline-block}}.mail_heading h4{font-size:18px;border-bottom:1px solid #ddd;padding-bottom:10px;margin-top:20px}.attachment{margin-top:30px}.attachment ul{width:100%;list-style:none;padding-left:0;display:inline-block;margin-bottom:30px}.attachment ul li{float:left;width:150px;margin-right:10px;margin-bottom:10px}.attachment ul li img{height:150px;border:1px solid #ddd;padding:5px;margin-bottom:10px}.attachment ul li span{float:right}.attachment .file-name{float:left}.attachment .links{width:100%;display:inline-block}.compose{padding:0;position:fixed;bottom:0;right:0;background:#fff;border:1px solid #D9DEE4;border-right:0;border-bottom:0;border-top-left-radius:5px;z-index:9999;display:none}.compose .compose-header{padding:5px;background:#169F85;color:#fff;border-top-left-radius:5px}.compose .compose-header .close{text-shadow:0 1px 0 #ffffff;line-height:.8}.compose .compose-body .editor.btn-toolbar{margin:0}.compose .compose-body .editor-wrapper{height:100%;min-height:50px;max-height:180px;border-radius:0;border-left:none;border-right:none;overflow:auto}.compose .compose-footer{padding:10px}.editor.btn-toolbar{zoom:1;background:#F7F7F7;margin:5px 2px;padding:3px 0;border:1px solid #EFEFEF}.input-group{margin-bottom:10px}.ln_solid{border-top:1px solid #e5e5e5;color:#ffffff;background-color:#ffffff;height:1px;margin:20px 0}span.section{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}.form-control{border-radius:0;width:100%}.form-horizontal .control-label{padding-top:8px}.form-control:focus{border-color:#CCD0D7;box-shadow:none !important}legend{font-size:18px;color:inherit}.form-horizontal .form-group{margin-right:0;margin-left:0}.form-control-feedback{margin-top:8px;height:23px;color:#bbb;line-height:24px;font-size:15px}.form-control-feedback.left{border-right:1px solid #ccc;left:13px}.form-control-feedback.right{border-left:1px solid #ccc;right:13px}.form-control.has-feedback-left{padding-left:45px}.form-control.has-feedback-right{padding-right:45px}.form-group{margin-bottom:10px}.validate{margin-top:10px}.invalid-form-error-message{margin-top:10px;padding:5px}.invalid-form-error-message.filled{border-left:2px solid #E74C3C}p.parsley-success{color:#468847;background-color:#DFF0D8;border:1px solid #D6E9C6}p.parsley-error{color:#B94A48;background-color:#F2DEDE;border:1px solid #EED3D7}ul.parsley-errors-list{list-style:none;color:#E74C3C;padding-left:0}input.parsley-error,textarea.parsley-error,select.parsley-error{background:#FAEDEC;border:1px solid #E85445}.btn-group .parsley-errors-list{display:none}.bad input,.bad select,.bad textarea{border:1px solid #CE5454;box-shadow:0 0 4px -2px #CE5454;position:relative;left:0;-moz-animation:.7s 1 shake linear;-webkit-animation:0.7s 1 shake linear}.item input,.item textarea{transition:0.42s}.item .alert{float:left;margin:0 0 0 20px;padding:3px 10px;color:#FFF;border-radius:3px 4px 4px 3px;background-color:#CE5454;max-width:170px;white-space:pre;position:relative;left:-15px;opacity:0;z-index:1;transition:0.15s ease-out}.item .alert::after{content:'';display:block;height:0;width:0;border-color:transparent #CE5454 transparent transparent;border-style:solid;border-width:11px 7px;position:absolute;left:-13px;top:1px}.item.bad .alert{left:0;opacity:1}.inl-bl{display:inline-block}.well .markup{background:#fff;color:#777;position:relative;padding:45px 15px 15px;margin:15px 0 0 0;background-color:#fff;border-radius:0 0 4px 4px;box-shadow:none}.well .markup::after{content:"Example";position:absolute;top:15px;left:15px;font-size:12px;font-weight:bold;color:#bbb;text-transform:uppercase;letter-spacing:1px}.autocomplete-suggestions{border:1px solid #e4e4e4;background:#F4F4F4;cursor:default;overflow:auto}.autocomplete-suggestion{padding:2px 5px;font-size:1.2em;white-space:nowrap;overflow:hidden}.autocomplete-selected{background:#f0f0f0}.autocomplete-suggestions strong{font-weight:normal;color:#3399ff;font-weight:bolder}.btn{border-radius:3px}a.btn-success,a.btn-primary,a.btn-warning,a.btn-danger{color:#fff}.btn-success{background:#26B99A;border:1px solid #169F85}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background:#169F85}.btn-dark{color:#E9EDEF;background-color:#4B5F71;border-color:#364B5F}.btn-dark:hover,.btn-dark:focus,.btn-dark:active,.btn-dark.active,.open .dropdown-toggle.btn-dark{color:#FFFFFF;background-color:#394D5F;border-color:#394D5F}.btn-round{border-radius:30px}.btn.btn-app{position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;box-shadow:none;border-radius:0;text-align:center;color:#666;border:1px solid #ddd;background-color:#fafafa;font-size:12px}.btn.btn-app>.fa,.btn.btn-app>.glyphicon,.btn.btn-app>.ion{font-size:20px;display:block}.btn.btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa}.btn.btn-app:active,.btn.btn-app:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.btn-app>.badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400}textarea{padding:10px;vertical-align:top;width:200px}textarea:focus{outline-style:solid;outline-width:2px}.btn_{display:inline-block;padding:3px 9px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f5f5f5;background-image:linear-gradient(to bottom, #fff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=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);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border:1px solid #cccccc;border-bottom-color:#b3b3b3;border-radius:4px;box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.bs-glyphicons{margin:0 -10px 20px;overflow:hidden}.bs-glyphicons-list{padding-left:0;list-style:none}.bs-glyphicons li{float:left;width:25%;height:115px;padding:10px;font-size:10px;line-height:1.4;text-align:center;background-color:#f9f9f9;border:1px solid #fff}.bs-glyphicons .glyphicon{margin-top:5px;margin-bottom:10px;font-size:24px}.bs-glyphicons .glyphicon-class{display:block;text-align:center;word-wrap:break-word}.bs-glyphicons li:hover{color:#fff;background-color:#1ABB9C}@media (min-width: 768px){.bs-glyphicons{margin-right:0;margin-left:0}.bs-glyphicons li{width:12.5%;font-size:12px}}.tagsinput{border:1px solid #CCC;background:#FFF;padding:6px 6px 0;width:300px;overflow-y:auto}span.tag{-moz-border-radius:2px;-webkit-border-radius:2px;display:block;float:left;padding:5px 9px;text-decoration:none;background:#1ABB9C;color:#F1F6F7;margin-right:5px;font-weight:500;margin-bottom:5px;font-family:helvetica}span.tag a{color:#F1F6F7 !important}.tagsinput span.tag a{font-weight:bold;color:#82ad2b;text-decoration:none;font-size:11px}.tagsinput input{width:80px;margin:0px;font-family:helvetica;font-size:13px;border:1px solid transparent;padding:3px;background:transparent;color:#000;outline:0px}.tagsinput div{display:block;float:left}.tags_clear{clear:both;width:100%;height:0px}.not_valid{background:#FBD8DB !important;color:#90111A !important}ul.bar_tabs{overflow:visible;background:#F5F7FA;height:25px;margin:21px 0 14px;padding-left:14px;position:relative;z-index:1;width:100%;border-bottom:1px solid #E6E9ED}ul.bar_tabs>li{border:1px solid #E6E9ED;color:#333 !important;margin-top:-17px;margin-left:8px;background:#fff;border-bottom:none;border-radius:4px 4px 0 0}ul.bar_tabs>li.active{border-right:6px solid #D3D6DA;border-top:0;margin-top:-15px}ul.bar_tabs>li a{padding:10px 17px;background:#F5F7FA;margin:0;border-top-right-radius:0}ul.bar_tabs>li a:hover{border:1px solid transparent}ul.bar_tabs>li.active a{border-bottom:none}ul.bar_tabs.right{padding-right:14px}ul.bar_tabs.right li{float:right}a:focus{outline:none}ul.timeline li{position:relative;border-bottom:1px solid #e8e8e8;clear:both}.timeline .block{margin:0;border-left:3px solid #e8e8e8;overflow:visible;padding:10px 15px;margin-left:105px}.timeline.widget{min-width:0;max-width:inherit}.timeline.widget .block{margin-left:5px}.timeline .tags{position:absolute;top:15px;left:0;width:84px}.timeline .tag{display:block;height:30px;font-size:13px;padding:8px}.timeline .tag span{display:block;overflow:hidden;width:100%;white-space:nowrap;text-overflow:ellipsis}.tag{line-height:1;background:#1ABB9C;color:#fff !important}.tag:after{content:" ";height:30px;width:0;position:absolute;left:100%;top:0;margin:0;pointer-events:none;border-top:14px solid transparent;border-bottom:14px solid transparent;border-left:11px solid #1ABB9C}.timeline h2.title{position:relative;font-size:16px;margin:0}.timeline h2.title:before{content:"";position:absolute;left:-23px;top:3px;display:block;width:14px;height:14px;border:3px solid #d2d3d2;border-radius:14px;background:#f9f9f9}.timeline .byline{padding:.25em 0}.byline{-webkit-font-smoothing:antialiased;font-style:italic;font-size:.9375em;line-height:1.3;color:#aab6aa}ul.social li{border:0}.social-sidebar,.social-body{float:right}.social-sidebar{background:#EDEDED;width:22%}.social-body{border:1px solid #ccc;width:78%}.thumb img{width:50px;height:50px;border-radius:50%}.chat .thumb img{width:27px;height:27px;border-radius:50%}.chat .status{float:left;margin:16px 0 0 -16px;font-size:14px;font-weight:bold;width:12px;height:12px;display:block;border:2px solid #FFF;z-index:12312;border-radius:50%}.chat .status.online{background:#1ABB9C}.chat .status.away{background:#F39C12}.chat .status.offline{background:#ccc}.chat .media-body{padding-top:5px}.dashboard_graph .x_title{padding:5px 5px 7px}.dashboard_graph .x_title h3{margin:0;font-weight:normal}.chart{position:relative;display:inline-block;width:110px;height:110px;margin-top:5px;margin-bottom:5px;text-align:center}.chart canvas{position:absolute;top:0;left:0}.percent{display:inline-block;line-height:110px;z-index:2;font-size:18px}.percent:after{content:'%';margin-left:0.1em;font-size:.8em}.angular{margin-top:100px}.angular .chart{margin-top:0}.widget{min-width:250px;max-width:310px}.widget_tally_box .btn-group button{text-align:center}.widget_tally_box .btn-group button{color:inherit;font-weight:500;background-color:#f5f5f5;border:1px solid #e7e7e7}ul.widget_tally,ul.widget_tally li{width:100%}ul.widget_tally li{padding:2px 10px;border-bottom:1px solid #ECECEC;padding-bottom:4px}ul.widget_tally .month{width:70%;float:left}ul.widget_tally .count{width:30%;float:left;text-align:right}.pie_bg{border-bottom:1px solid rgba(101,204,182,0.16);padding-bottom:15px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);padding-bottom:10px;box-shadow:0 4px 6px -6px #222}.widget_tally_box .flex{display:-ms-flexbox;display:flex}ul.widget_profile_box{width:100%;height:42px;padding:3px;background:#ececec;margin-top:40px;margin-left:1px}ul.widget_profile_box li:first-child{width:25%;float:left}ul.widget_profile_box li:first-child a{float:left}ul.widget_profile_box li:last-child{width:25%;float:right}ul.widget_profile_box li:last-child a{float:right}ul.widget_profile_box li a{font-size:22px;text-align:center;width:35px;height:35px;border:1px solid rgba(52,73,94,0.44);display:block;border-radius:50%;padding:0px}ul.widget_profile_box li a:hover{color:#1ABB9C !important;border:1px solid #26b99a}ul.widget_profile_box li .profile_img{width:85px;height:85px;margin:0;margin-top:-28px}.widget_tally_box p,.widget_tally_box span{text-align:center}.widget_tally_box .name{text-align:center;margin:25px}.widget_tally_box .name_title{text-align:center;margin:5px}.widget_tally_box ul.legend{margin:0}.widget_tally_box ul.legend p,.widget_tally_box ul.legend span{text-align:left}.widget_tally_box ul.legend li .icon{font-size:20px;float:left;width:14px}.widget_tally_box ul.legend li .name{font-size:14px;margin:5px 0 0 14px;text-overflow:ellipsis;float:left}.widget_tally_box ul.legend p{display:inline-block;margin:0}.widget_tally_box ul.verticle_bars li{height:140px;width:23%}.widget .verticle_bars li .progress.vertical.progress_wide{width:65%}ul.count2{width:100%;margin-left:1px;border:1px solid #ddd;border-left:0;border-right:0;padding:10px 0}ul.count2 li{width:30%;text-align:center}ul.count2 li h3{font-weight:400;margin:0}ul.count2 li span{font-weight:300}.divider{border-bottom:1px solid #ddd;margin:10px}.divider-dashed{border-top:1px dashed #e7eaec;background-color:#ffffff;height:1px;margin:10px 0}ul.messages{padding:0;list-style:none}ul.messages li,.tasks li{border-bottom:1px dotted #e6e6e6;padding:8px 0}ul.messages li img.avatar,img.avatar{height:32px;width:32px;float:left;display:inline-block;border-radius:2px;padding:2px;background:#f7f7f7;border:1px solid #e6e6e6}ul.messages li .message_date{float:right;text-align:right}ul.messages li .message_wrapper{margin-left:50px;margin-right:40px}ul.messages li .message_wrapper h4.heading{font-weight:600;margin:0;cursor:pointer;margin-bottom:10px;line-height:100%}ul.messages li .message_wrapper blockquote{padding:0px 10px;margin:0;border-left:5px solid #eee}ul.user_data li{margin-bottom:6px}ul.user_data li p{margin-bottom:0}ul.user_data li .progress{width:90%}.project_progress .progress{margin-bottom:3px !important;margin-top:5px}.projects .list-inline{margin:0}.profile_title{background:#F5F7FA;border:0;padding:7px 0;display:-ms-flexbox;display:flex}ul.stats-overview{border-bottom:1px solid #e8e8e8;padding-bottom:10px;margin-bottom:10px}ul.stats-overview li{display:inline-block;text-align:center;padding:0 15px;width:30%;font-size:14px;border-right:1px solid #e8e8e8}ul.stats-overview li:last-child{border-right:0}ul.stats-overview li .name{font-size:12px}ul.stats-overview li .value{font-size:14px;font-weight:bold;display:block}ul.stats-overview li:first-child{padding-left:0}ul.project_files li{margin-bottom:5px}ul.project_files li a i{width:20px}.project_detail p{margin-bottom:10px}.project_detail p.title{font-weight:bold;margin-bottom:0}.avatar img{border-radius:50%;max-width:45px}.pricing{background:#fff}.pricing .title{background:#1ABB9C;height:110px;color:#fff;padding:15px 0 0;text-align:center}.pricing .title h2{text-transform:capitalize;font-size:18px;border-radius:5px 5px 0 0;margin:0;font-weight:400}.pricing .title h1{font-size:30px;margin:12px}.pricing .title span{background:rgba(51,51,51,0.28);padding:2px 5px}.pricing_features{background:#FAFAFA;padding:20px 15px;min-height:230px;font-size:13.5px}.pricing_features ul li{margin-top:10px}.pricing_footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;text-align:center;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.pricing_footer p{font-size:13px;padding:10px 0 2px;display:block}.ui-ribbon-container{position:relative}.ui-ribbon-container .ui-ribbon-wrapper{position:absolute;overflow:hidden;width:85px;height:88px;top:-3px;right:-3px}.ui-ribbon-container.ui-ribbon-primary .ui-ribbon{background-color:#5b90bf}.ui-ribbon-container .ui-ribbon{position:relative;display:block;text-align:center;font-size:15px;font-weight:700;color:#fff;transform:rotate(45deg);padding:7px 0;left:-5px;top:15px;width:120px;line-height:20px;background-color:#555;box-shadow:0 0 3px rgba(0,0,0,0.3)}.ui-ribbon-container.ui-ribbon-primary .ui-ribbon:after,.ui-ribbon-container.ui-ribbon-primary .ui-ribbon:before{border-top:2px solid #5b90bf}.ui-ribbon-container .ui-ribbon:before{left:0;bottom:-1px}.ui-ribbon-container .ui-ribbon:before{right:0}.ui-ribbon-container .ui-ribbon:after,.ui-ribbon-container .ui-ribbon:before{position:absolute;content:" ";line-height:0;border-top:2px solid #555;border-left:2px solid transparent;border-right:2px solid transparent}.thumbnail .image{height:120px;overflow:hidden}.caption{padding:9px 5px;background:#F7F7F7}.caption p{margin-bottom:5px}.thumbnail{height:190px;overflow:hidden}.view{overflow:hidden;position:relative;text-align:center;box-shadow:1px 1px 2px #e6e6e6;cursor:default}.view .mask,.view .content{position:absolute;width:100%;overflow:hidden;top:0;left:0}.view img{display:block;position:relative}.view .tools{text-transform:uppercase;color:#fff;text-align:center;position:relative;font-size:17px;padding:3px;background:rgba(0,0,0,0.35);margin:43px 0 0 0}.mask.no-caption .tools{margin:90px 0 0 0}.view .tools a{display:inline-block;color:#FFF;font-size:18px;font-weight:400;padding:0 4px}.view p{font-family:Georgia, serif;font-style:italic;font-size:12px;position:relative;color:#fff;padding:10px 20px 20px;text-align:center}.view a.info{display:inline-block;text-decoration:none;padding:7px 14px;background:#000;color:#fff;text-transform:uppercase;box-shadow:0 0 1px #000}.view-first img{transition:all 0.2s linear}.view-first .mask{opacity:0;background-color:rgba(0,0,0,0.5);transition:all 0.4s ease-in-out}.view-first .tools{transform:translateY(-100px);opacity:0;transition:all 0.2s ease-in-out}.view-first p{transform:translateY(100px);opacity:0;transition:all 0.2s linear}.view-first:hover img{transform:scale(1.1)}.view-first:hover .mask{opacity:1}.view-first:hover .tools,.view-first:hover p{opacity:1;transform:translateY(0px)}.view-first:hover p{transition-delay:0.1s}/*! - * bootstrap-vertical-tabs - v1.2.1 - * https://dbtek.github.io/bootstrap-vertical-tabs - * 2014-11-07 - * Copyright (c) 2014 İsmail Demirbilek - * License: MIT - */.tabs-left,.tabs-right{border-bottom:none;padding-top:2px}.tabs-left{border-right:1px solid #F7F7F7}.tabs-right{border-left:1px solid #F7F7F7}.tabs-left>li,.tabs-right>li{float:none;margin-bottom:2px}.tabs-left>li{margin-right:-1px}.tabs-right>li{margin-left:-1px}.tabs-left>li.active>a,.tabs-left>li.active>a:hover,.tabs-left>li.active>a:focus{border-bottom-color:#F7F7F7;border-right-color:transparent}.tabs-right>li.active>a,.tabs-right>li.active>a:hover,.tabs-right>li.active>a:focus{border-bottom:1px solid #F7F7F7;border-left-color:transparent}.tabs-left>li>a{border-radius:4px 0 0 4px;margin-right:0;display:block;background:#F7F7F7;text-overflow:ellipsis;overflow:hidden}.tabs-right>li>a{border-radius:0 4px 4px 0;margin-right:0;background:#F7F7F7;text-overflow:ellipsis;overflow:hidden}.sideways{margin-top:50px;border:none;position:relative}.sideways>li{height:20px;width:120px;margin-bottom:100px}.sideways>li>a{border-bottom:1px solid #ddd;border-right-color:transparent;text-align:center;border-radius:4px 4px 0px 0px}.sideways>li.active>a,.sideways>li.active>a:hover,.sideways>li.active>a:focus{border-bottom-color:transparent;border-right-color:#ddd;border-left-color:#ddd}.sideways.tabs-left{left:-50px}.sideways.tabs-right{right:-50px}.sideways.tabs-right>li{transform:rotate(90deg)}.sideways.tabs-left>li{transform:rotate(-90deg)}.morris-hover{position:absolute;z-index:1000}.morris-hover.morris-default-style{padding:6px;color:#666;background:rgba(243,242,243,0.8);border:solid 2px rgba(195,194,196,0.8);font-family:sans-serif;font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0}.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0}.price{font-size:40px;font-weight:400;color:#26B99A;margin:0}.prod_title{border-bottom:1px solid #DFDFDF;padding-bottom:5px;margin:30px 0;font-size:20px;font-weight:400}.product-image img{width:90%}.prod_color li{margin:0 10px}.prod_color li p{margin-bottom:0}.prod_size li{padding:0}.prod_color .color{width:25px;height:25px;border:2px solid rgba(51,51,51,0.28) !important;padding:2px;border-radius:50px}.product_gallery a{width:100px;height:100px;float:left;margin:10px;border:1px solid #e5e5e5}.product_gallery a img{width:100%;margin-top:15px}.product_price{margin:20px 0;padding:5px 10px;background-color:#FFFFFF;text-align:left;border:2px dashed #E0E0E0}.price-tax{font-size:18px}.product_social{margin:20px 0}.product_social ul li a i{font-size:35px}.login{background:#F7F7F7}.login .fa-paw{font-size:26px}a.hiddenanchor{display:none}.login_wrapper{right:0px;margin:0px auto;margin-top:5%;max-width:350px;position:relative}.registration_form,.login_form{position:absolute;top:0px;width:100%}.registration_form{z-index:21;opacity:0;width:100%}.login_form{z-index:22}#signup:target ~ .login_wrapper .registration_form,#signin:target ~ .login_wrapper .login_form{z-index:22;animation-name:fadeInLeft;animation-delay:.1s}#signup:target ~ .login_wrapper .login_form,#signin:target ~ .login_wrapper .registration_form{animation-name:fadeOutLeft}.animate{-webkit-animation-duration:0.5s;-webkit-animation-timing-function:ease;-webkit-animation-fill-mode:both;-moz-animation-duration:0.5s;-moz-animation-timing-function:ease;-moz-animation-fill-mode:both;-o-animation-duration:0.5s;-o-animation-timing-function:ease;-o-animation-fill-mode:both;-ms-animation-duration:0.5s;-ms-animation-timing-function:ease;-ms-animation-fill-mode:both;animation-duration:0.5s;animation-timing-function:ease;animation-fill-mode:both}.login_box{padding:20px;margin:auto}.left{float:left}.alignleft{float:left;margin-right:15px}.alignright{float:right;margin-left:15px}.clearfix:after,form:after{content:".";display:block;height:0;clear:both;visibility:hidden}.login_content{margin:0 auto;padding:25px 0 0;position:relative;text-align:center;text-shadow:0 1px 0 #fff;min-width:280px}.login_content a,.login_content .btn-default:hover{text-decoration:none}.login_content a:hover{text-decoration:underline}.login_content h1{font:normal 25px Helvetica, Arial, sans-serif;letter-spacing:-0.05em;line-height:20px;margin:10px 0 30px}.login_content h1:before,.login_content h1:after{content:"";height:1px;position:absolute;top:10px;width:27%}.login_content h1:after{background:#7e7e7e;background:linear-gradient(left, #7e7e7e 0%, #fff 100%);right:0}.login_content h1:before{background:#7e7e7e;background:linear-gradient(right, #7e7e7e 0%, #fff 100%);left:0}.login_content h1:before,.login_content h1:after{content:"";height:1px;position:absolute;top:10px;width:20%}.login_content h1:after{background:#7e7e7e;background:linear-gradient(left, #7e7e7e 0%, #fff 100%);right:0}.login_content h1:before{background:#7e7e7e;background:linear-gradient(right, #7e7e7e 0%, #fff 100%);left:0}.login_content form{margin:20px 0;position:relative}.login_content form input[type="text"],.login_content form input[type="email"],.login_content form input[type="password"]{border-radius:3px;-ms-box-shadow:0 1px 0 #fff,0 -2px 5px rgba(0,0,0,0.08) inset;-o-box-shadow:0 1px 0 #fff,0 -2px 5px rgba(0,0,0,0.08) inset;box-shadow:0 1px 0 #fff,0 -2px 5px rgba(0,0,0,0.08) inset;border:1px solid #c8c8c8;color:#777;margin:0 0 20px;width:100%}.login_content form input[type="text"]:focus,.login_content form input[type="email"]:focus,.login_content form input[type="password"]:focus{-ms-box-shadow:0 0 2px #ed1c24 inset;-o-box-shadow:0 0 2px #ed1c24 inset;box-shadow:0 0 2px #A97AAD inset;background-color:#fff;border:1px solid #A878AF;outline:none}#username{background-position:10px 10px !important}#password{background-position:10px -53px !important}.login_content form div a{font-size:12px;margin:10px 15px 0 0}.reset_pass{margin-top:10px !important}.login_content div .reset_pass{margin-top:13px !important;margin-right:39px;float:right}.separator{border-top:1px solid #D8D8D8;margin-top:10px;padding-top:10px}.button{background:#f7f9fa;background:linear-gradient(top, #f7f9fa 0%, #f0f0f0 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f9fa', endColorstr='#f0f0f0', GradientType=0);-ms-box-shadow:0 1px 2px rgba(0,0,0,0.1) inset;-o-box-shadow:0 1px 2px rgba(0,0,0,0.1) inset;box-shadow:0 1px 2px rgba(0,0,0,0.1) inset;border-radius:0 0 5px 5px;border-top:1px solid #CFD5D9;padding:15px 0}.login_content form input[type="submit"],#content form .submit{float:left;margin-left:38px}.button a{background:url(http://cssdeck.com/uploads/media/items/8/8bcLQqF.png) 0 -112px no-repeat;color:#7E7E7E;font-size:17px;padding:2px 0 2px 40px;text-decoration:none;transition:all 0.3s ease}.button a:hover{background-position:0 -135px;color:#00aeef}header{width:100%}#nprogress .bar{background:#1ABB9C}#nprogress .peg{box-shadow:0 0 10px #1ABB9C, 0 0 5px #1ABB9C}#nprogress .spinner-icon{border-top-color:#1ABB9C;border-left-color:#1ABB9C}.editor-wrapper{min-height:250px;background-color:white;border-collapse:separate;border:1px solid #ccc;padding:4px;box-sizing:content-box;box-shadow:rgba(0,0,0,0.07451) 0px 1px 1px 0px inset;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top-left-radius:3px;overflow:scroll;outline:none}.voiceBtn{width:20px;color:transparent;background-color:transparent;transform:scale(2, 2);-webkit-transform:scale(2, 2);-moz-transform:scale(2, 2);border:transparent;cursor:pointer;box-shadow:none;-webkit-box-shadow:none}div[data-role="editor-toolbar"]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dropdown-menu a{cursor:pointer}.select2-container--default .select2-selection--single,.select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #ccc;border-radius:0;min-height:38px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#73879C;padding-top:5px}.select2-container--default .select2-selection--multiple .select2-selection__rendered{padding-top:3px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:36px}.select2-container--default .select2-selection--multiple .select2-selection__choice,.select2-container--default .select2-selection--multiple .select2-selection__clear{margin-top:2px;border:none;border-radius:0;padding:3px 5px}.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #ccc}.switchery{width:32px;height:20px}.switchery>small{width:20px;height:20px}fieldset{border:none;margin:0;padding:0}.cropper .img-container,.cropper .img-preview{background-color:#f7f7f7;width:100%;text-align:center}.cropper .img-container{min-height:200px;max-height:516px;margin-bottom:20px}@media (min-width: 768px){.cropper .img-container{min-height:516px}}.cropper .img-container>img{max-width:100%}.cropper .docs-preview{margin-right:-15px}.cropper .img-preview{float:left;margin-right:10px;margin-bottom:10px;overflow:hidden}.cropper .img-preview>img{max-width:100%}.cropper .preview-lg{width:263px;height:148px}.cropper .preview-md{width:139px;height:78px}.cropper .preview-sm{width:69px;height:39px}.cropper .preview-xs{width:35px;height:20px;margin-right:0}.cropper .docs-data>.input-group{margin-bottom:10px}.cropper .docs-data>.input-group>label{min-width:80px}.cropper .docs-data>.input-group>span{min-width:50px}.cropper .docs-buttons>.btn,.cropper .docs-buttons>.btn-group,.cropper .docs-buttons>.form-control{margin-right:5px;margin-bottom:10px}.cropper .docs-toggles>.btn,.cropper .docs-toggles>.btn-group,.cropper .docs-toggles>.dropdown{margin-bottom:10px}.cropper .docs-tooltip{display:block;margin:-6px -12px;padding:6px 12px}.cropper .docs-tooltip>.icon{margin:0 -3px;vertical-align:top}.cropper .tooltip-inner{white-space:normal}.cropper .btn-upload .tooltip-inner,.cropper .btn-toggle .tooltip-inner{white-space:nowrap}.cropper .btn-toggle{padding:6px}.cropper .btn-toggle>.docs-tooltip{margin:-6px;padding:6px}@media (max-width: 400px){.cropper .btn-group-crop{margin-right:-15px !important}.cropper .btn-group-crop>.btn{padding-left:5px;padding-right:5px}.cropper .btn-group-crop .docs-tooltip{margin-left:-5px;margin-right:-5px;padding-left:5px;padding-right:5px}}.cropper .docs-options .dropdown-menu{width:100%}.cropper .docs-options .dropdown-menu>li{padding:3px 20px}.cropper .docs-options .dropdown-menu>li:hover{background-color:#f7f7f7}.cropper .docs-options .dropdown-menu>li>label{display:block}.cropper .docs-cropped .modal-body{text-align:center}.cropper .docs-cropped .modal-body>img,.cropper .docs-cropped .modal-body>canvas{max-width:100%}.cropper .docs-diagram .modal-dialog{max-width:352px}.cropper .docs-cropped canvas{max-width:100%}.form_wizard .stepContainer{display:block;position:relative;margin:0;padding:0;border:0 solid #CCC;overflow-x:hidden}.wizard_horizontal ul.wizard_steps{display:table;list-style:none;position:relative;width:100%;margin:0 0 20px}.wizard_horizontal ul.wizard_steps li{display:table-cell;text-align:center}.wizard_horizontal ul.wizard_steps li a,.wizard_horizontal ul.wizard_steps li:hover{display:block;position:relative;-moz-opacity:1;filter:alpha(opacity=100);opacity:1;color:#666}.wizard_horizontal ul.wizard_steps li a:before{content:"";position:absolute;height:4px;background:#ccc;top:20px;width:100%;z-index:4;left:0}.wizard_horizontal ul.wizard_steps li a.disabled .step_no{background:#ccc}.wizard_horizontal ul.wizard_steps li a .step_no{width:40px;height:40px;line-height:40px;border-radius:100px;display:block;margin:0 auto 5px;font-size:16px;text-align:center;position:relative;z-index:5}.wizard_horizontal ul.wizard_steps li a.selected:before,.step_no{background:#34495E;color:#fff}.wizard_horizontal ul.wizard_steps li a.done:before,.wizard_horizontal ul.wizard_steps li a.done .step_no{background:#1ABB9C;color:#fff}.wizard_horizontal ul.wizard_steps li:first-child a:before{left:50%}.wizard_horizontal ul.wizard_steps li:last-child a:before{right:50%;width:50%;left:auto}.wizard_verticle .stepContainer{width:80%;float:left;padding:0 10px}.actionBar{width:100%;border-top:1px solid #ddd;padding:10px 5px;text-align:right;margin-top:10px}.actionBar .buttonDisabled{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);box-shadow:none}.actionBar a{margin:0 3px}.wizard_verticle .wizard_content{width:80%;float:left;padding-left:20px}.wizard_verticle ul.wizard_steps{display:table;list-style:none;position:relative;width:20%;float:left;margin:0 0 20px}.wizard_verticle ul.wizard_steps li{display:list-item;text-align:center}.wizard_verticle ul.wizard_steps li a{height:80px}.wizard_verticle ul.wizard_steps li a:first-child{margin-top:20px}.wizard_verticle ul.wizard_steps li a,.wizard_verticle ul.wizard_steps li:hover{display:block;position:relative;-moz-opacity:1;filter:alpha(opacity=100);opacity:1;color:#666}.wizard_verticle ul.wizard_steps li a:before{content:"";position:absolute;height:100%;background:#ccc;top:20px;width:4px;z-index:4;left:49%}.wizard_verticle ul.wizard_steps li a.disabled .step_no{background:#ccc}.wizard_verticle ul.wizard_steps li a .step_no{width:40px;height:40px;line-height:40px;border-radius:100px;display:block;margin:0 auto 5px;font-size:16px;text-align:center;position:relative;z-index:5}.wizard_verticle ul.wizard_steps li a.selected:before,.step_no{background:#34495E;color:#fff}.wizard_verticle ul.wizard_steps li a.done:before,.wizard_verticle ul.wizard_steps li a.done .step_no{background:#1ABB9C;color:#fff}.wizard_verticle ul.wizard_steps li:first-child a:before{left:49%}.wizard_verticle ul.wizard_steps li:last-child a:before{left:49%;left:auto;width:0}.form_wizard .loader{display:none}.form_wizard .msgBox{display:none}.progress{border-radius:0}.progress-bar-info{background-color:#3498DB}.progress-bar-success{background-color:#26B99A}.progress_summary .progress{margin:5px 0 12px !important}.progress_summary .row{margin-bottom:5px}.progress_summary .row .col-xs-2{padding:0}.progress_summary .more_info span{text-align:right;float:right}.progress_summary .data span{text-align:right;float:right}.progress_summary p{margin-bottom:3px;width:100%}.progress_title .left{float:left;text-align:left}.progress_title .right{float:right;text-align:right;font-weight:300}.progress.progress_sm{border-radius:0;margin-bottom:18px;height:10px !important}.progress.progress_sm .progress-bar{height:10px !important}.dashboard_graph p{margin:0 0 4px}ul.verticle_bars{width:100%}ul.verticle_bars li{width:23%;height:200px;margin:0}.progress.vertical.progress_wide{width:35px}.alert-success{color:#ffffff;background-color:rgba(38,185,154,0.88);border-color:rgba(38,185,154,0.88)}.alert-info{color:#E9EDEF;background-color:rgba(52,152,219,0.88);border-color:rgba(52,152,219,0.88)}.alert-warning{color:#E9EDEF;background-color:rgba(243,156,18,0.88);border-color:rgba(243,156,18,0.88)}.alert-danger,.alert-error{color:#E9EDEF;background-color:rgba(231,76,60,0.88);border-color:rgba(231,76,60,0.88)}.ui-pnotify.dark .ui-pnotify-container{color:#E9EDEF;background-color:rgba(52,73,94,0.88);border-color:rgba(52,73,94,0.88)}.custom-notifications{position:fixed;margin:15px;right:0;float:right;width:400px;z-index:4000;bottom:0}ul.notifications{float:right;display:block;margin-bottom:7px;padding:0;width:100%}.notifications li{float:right;margin:3px;width:36px;box-shadow:3px 3px 3px rgba(0,0,0,0.3)}.notifications li:last-child{margin-left:0}.notifications a{display:block;text-align:center;text-decoration:none;text-transform:uppercase;padding:9px 8px}.tabbed_notifications .text{padding:5px 15px;height:140px;border-radius:7px;box-shadow:6px 6px 6px rgba(0,0,0,0.3)}.tabbed_notifications div p{display:inline-block}.tabbed_notifications h2{font-weight:bold;text-transform:uppercase;width:80%;float:left;height:20px;text-overflow:ellipsis;overflow:hidden;display:block}.tabbed_notifications .close{padding:5px;color:#E9EDEF;float:right;opacity:1}.fc-state-default{background:#f5f5f5;color:#73879C}.fc-state-down,.fc-state-active{color:#333;background:#ccc}.dropzone{min-height:300px;border:1px solid #e5e5e5} diff --git a/build/css/rtl.css b/build/css/rtl.css new file mode 100644 index 0000000000000000000000000000000000000000..cba248c1213704da67540d075532f6a65ff74c78 --- /dev/null +++ b/build/css/rtl.css @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/build/css/style.css b/build/css/style.css new file mode 100644 index 0000000000000000000000000000000000000000..1a7eeffd0ac18f24b78753f28508a00f05e1d258 --- /dev/null +++ b/build/css/style.css @@ -0,0 +1,4219 @@ +.daterangepicker .ranges li { + color: #73879C +} +.daterangepicker .ranges li.active, +.daterangepicker .ranges li:hover { + background: #536A7F; + border: 1px solid #536A7F; + color: #fff +} +.daterangepicker .input-mini { + background-color: #eee; + border: 1px solid #ccc; + box-shadow: none !important +} +.daterangepicker .input-mini.active { + border: 1px solid #ccc +} +.daterangepicker select.monthselect, +.daterangepicker select.yearselect, +.daterangepicker select.hourselect, +.daterangepicker select.minuteselect, +.daterangepicker select.secondselect, +.daterangepicker select.ampmselect { + font-size: 12px; + padding: 1px; + height: auto; + margin: 0; + cursor: default; + height: 30px; + border: 1px solid #ADB2B5; + line-height: 30px; + border-radius: 0px !important +} +.daterangepicker select.monthselect { + margin-right: 2% +} +.daterangepicker td.in-range { + background: #E4E7EA; + color: #73879C +} +.daterangepicker td.active, +.daterangepicker td.active:hover { + background-color: #536A7F; + color: #fff +} +.daterangepicker th.available:hover { + background: #eee; + color: #34495E +} +.daterangepicker:before, +.daterangepicker:after { + content: none +} +.daterangepicker .calendar.single { + margin: 0 0 4px 0 +} +.daterangepicker .calendar.single .calendar-table { + width: 224px; + padding: 0 0 4px 0 !important +} +.daterangepicker .calendar.single .calendar-table thead tr:first-child th { + padding: 8px 5px +} +.daterangepicker .calendar.single .calendar-table thead th { + border-radius: 0 +} +.daterangepicker.picker_1 { + color: #fff; + background: #34495E +} +.daterangepicker.picker_1 .calendar-table { + background: #34495E +} +.daterangepicker.picker_1 .calendar-table thead tr { + background: #213345 +} +.daterangepicker.picker_1 .calendar-table thead tr:first-child { + background: #1ABB9C +} +.daterangepicker.picker_1 .calendar-table td.off { + background: #34495E; + color: #999 +} +.daterangepicker.picker_1 .calendar-table td.available:hover { + color: #34495E +} +.daterangepicker.picker_2 .calendar-table thead tr { + color: #1ABB9C +} +.daterangepicker.picker_2 .calendar-table thead tr:first-child { + color: #73879C +} +.daterangepicker.picker_3 .calendar-table thead tr:first-child { + color: #fff; + background: #1ABB9C +} +.daterangepicker.picker_4 .calendar-table thead tr:first-child { + color: #fff; + background: #34495E +} +.daterangepicker.picker_4 .calendar-table td, +.daterangepicker.picker_4 .calendar-table td.off { + background: #ECF0F1; + border: 1px solid #fff; + border-radius: 0 +} +.daterangepicker.picker_4 .calendar-table td.active { + background: #34495E +} +.calendar-exibit .show-calendar { + float: none; + display: block; + position: relative; + background-color: #fff; + border: 1px solid #ccc; + margin-bottom: 20px; + border: 1px solid rgba(0, 0, 0, 0.15); + overflow: hidden +} +.calendar-exibit .show-calendar .calendar { + margin: 0 0 4px 0 +} +.calendar-exibit .show-calendar.picker_1 { + background: #34495E +} +.calendar-exibit .calendar-table { + padding: 0 0 4px 0 +} +.left_col { + background: #2A3F54 +} +.nav-sm .container.body .col-md-3.left_col { + min-height: 100%; + width: 70px; + padding: 0; + z-index: 9999; + position: absolute +} +.nav-sm .container.body .col-md-3.left_col.menu_fixed { + position: fixed; + height: 100% +} +.nav-sm .container.body .col-md-3.left_col .mCSB_container, +.nav-sm .container.body .col-md-3.left_col .mCustomScrollBox { + overflow: visible +} +.nav-sm .hidden-small { + visibility: hidden +} +.nav-sm .container.body .right_col { + padding: 10px 20px; + margin-left: 70px; + z-index: 2 +} +.nav-sm .navbar.nav_title { + width: 70px +} +.nav-sm .navbar.nav_title a span { + display: none +} +.nav-sm .navbar.nav_title a i { + font-size: 27px; + margin: 13px 0 0 3px +} +.site_title i { + border: 1px solid #EAEAEA; + padding: 5px 6px; + border-radius: 50% +} +.nav-sm .main_container .top_nav { + display: block; + margin-left: 70px; + z-index: 2 +} +.nav-sm .nav.side-menu li a { + text-align: center !important; + font-weight: 400; + font-size: 10px; + padding: 10px 5px +} +.nav-sm .nav.child_menu li.active, +.nav-sm .nav.side-menu li.active-sm { + border-right: 5px solid #1ABB9C +} +.nav-sm ul.nav.child_menu ul, +.nav-sm .nav.side-menu li.active-sm ul ul { + position: static; + width: 200px; + background: none +} +.nav-sm>.nav.side-menu>li.active-sm>a { + color: #1ABB9C !important +} +.nav-sm .nav.side-menu li a i.toggle-up { + display: none !important +} +.nav-sm .nav.side-menu li a i { + font-size: 25px !important; + text-align: center; + width: 100% !important; + margin-bottom: 5px +} +.nav-sm ul.nav.child_menu { + left: 100%; + position: absolute; + top: 0; + width: 210px; + z-index: 4000; + background: #3E5367; + display: none +} +.nav-sm ul.nav.child_menu li { + padding: 0 10px +} +.nav-sm ul.nav.child_menu li a { + text-align: left !important +} +.nav-sm .profile { + display: none +} +.menu_section { + margin-bottom: 35px +} +.menu_section h3 { + padding-left: 15px; + color: #fff; + text-transform: uppercase; + letter-spacing: .5px; + font-weight: bold; + font-size: 11px; + margin-bottom: 0; + margin-top: 0; + text-shadow: 1px 1px #000 +} +.menu_section>ul { + margin-top: 10px +} +.profile_pic { + width: 35%; + float: left +} +.img-circle.profile_img { + width: 70%; + background: #fff; + margin-left: 15%; + z-index: 1000; + position: inherit; + margin-top: 20px; + border: 1px solid rgba(52, 73, 94, 0.44); + padding: 4px +} +.profile_info { + padding: 25px 10px 10px; + width: 65%; + float: left +} +.profile_info span { + font-size: 13px; + line-height: 30px; + color: #BAB8B8 +} +.profile_info h2 { + font-size: 14px; + color: #ECF0F1; + margin: 0; + font-weight: 300 +} +.profile.img_2 { + text-align: center +} +.profile.img_2 .profile_pic { + width: 100% +} +.profile.img_2 .profile_pic .img-circle.profile_img { + width: 50%; + margin: 10px 0 0 +} +.profile.img_2 .profile_info { + padding: 15px 10px 0; + width: 100%; + margin-bottom: 10px; + float: left +} +.main_menu span.fa { + float: right; + text-align: center; + margin-top: 5px; + font-size: 10px; + min-width: inherit; + color: #C4CFDA +} +.active a span.fa { + text-align: right !important; + margin-right: 4px +} +.nav-sm .menu_section { + margin: 0 +} +.nav-sm span.fa, +.nav-sm .menu_section h3 { + display: none +} +.nav-sm li li span.fa { + display: inline-block +} +.nav_menu { + float: left; + background: #EDEDED; + border-bottom: 1px solid #D9DEE4; + margin-bottom: 10px; + width: 100%; + position: relative +} +@media (min-width: 480px) { + .nav_menu { + position: static + } +} +.nav-md .container.body .col-md-3.left_col { + min-height: 100%; + width: 230px; + padding: 0; + position: absolute; + display: -ms-flexbox; + display: flex; + z-index: 1 +} +.nav-md .container.body .col-md-3.left_col.menu_fixed { + height: 100%; + position: fixed +} +body .container.body .right_col { + background: #F7F7F7 +} +.nav-md .container.body .right_col { + padding: 10px 20px 0; + margin-left: 230px +} +.nav_title { + width: 230px; + float: left; + background: #2A3F54; + border-radius: 0; + height: 57px +} +@media (max-width: 991px) { + .nav-md .container.body .right_col, + .nav-md .container.body .top_nav { + width: 100%; + margin: 0 + } + .nav-md .container.body .col-md-3.left_col { + display: none + } + .nav-md .container.body .right_col { + width: 100%; + padding-right: 0 + } + .right_col { + padding: 10px !important + } +} +@media (max-width: 1200px) { + .x_title h2 { + width: 62%; + font-size: 17px + } + .tile, + .graph { + zoom: 85%; + height: inherit + } +} +@media (max-width: 1270px) and (min-width: 192px) { + .x_title h2 small { + display: none + } +} +.left_col .mCSB_scrollTools { + width: 6px +} +.left_col .mCSB_dragger { + max-height: 400px !important +} +.blue { + color: #3498DB +} +.purple { + color: #9B59B6 +} +.green { + color: #1ABB9C +} +.aero { + color: #9CC2CB +} +.red { + color: #E74C3C +} +.dark { + color: #34495E +} +.border-blue { + border-color: #3498DB !important +} +.border-purple { + border-color: #9B59B6 !important +} +.border-green { + border-color: #1ABB9C !important +} +.border-aero { + border-color: #9CC2CB !important +} +.border-red { + border-color: #E74C3C !important +} +.border-dark { + border-color: #34495E !important +} +.bg-white { + background: #fff !important; + border: 1px solid #fff !important; + color: #73879C +} +.bg-green { + background: #1ABB9C !important; + border: 1px solid #1ABB9C !important; + color: #fff +} +.bg-red { + background: #E74C3C !important; + border: 1px solid #E74C3C !important; + color: #fff +} +.bg-blue { + background: #3498DB !important; + border: 1px solid #3498DB !important; + color: #fff +} +.bg-orange { + background: #F39C12 !important; + border: 1px solid #F39C12 !important; + color: #fff +} +.bg-purple { + background: #9B59B6 !important; + border: 1px solid #9B59B6 !important; + color: #fff +} +.bg-blue-sky { + background: #50C1CF !important; + border: 1px solid #50C1CF !important; + color: #fff +} +.container { + width: 100%; + padding: 0 +} +.navbar-nav>li>a, +.navbar-brand, +.navbar-nav>li>a { + color: #fff !important +} +.top_nav .nav>li>a:focus, +.top_nav .nav>li>a:hover, +.top_nav .nav .open>a, +.top_nav .nav .open>a:focus, +.top_nav .nav .open>a:hover { + background: #D9DEE4 +} +body { + color: #73879C; + background: #2A3F54; + font-family: "Helvetica Neue", Roboto, Arial, "Droid Sans", sans-serif; + font-size: 13px; + font-weight: 400; + line-height: 1.471 +} +.main_container .top_nav { + display: block; + margin-left: 230px +} +.no-padding { + padding: 0 !important +} +.page-title { + width: 100%; + height: 65px; + padding: 10px 0 +} +.page-title .title_left { + width: 45%; + float: left; + display: block +} +.page-title .title_left h3 { + margin: 9px 0 +} +.page-title .title_right { + width: 55%; + float: left; + display: block +} +.page-title .title_right .pull-right { + margin: 10px 0 +} +.fixed_height_320 { + height: 320px +} +.fixed_height_390 { + height: 390px +} +.fixed_height_200 { + height: 200px +} +.overflow_hidden { + overflow: hidden +} +.progress-bar-dark { + background-color: #34495E !important +} +.progress-bar-gray { + background-color: #BDC3C7 !important +} +table.no-margin .progress { + margin-bottom: 0 +} +.main_content { + padding: 10px 20px +} +.col-md-55 { + width: 50%; + margin-bottom: 10px +} +@media (min-width: 768px) { + .col-md-55 { + width: 20% + } +} +@media (min-width: 992px) { + .col-md-55 { + width: 20% + } +} +@media (min-width: 1200px) { + .col-md-55 { + width: 20% + } +} +@media (min-width: 192px) and (max-width: 1270px) { + table.tile_info span.right { + margin-right: 7px; + float: left + } +} +.center-margin { + margin: 0 auto; + float: none !important +} +.col-md-55, +.col-xs-1, +.col-sm-1, +.col-md-1, +.col-lg-1, +.col-xs-2, +.col-sm-2, +.col-md-2, +.col-lg-2, +.col-xs-3, +.col-sm-3, +.col-md-3, +.col-lg-3, +.col-xs-4, +.col-sm-4, +.col-md-4, +.col-lg-4, +.col-xs-5, +.col-sm-5, +.col-md-5, +.col-lg-5, +.col-xs-6, +.col-sm-6, +.col-md-6, +.col-lg-6, +.col-xs-7, +.col-sm-7, +.col-md-7, +.col-lg-7, +.col-xs-8, +.col-sm-8, +.col-md-8, +.col-lg-8, +.col-xs-9, +.col-sm-9, +.col-md-9, +.col-lg-9, +.col-xs-10, +.col-sm-10, +.col-md-10, +.col-lg-10, +.col-xs-11, +.col-sm-11, +.col-md-11, +.col-lg-11, +.col-xs-12, +.col-sm-12, +.col-md-12, +.col-lg-12 { + position: relative; + min-height: 1px; + float: left; + padding-right: 10px; + padding-left: 10px +} +.row { + margin-right: -10px; + margin-left: -10px +} +.grid_slider .col-md-6 { + padding: 0 40px +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 10px; + margin-bottom: 10px +} +a { + color: #5A738E; + text-decoration: none +} +a, +a:visited, +a:focus, +a:active, +:visited, +:focus, +:active, +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: 0 +} +a:hover, +a:focus { + text-decoration: none +} +.navbar { + margin-bottom: 0 +} +.navbar-header { + background: #34495E +} +.navbar-right { + margin-right: 0 +} +.top_nav .navbar-right { + margin: 0; + width: 70%; + float: right +} +.top_nav .navbar-right li { + display: inline-block; + float: right; + position: static +} +@media (min-width: 480px) { + .top_nav .navbar-right li { + position: relative + } +} +.top_nav .dropdown-menu li { + width: 100% +} +.top_nav .dropdown-menu li a { + width: 100%; + padding: 12px 20px +} +.top_nav li a i { + font-size: 15px +} +.navbar-static-top { + position: fixed; + top: 0; + width: 100% +} +.sidebar-header { + border-bottom: 0; + margin-top: 46px +} +.sidebar-header:first-of-type { + margin-top: 0 +} +.nav.side-menu>li { + position: relative; + display: block; + cursor: pointer +} +.nav.side-menu>li>a { + margin-bottom: 6px +} +.nav.side-menu>li>a:hover { + color: #F2F5F7 !important +} +.nav.side-menu>li>a:hover, +.nav>li>a:focus { + text-decoration: none; + background: transparent +} +.nav.child_menu { + display: none +} +.nav.child_menu li:hover, +.nav.child_menu li.active { + background-color: rgba(255, 255, 255, 0.06) +} +.nav.child_menu li { + padding-left: 36px +} +.nav-md ul.nav.child_menu li:before { + background: #425668; + bottom: auto; + content: ""; + height: 8px; + left: 23px; + margin-top: 15px; + position: absolute; + right: auto; + width: 8px; + z-index: 1; + border-radius: 50% +} +.nav-md ul.nav.child_menu li:after { + border-left: 1px solid #425668; + bottom: 0; + content: ""; + left: 27px; + position: absolute; + top: 0 +} +.nav.side-menu>li>a, +.nav.child_menu>li>a { + color: #E7E7E7; + font-weight: 500 +} +.nav.child_menu li li:hover, +.nav.child_menu li li.active { + background: none +} +.nav.child_menu li li a:hover, +.nav.child_menu li li a.active { + color: #fff +} +.nav>li>a { + position: relative; + display: block; + padding: 13px 15px 12px +} +.nav.side-menu>li.current-page, +.nav.side-menu>li.active { + border-right: 5px solid #1ABB9C +} +.nav li.current-page { + background: rgba(255, 255, 255, 0.05) +} +.nav li li li.current-page { + background: none +} +.nav li li.current-page a { + color: #fff +} +.nav.side-menu>li.active>a { + text-shadow: rgba(0, 0, 0, 0.25) 0 -1px 0; + background: linear-gradient(#334556, #2C4257), #2A3F54; + box-shadow: rgba(0, 0, 0, 0.25) 0 1px 0, inset rgba(255, 255, 255, 0.16) 0 1px 0 +} +.navbar-brand, +.navbar-nav>li>a { + font-weight: 500; + color: #ECF0F1 !important; + margin-left: 0 !important; + line-height: 32px +} +.site_title { + text-overflow: ellipsis; + overflow: hidden; + font-weight: 400; + font-size: 22px; + width: 100%; + color: #ECF0F1 !important; + margin-left: 0 !important; + line-height: 59px; + display: block; + height: 55px; + margin: 0; + padding-left: 10px +} +.site_title:hover, +.site_title:focus { + text-decoration: none +} +.nav.navbar-nav>li>a { + color: #515356 !important +} +.nav.top_menu>li>a { + position: relative; + display: block; + padding: 10px 15px; + color: #34495E !important +} +.nav>li>a:hover, +.nav>li>a:focus { + background-color: transparent +} +.top_search { + padding: 0 +} +.top_search .form-control { + border-right: 0; + box-shadow: inset 0 1px 0px rgba(0, 0, 0, 0.075); + border-radius: 25px 0px 0px 25px; + padding-left: 20px; + border: 1px solid rgba(221, 226, 232, 0.49) +} +.top_search .form-control:focus { + border: 1px solid rgba(221, 226, 232, 0.49); + border-right: 0 +} +.top_search .input-group-btn button { + border-radius: 0px 25px 25px 0px; + border: 1px solid rgba(221, 226, 232, 0.49); + border-left: 0; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + color: #93A2B2; + margin-bottom: 0 !important +} +.toggle { + float: left; + margin: 0; + padding-top: 16px; + width: 70px +} +.toggle a { + padding: 15px 15px 0; + margin: 0; + cursor: pointer +} +.toggle a i { + font-size: 26px +} +.nav.child_menu>li>a { + color: rgba(255, 255, 255, 0.75); + font-size: 12px; + padding: 9px +} +.panel_toolbox { + float: right; + min-width: 70px +} +.panel_toolbox>li { + float: left; + cursor: pointer +} +.panel_toolbox>li>a { + padding: 5px; + color: #C5C7CB; + font-size: 14px +} +.panel_toolbox>li>a:hover { + background: #F5F7FA +} +.line_30 { + line-height: 30px +} +.main_menu_side { + padding: 0 +} +.bs-docs-sidebar .nav>li>a { + display: block; + padding: 4px 6px +} +footer { + background: #fff; + padding: 15px 20px; + display: block +} +.nav-sm footer { + margin-left: 70px +} +.footer_fixed footer { + position: fixed; + left: 0px; + bottom: 0px; + width: 100% +} +@media (min-width: 768px) { + .footer_fixed footer { + margin-left: 0 + } +} +@media (min-width: 768px) { + .footer_fixed .nav-sm footer { + margin-left: 0 + } +} +.tile-stats.sparkline { + padding: 10px; + text-align: center +} +.jqstooltip { + background: #34495E !important; + width: 30px !important; + height: 22px !important; + text-decoration: none +} +.tooltip { + display: block !important +} +.tiles { + border-top: 1px solid #ccc; + margin-top: 15px; + padding-top: 5px; + margin-bottom: 0 +} +.tile { + overflow: hidden +} +.top_tiles { + margin-bottom: 0 +} +.top_tiles .tile h2 { + font-size: 30px; + line-height: 30px; + margin: 3px 0 7px; + font-weight: bold +} +article.media { + width: 100% +} +*, +*:before, +*:after { + box-sizing: border-box +} +#integration-list { + width: 100%; + margin: 0 auto; + display: table +} +#integration-list ul { + padding: 0; + margin: 20px 0; + color: #555 +} +#integration-list ul>li { + list-style: none; + border-top: 1px solid #ddd; + display: block; + padding: 15px; + overflow: hidden +} +#integration-list ul:last-child { + border-bottom: 1px solid #ddd +} +#integration-list ul>li:hover { + background: #efefef +} +.expand { + display: block; + text-decoration: none; + color: #555; + cursor: pointer +} +.expand h2 { + width: 85%; + float: left +} +h2 { + font-size: 18px; + font-weight: 400 +} +#left, +#right { + display: table +} +#sup { + display: table-cell; + vertical-align: middle; + width: 80% +} +.detail a { + text-decoration: none; + color: #C0392B; + border: 1px solid #C0392B; + padding: 6px 10px 5px; + font-size: 13px; + margin-right: 7px +} +.detail { + margin: 10px 0 10px 0px; + display: none; + line-height: 22px; + height: 150px +} +.detail span { + margin: 0 +} +.right-arrow { + width: 10px; + float: right; + font-weight: bold; + font-size: 20px +} +.accordion .panel { + margin-bottom: 5px; + border-radius: 0; + border-bottom: 1px solid #efefef +} +.accordion .panel-heading { + background: #F2F5F7; + padding: 13px; + width: 100%; + display: block +} +.accordion .panel:hover { + background: #F2F5F7 +} +.x_panel { + position: relative; + width: 100%; + margin-bottom: 10px; + padding: 10px 17px; + display: inline-block; + background: #fff; + border: 1px solid #E6E9ED; + -webkit-column-break-inside: avoid; + -moz-column-break-inside: avoid; + column-break-inside: avoid; + opacity: 1; + transition: all .2s ease +} +.x_title { + border-bottom: 2px solid #E6E9ED; + padding: 1px 5px 6px; + margin-bottom: 10px +} +.x_title .filter { + width: 40%; + float: right +} +.x_title h2 { + margin: 5px 0 6px; + float: left; + display: block; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap +} +.x_title h2 small { + margin-left: 10px +} +.x_title span { + color: #BDBDBD +} +.x_content { + padding: 0 5px 6px; + position: relative; + width: 100%; + float: left; + clear: both; + margin-top: 5px +} +.x_content h4 { + font-size: 16px; + font-weight: 500 +} +legend { + padding-bottom: 7px +} +.demo-placeholder { + height: 280px +} +.profile_details:nth-child(3n) { + clear: both +} +.profile_details .profile_view { + display: inline-block; + padding: 10px 0 0; + background: #fff +} +.profile_details .profile_view .divider { + border-top: 1px solid #e5e5e5; + padding-top: 5px; + margin-top: 5px +} +.profile_details .profile_view .ratings { + margin-bottom: 0 +} +.profile_details .profile_view .bottom { + background: #F2F5F7; + padding: 9px 0; + border-top: 1px solid #E6E9ED +} +.profile_details .profile_view .left { + margin-top: 20px +} +.profile_details .profile_view .left p { + margin-bottom: 3px +} +.profile_details .profile_view .right { + margin-top: 0px; + padding: 10px +} +.profile_details .profile_view .img-circle { + border: 1px solid #E6E9ED; + padding: 2px +} +.profile_details .profile_view h2 { + margin: 5px 0 +} +.profile_details .profile_view .ratings { + text-align: left; + font-size: 16px +} +.profile_details .profile_view .brief { + margin: 0; + font-weight: 300 +} +.profile_details .profile_left { + background: white +} +.pagination.pagination-split li { + display: inline-block; + margin-right: 3px +} +.pagination.pagination-split li a { + border-radius: 4px; + color: #768399; + -moz-border-radius: 4px; + -webkit-border-radius: 4px +} +table.tile h3, +table.tile h4, +table.tile span { + font-weight: bold; + vertical-align: middle !important +} +table.tile th, +table.tile td { + text-align: center +} +table.tile th { + border-bottom: 1px solid #E6ECEE +} +table.tile td { + padding: 5px 0 +} +table.tile td ul { + text-align: left; + padding-left: 0 +} +table.tile td ul li { + list-style: none; + width: 100% +} +table.tile td ul li a { + width: 100% +} +table.tile td ul li a big { + right: 0; + float: right; + margin-right: 13px +} +table.tile_info { + width: 100% +} +table.tile_info td { + text-align: left; + padding: 1px; + font-size: 15px +} +table.tile_info td p { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin: 0; + line-height: 28px +} +table.tile_info td i { + margin-right: 8px; + font-size: 17px; + float: left; + width: 18px; + line-height: 28px +} +table.tile_info td:first-child { + width: 83% +} +td span { + line-height: 28px +} +.sidebar-widget { + overflow: hidden +} +.error-number { + font-size: 90px; + line-height: 90px; + margin: 20px 0 +} +.col-middle { + margin-top: 5% +} +.mid_center { + width: 370px; + margin: 0 auto; + text-align: center; + padding: 10px 20px +} +h3.degrees { + font-size: 22px; + font-weight: 400; + text-align: center +} +.degrees:after { + content: "o"; + position: relative; + top: -12px; + font-size: 13px; + font-weight: 300 +} +.daily-weather .day { + font-size: 14px; + border-top: 2px solid rgba(115, 135, 156, 0.36); + text-align: center; + border-bottom: 2px solid rgba(115, 135, 156, 0.36); + padding: 5px 0 +} +.weather-days .col-sm-2 { + overflow: hidden; + width: 16.66666667% +} +.weather .row { + margin-bottom: 0 +} +.bulk-actions { + display: none +} +table.countries_list { + width: 100% +} +table.countries_list td { + padding: 0 10px; + line-height: 30px; + border-top: 1px solid #eeeeee +} +.dataTables_paginate a { + padding: 6px 9px !important; + background: #ddd !important; + border-color: #ddd !important +} +.paging_full_numbers a.paginate_active { + background-color: rgba(38, 185, 154, 0.59) !important; + border-color: rgba(38, 185, 154, 0.59) !important +} +button.DTTT_button, +div.DTTT_button, +a.DTTT_button { + border: 1px solid #E7E7E7 !important; + background: #E7E7E7 !important; + box-shadow: none !important +} +table.jambo_table { + border: 1px solid rgba(221, 221, 221, 0.78) +} +table.jambo_table thead { + background: rgba(52, 73, 94, 0.94); + color: #ECF0F1 +} +table.jambo_table tbody tr:hover td { + background: rgba(38, 185, 154, 0.07); + border-top: 1px solid rgba(38, 185, 154, 0.11); + border-bottom: 1px solid rgba(38, 185, 154, 0.11) +} +table.jambo_table tbody tr.selected { + background: rgba(38, 185, 154, 0.16) +} +table.jambo_table tbody tr.selected td { + border-top: 1px solid rgba(38, 185, 154, 0.4); + border-bottom: 1px solid rgba(38, 185, 154, 0.4) +} +.dataTables_paginate a { + background: #ff0000 +} +.dataTables_wrapper { + position: relative; + clear: both; + zoom: 1 +} +.dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 250px; + height: 30px; + margin-left: -125px; + margin-top: -15px; + padding: 14px 0 2px 0; + border: 1px solid #ddd; + text-align: center; + color: #999; + font-size: 14px; + background-color: white +} +.dataTables_length { + width: 40%; + float: left +} +.dataTables_filter { + width: 50%; + float: right; + text-align: right +} +.dataTables_info { + width: 60%; + float: left +} +.dataTables_paginate { + float: right; + text-align: right +} +table.dataTable th.focus, +table.dataTable td.focus { + outline: 2px solid #1ABB9C !important; + outline-offset: -1px +} +table.display { + margin: 0 auto; + clear: both; + width: 100% +} +table.display thead th { + padding: 8px 18px 8px 10px; + border-bottom: 1px solid black; + font-weight: bold; + cursor: pointer +} +table.display tfoot th { + padding: 3px 18px 3px 10px; + border-top: 1px solid black; + font-weight: bold +} +table.display tr.heading2 td { + border-bottom: 1px solid #aaa +} +table.display td { + padding: 3px 10px +} +table.display td.center { + text-align: center +} +table.display thead th:active, +table.display thead td:active { + outline: none +} +.dataTables_scroll { + clear: both +} +.dataTables_scrollBody { + *margin-top: -1px; + -webkit-overflow-scrolling: touch +} +.top .dataTables_info { + float: none +} +.clear { + clear: both +} +.dataTables_empty { + text-align: center +} +tfoot input { + margin: 0.5em 0; + width: 100%; + color: #444 +} +tfoot input.search_init { + color: #999 +} +td.group { + background-color: #d1cfd0; + border-bottom: 2px solid #A19B9E; + border-top: 2px solid #A19B9E +} +td.details { + background-color: #d1cfd0; + border: 2px solid #A19B9E +} +.example_alt_pagination div.dataTables_info { + width: 40% +} +.paging_full_numbers { + width: 400px; + height: 22px; + line-height: 22px +} +.paging_full_numbers a:active { + outline: none +} +.paging_full_numbers a:hover { + text-decoration: none +} +.paging_full_numbers a.paginate_button, +.paging_full_numbers a.paginate_active { + border: 1px solid #aaa; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + padding: 2px 5px; + margin: 0 3px; + cursor: pointer +} +.paging_full_numbers a.paginate_button { + background-color: #ddd +} +.paging_full_numbers a.paginate_button:hover { + background-color: #ccc; + text-decoration: none !important +} +.paging_full_numbers a.paginate_active { + background-color: #99B3FF +} +table.display tr.even.row_selected td { + background-color: #B0BED9 +} +table.display tr.odd.row_selected td { + background-color: #9FAFD1 +} +div.box { + height: 100px; + padding: 10px; + overflow: auto; + border: 1px solid #8080FF; + background-color: #E5E5FF +} +ul.msg_list li { + background: #f7f7f7; + padding: 5px; + display: -ms-flexbox; + display: flex; + margin: 6px 6px 0; + width: 96% !important +} +ul.msg_list li:last-child { + margin-bottom: 6px; + padding: 10px +} +ul.msg_list li a { + padding: 3px 5px !important +} +ul.msg_list li a .image img { + border-radius: 2px 2px 2px 2px; + -webkit-border-radius: 2px 2px 2px 2px; + float: left; + margin-right: 10px; + width: 11% +} +ul.msg_list li a .time { + font-size: 11px; + font-style: italic; + font-weight: bold; + position: absolute; + right: 35px +} +ul.msg_list li a .message { + display: block !important; + font-size: 11px +} +.dropdown-menu.msg_list span { + white-space: normal +} +.dropdown-menu { + border: medium none; + box-shadow: none; + display: none; + float: left; + font-size: 12px; + left: 0; + list-style: none outside none; + padding: 0; + position: absolute; + text-shadow: none; + top: 100%; + z-index: 9998; + border: 1px solid #D9DEE4; + border-top-left-radius: 0; + border-top-right-radius: 0 +} +.dropdown-menu>li>a { + color: #5A738E +} +.navbar-nav .open .dropdown-menu { + position: absolute; + background: #fff; + margin-top: 0; + border: 1px solid #D9DEE4; + -webkit-box-shadow: none; + right: 0; + left: auto; + width: 220px +} +.navbar-nav .open .dropdown-menu.msg_list { + width: 300px +} +.info-number .badge { + font-size: 10px; + font-weight: normal; + line-height: 13px; + padding: 2px 6px; + position: absolute; + right: 2px; + top: 8px +} +ul.to_do { + padding: 0 +} +ul.to_do li { + background: #f3f3f3; + border-radius: 3px; + position: relative; + padding: 7px; + margin-bottom: 5px; + list-style: none +} +ul.to_do p { + margin: 0 +} +.dashboard-widget { + background: #f6f6f6; + border-top: 5px solid #79C3DF; + border-radius: 3px; + padding: 5px 10px 10px +} +.dashboard-widget .dashboard-widget-title { + font-weight: normal; + border-bottom: 1px solid #c1cdcd; + margin: 0 0 10px 0; + padding-bottom: 5px; + padding-left: 40px; + line-height: 30px +} +.dashboard-widget .dashboard-widget-title i { + font-size: 100%; + margin-left: -35px; + margin-right: 10px; + color: #33a1c9; + padding: 3px 6px; + border: 1px solid #abd9ea; + border-radius: 5px; + background: #fff +} +ul.quick-list { + width: 45%; + padding-left: 0; + display: inline-block +} +ul.quick-list li { + padding-left: 10px; + list-style: none; + margin: 0; + padding-bottom: 6px; + padding-top: 4px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden +} +ul.quick-list li i { + padding-right: 10px; + color: #757679 +} +.dashboard-widget-content { + padding-top: 9px +} +.dashboard-widget-content .sidebar-widget { + width: 50%; + display: inline-block; + vertical-align: top; + background: #fff; + border: 1px solid #abd9ea; + border-radius: 5px; + text-align: center; + float: right; + padding: 2px; + margin-top: 10px +} +.widget_summary { + width: 100%; + display: -ms-inline-flexbox; + display: inline-flex +} +.widget_summary .w_left { + float: left; + text-align: left +} +.widget_summary .w_center { + float: left +} +.widget_summary .w_right { + float: left; + text-align: right +} +.widget_summary .w_right span { + font-size: 20px +} +.w_20 { + width: 20% +} +.w_25 { + width: 25% +} +.w_55 { + width: 55% +} +h5.graph_title { + text-align: left; + margin-left: 10px +} +h5.graph_title i { + margin-right: 10px; + font-size: 17px +} +span.right { + float: right; + font-size: 14px !important +} +.tile_info a { + text-overflow: ellipsis +} +.sidebar-footer { + bottom: 0px; + clear: both; + display: block; + padding: 5px 0 0 0; + position: fixed; + width: 230px; + background: #2A3F54 +} +.sidebar-footer a { + padding: 7px 0 3px; + text-align: center; + width: 25%; + font-size: 17px; + display: block; + float: left; + background: #172D44; + cursor: pointer; +} +.sidebar-footer a:hover { + background: #425567 +} +.tile_count { + margin-bottom: 20px; + margin-top: 20px +} +.tile_count .tile_stats_count { + border-bottom: 1px solid #D9DEE4; + padding: 0 10px 0 20px; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + position: relative +} +@media (min-width: 992px) { + footer { + margin-left: 230px + } +} +@media (min-width: 992px) { + .tile_count .tile_stats_count { + margin-bottom: 10px; + border-bottom: 0; + padding-bottom: 10px + } +} +.tile_count .tile_stats_count:before { + content: ""; + position: absolute; + left: 0; + height: 65px; + border-left: 2px solid #ADB2B5; + margin-top: 10px +} +@media (min-width: 992px) { + .tile_count .tile_stats_count:first-child:before { + border-left: 0 + } +} +.tile_count .tile_stats_count .count { + font-size: 30px; + line-height: 47px; + font-weight: 600 +} +@media (min-width: 768px) { + .tile_count .tile_stats_count .count { + font-size: 40px + } +} +@media (min-width: 992px) and (max-width: 1100px) { + .tile_count .tile_stats_count .count { + font-size: 30px + } +} +.tile_count .tile_stats_count span { + font-size: 12px +} +@media (min-width: 768px) { + .tile_count .tile_stats_count span { + font-size: 13px + } +} +.tile_count .tile_stats_count .count_bottom i { + width: 12px +} +.dashboard_graph { + background: #fff; + padding: 7px 10px +} +.dashboard_graph .col-md-9, +.dashboard_graph .col-md-3 { + padding: 0 +} +a.user-profile { + color: #5E6974 !important +} +.user-profile img { + width: 29px; + height: 29px; + border-radius: 50%; + margin-right: 10px +} +ul.top_profiles { + height: 330px; + width: 100% +} +ul.top_profiles li { + margin: 0; + padding: 3px 5px +} +ul.top_profiles li:nth-child(odd) { + background-color: #eee +} +.media .profile_thumb { + border: 1px solid; + width: 50px; + height: 50px; + margin: 5px 10px 5px 0; + border-radius: 50%; + padding: 9px 12px +} +.media .profile_thumb i { + font-size: 30px +} +.media .date { + background: #ccc; + width: 52px; + margin-right: 10px; + border-radius: 10px; + padding: 5px +} +.media .date .month { + margin: 0; + text-align: center; + color: #fff +} +.media .date .day { + text-align: center; + color: #fff; + font-size: 27px; + margin: 0; + line-height: 27px; + font-weight: bold +} +.event .media-body a.title { + font-weight: bold +} +.event .media-body p { + margin-bottom: 0 +} +h4.graph_title { + margin: 7px; + text-align: center +} +.fontawesome-icon-list .fa-hover a:hover { + background-color: #ddd; + color: #fff; + text-decoration: none +} +.fontawesome-icon-list .fa-hover a { + display: block; + line-height: 32px; + height: 32px; + padding-left: 10px; + border-radius: 4px +} +.fontawesome-icon-list .fa-hover a:hover .fa { + font-size: 28px; + vertical-align: -6px +} +.fontawesome-icon-list .fa-hover a .fa { + width: 32px; + font-size: 16px; + display: inline-block; + text-align: right; + margin-right: 10px +} +.main_menu .fa { + width: 26px; + opacity: .99; + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + font-size: 18px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} +.tile-stats { + position: relative; + display: block; + margin-bottom: 12px; + border: 1px solid #E4E4E4; + -webkit-border-radius: 5px; + overflow: hidden; + padding-bottom: 5px; + -webkit-background-clip: padding-box; + -moz-border-radius: 5px; + -moz-background-clip: padding; + border-radius: 5px; + background-clip: padding-box; + background: #FFF; + transition: all 300ms ease-in-out +} +.tile-stats:hover .icon i { + animation-name: tansformAnimation; + animation-duration: .5s; + animation-iteration-count: 1; + color: rgba(58, 58, 58, 0.41); + animation-timing-function: ease; + animation-fill-mode: forwards; + -webkit-animation-name: tansformAnimation; + -webkit-animation-duration: .5s; + -webkit-animation-iteration-count: 1; + -webkit-animation-timing-function: ease; + -webkit-animation-fill-mode: forwards; + -moz-animation-name: tansformAnimation; + -moz-animation-duration: .5s; + -moz-animation-iteration-count: 1; + -moz-animation-timing-function: ease; + -moz-animation-fill-mode: forwards +} +.tile-stats .icon { + width: 20px; + height: 20px; + color: #BAB8B8; + position: absolute; + right: 53px; + top: 22px; + z-index: 1 +} +.tile-stats .icon i { + margin: 0; + font-size: 60px; + line-height: 0; + vertical-align: bottom; + padding: 0 +} +.tile-stats .count { + font-size: 38px; + font-weight: bold; + line-height: 1.65857 +} +.tile-stats .count, +.tile-stats h3, +.tile-stats p { + position: relative; + margin: 0; + margin-left: 10px; + z-index: 5; + padding: 0 +} +.tile-stats h3 { + color: #BAB8B8 +} +.tile-stats p { + margin-top: 5px; + font-size: 12px +} +.tile-stats>.dash-box-footer { + position: relative; + text-align: center; + margin-top: 5px; + padding: 3px 0; + color: #fff; + color: rgba(255, 255, 255, 0.8); + display: block; + z-index: 10; + background: rgba(0, 0, 0, 0.1); + text-decoration: none +} +.tile-stats>.dash-box-footer:hover { + color: #fff; + background: rgba(0, 0, 0, 0.15) +} +.tile-stats>.dash-box-footer:hover { + color: #fff; + background: rgba(0, 0, 0, 0.15) +} +table.tile_info { + padding: 10px 15px +} +table.tile_info span.right { + margin-right: 0; + float: right; + position: absolute; + right: 4% +} +.tile:hover { + text-decoration: none +} +.tile_header { + border-bottom: transparent; + padding: 7px 15px; + margin-bottom: 15px; + background: #E7E7E7 +} +.tile_head h4 { + margin-top: 0; + margin-bottom: 5px +} +.tiles-bottom { + padding: 5px 10px; + margin-top: 10px; + background: rgba(194, 194, 194, 0.3); + text-align: left +} +a.star { + color: #428bca !important +} +.mail_content { + background: none repeat scroll 0 0 #FFFFFF; + border-radius: 4px; + margin-top: 20px; + min-height: 500px; + padding: 10px 11px; + width: 100% +} +.list-btn-mail { + margin-bottom: 15px +} +.list-btn-mail.active { + border-bottom: 1px solid #39B3D7; + padding: 0 0 14px +} +.list-btn-mail>i { + float: left; + font-size: 18px; + font-style: normal; + width: 33px +} +.list-btn-mail>.cn { + background: none repeat scroll 0 0 #39B3D7; + border-radius: 12px; + color: #FFFFFF; + float: right; + font-style: normal; + padding: 0 5px +} +.button-mail { + margin: 0 0 15px !important; + text-align: left; + width: 100% +} +button, +.buttons, +.btn, +.modal-footer .btn+.btn { + margin-bottom: 5px; + margin-right: 5px +} +.btn-group-vertical .btn, +.btn-group .btn { + margin-bottom: 0; + margin-right: 0 +} +.mail_list_column { + border-left: 1px solid #DBDBDB +} +.mail_view { + border-left: 1px solid #DBDBDB +} +.mail_list { + width: 100%; + border-bottom: 1px solid #DBDBDB; + margin-bottom: 2px; + display: inline-block +} +.mail_list .left { + width: 5%; + float: left; + margin-right: 3% +} +.mail_list .right { + width: 90%; + float: left +} +.mail_list h3 { + font-size: 15px; + font-weight: bold; + margin: 0px 0 6px +} +.mail_list h3 small { + float: right; + color: #ADABAB; + font-size: 11px; + line-height: 20px +} +.mail_list .badge { + padding: 3px 6px; + font-size: 8px; + background: #BAB7B7 +} +@media (max-width: 767px) { + .mail_list { + margin-bottom: 5px; + display: inline-block + } +} +.mail_heading h4 { + font-size: 18px; + border-bottom: 1px solid #ddd; + padding-bottom: 10px; + margin-top: 20px +} +.attachment { + margin-top: 30px +} +.attachment ul { + width: 100%; + list-style: none; + padding-left: 0; + display: inline-block; + margin-bottom: 30px +} +.attachment ul li { + float: left; + width: 150px; + margin-right: 10px; + margin-bottom: 10px +} +.attachment ul li img { + height: 150px; + border: 1px solid #ddd; + padding: 5px; + margin-bottom: 10px +} +.attachment ul li span { + float: right +} +.attachment .file-name { + float: left +} +.attachment .links { + width: 100%; + display: inline-block +} +.compose { + padding: 0; + position: fixed; + bottom: 0; + right: 0; + background: #fff; + border: 1px solid #D9DEE4; + border-right: 0; + border-bottom: 0; + border-top-left-radius: 5px; + z-index: 9999; + display: none +} +.compose .compose-header { + padding: 5px; + background: #169F85; + color: #fff; + border-top-left-radius: 5px +} +.compose .compose-header .close { + text-shadow: 0 1px 0 #ffffff; + line-height: .8 +} +.compose .compose-body .editor.btn-toolbar { + margin: 0 +} +.compose .compose-body .editor-wrapper { + height: 100%; + min-height: 50px; + max-height: 180px; + border-radius: 0; + border-left: none; + border-right: none; + overflow: auto +} +.compose .compose-footer { + padding: 10px +} +.editor.btn-toolbar { + zoom: 1; + background: #F7F7F7; + margin: 5px 2px; + padding: 3px 0; + border: 1px solid #EFEFEF +} +.input-group { + margin-bottom: 10px +} +.ln_solid { + border-top: 1px solid #e5e5e5; + color: #ffffff; + background-color: #ffffff; + height: 1px; + margin: 20px 0 +} +span.section { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5 +} +.form-control { + border-radius: 0; + width: 100% +} +.form-horizontal .control-label { + padding-top: 8px +} +.form-control:focus { + border-color: #CCD0D7; + box-shadow: none !important +} +legend { + font-size: 18px; + color: inherit +} +.form-horizontal .form-group { + margin-right: 0; + margin-left: 0 +} +.form-control-feedback { + margin-top: 8px; + height: 23px; + color: #bbb; + line-height: 24px; + font-size: 15px +} +.form-control-feedback.left { + border-right: 1px solid #ccc; + left: 13px +} +.form-control-feedback.right { + border-left: 1px solid #ccc; + right: 13px +} +.form-control.has-feedback-left { + padding-left: 45px +} +.form-control.has-feedback-right { + padding-right: 45px +} +.form-group { + margin-bottom: 10px +} +.validate { + margin-top: 10px +} +.invalid-form-error-message { + margin-top: 10px; + padding: 5px +} +.invalid-form-error-message.filled { + border-left: 2px solid #E74C3C +} +p.parsley-success { + color: #468847; + background-color: #DFF0D8; + border: 1px solid #D6E9C6 +} +p.parsley-error { + color: #B94A48; + background-color: #F2DEDE; + border: 1px solid #EED3D7 +} +ul.parsley-errors-list { + list-style: none; + color: #E74C3C; + padding-left: 0 +} +input.parsley-error, +textarea.parsley-error, +select.parsley-error { + background: #FAEDEC; + border: 1px solid #E85445 +} +.btn-group .parsley-errors-list { + display: none +} +.bad input, +.bad select, +.bad textarea { + border: 1px solid #CE5454; + box-shadow: 0 0 4px -2px #CE5454; + position: relative; + left: 0; + -moz-animation: .7s 1 shake linear; + -webkit-animation: 0.7s 1 shake linear +} +.item input, +.item textarea { + transition: 0.42s +} +.item .alert { + float: left; + margin: 0 0 0 20px; + padding: 3px 10px; + color: #FFF; + border-radius: 3px 4px 4px 3px; + background-color: #CE5454; + max-width: 170px; + white-space: pre; + position: relative; + left: -15px; + opacity: 0; + z-index: 1; + transition: 0.15s ease-out +} +.item .alert::after { + content: ''; + display: block; + height: 0; + width: 0; + border-color: transparent #CE5454 transparent transparent; + border-style: solid; + border-width: 11px 7px; + position: absolute; + left: -13px; + top: 1px +} +.item.bad .alert { + left: 0; + opacity: 1 +} +.inl-bl { + display: inline-block +} +.well .markup { + background: #fff; + color: #777; + position: relative; + padding: 45px 15px 15px; + margin: 15px 0 0 0; + background-color: #fff; + border-radius: 0 0 4px 4px; + box-shadow: none +} +.well .markup::after { + content: "Example"; + position: absolute; + top: 15px; + left: 15px; + font-size: 12px; + font-weight: bold; + color: #bbb; + text-transform: uppercase; + letter-spacing: 1px +} +.autocomplete-suggestions { + border: 1px solid #e4e4e4; + background: #F4F4F4; + cursor: default; + overflow: auto +} +.autocomplete-suggestion { + padding: 2px 5px; + font-size: 1.2em; + white-space: nowrap; + overflow: hidden +} +.autocomplete-selected { + background: #f0f0f0 +} +.autocomplete-suggestions strong { + font-weight: normal; + color: #3399ff; + font-weight: bolder +} +.btn { + border-radius: 3px +} +a.btn-success, +a.btn-primary, +a.btn-warning, +a.btn-danger { + color: #fff +} +.btn-success { + background: #26B99A; + border: 1px solid #169F85 +} +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + background: #169F85 +} +.btn-dark { + color: #E9EDEF; + background-color: #4B5F71; + border-color: #364B5F +} +.btn-dark:hover, +.btn-dark:focus, +.btn-dark:active, +.btn-dark.active, +.open .dropdown-toggle.btn-dark { + color: #FFFFFF; + background-color: #394D5F; + border-color: #394D5F +} +.btn-round { + border-radius: 30px +} +.btn.btn-app { + position: relative; + padding: 15px 5px; + margin: 0 0 10px 10px; + min-width: 80px; + height: 60px; + box-shadow: none; + border-radius: 0; + text-align: center; + color: #666; + border: 1px solid #ddd; + background-color: #fafafa; + font-size: 12px +} +.btn.btn-app>.fa, +.btn.btn-app>.glyphicon, +.btn.btn-app>.ion { + font-size: 20px; + display: block +} +.btn.btn-app:hover { + background: #f4f4f4; + color: #444; + border-color: #aaa +} +.btn.btn-app:active, +.btn.btn-app:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125) +} +.btn.btn-app>.badge { + position: absolute; + top: -3px; + right: -10px; + font-size: 10px; + font-weight: 400 +} +textarea { + padding: 10px; + vertical-align: top; + width: 200px +} +textarea:focus { + outline-style: solid; + outline-width: 2px +} +.btn_ { + display: inline-block; + padding: 3px 9px; + margin-bottom: 0; + font-size: 14px; + line-height: 20px; + text-align: center; + vertical-align: middle; + cursor: pointer; + color: #333333; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + background-color: #f5f5f5; + background-image: linear-gradient(to bottom, #fff, #e6e6e6); + background-repeat: repeat-x; + filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=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); + filter: progid: DXImageTransform.Microsoft.gradient(enabled=false); + border: 1px solid #cccccc; + border-bottom-color: #b3b3b3; + border-radius: 4px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05) +} +.bs-glyphicons { + margin: 0 -10px 20px; + overflow: hidden +} +.bs-glyphicons-list { + padding-left: 0; + list-style: none +} +.bs-glyphicons li { + float: left; + width: 25%; + height: 115px; + padding: 10px; + font-size: 10px; + line-height: 1.4; + text-align: center; + background-color: #f9f9f9; + border: 1px solid #fff +} +.bs-glyphicons .glyphicon { + margin-top: 5px; + margin-bottom: 10px; + font-size: 24px +} +.bs-glyphicons .glyphicon-class { + display: block; + text-align: center; + word-wrap: break-word +} +.bs-glyphicons li:hover { + color: #fff; + background-color: #1ABB9C +} +@media (min-width: 768px) { + .bs-glyphicons { + margin-right: 0; + margin-left: 0 + } + .bs-glyphicons li { + width: 12.5%; + font-size: 12px + } +} +.tagsinput { + border: 1px solid #CCC; + background: #FFF; + padding: 6px 6px 0; + width: 300px; + overflow-y: auto +} +span.tag { + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + display: block; + float: left; + padding: 5px 9px; + text-decoration: none; + background: #1ABB9C; + color: #F1F6F7; + margin-right: 5px; + font-weight: 500; + margin-bottom: 5px; + font-family: helvetica +} +span.tag a { + color: #F1F6F7 !important +} +.tagsinput span.tag a { + font-weight: bold; + color: #82ad2b; + text-decoration: none; + font-size: 11px +} +.tagsinput input { + width: 80px; + margin: 0px; + font-family: helvetica; + font-size: 13px; + border: 1px solid transparent; + padding: 3px; + background: transparent; + color: #000; + outline: 0px +} +.tagsinput div { + display: block; + float: left +} +.tags_clear { + clear: both; + width: 100%; + height: 0px +} +.not_valid { + background: #FBD8DB !important; + color: #90111A !important +} +ul.bar_tabs { + overflow: visible; + background: #F5F7FA; + height: 25px; + margin: 21px 0 14px; + padding-left: 14px; + position: relative; + z-index: 1; + width: 100%; + border-bottom: 1px solid #E6E9ED +} +ul.bar_tabs>li { + border: 1px solid #E6E9ED; + color: #333 !important; + margin-top: -17px; + margin-left: 8px; + background: #fff; + border-bottom: none; + border-radius: 4px 4px 0 0 +} +ul.bar_tabs>li.active { + border-right: 6px solid #D3D6DA; + border-top: 0; + margin-top: -15px +} +ul.bar_tabs>li a { + padding: 10px 17px; + background: #F5F7FA; + margin: 0; + border-top-right-radius: 0 +} +ul.bar_tabs>li a:hover { + border: 1px solid transparent +} +ul.bar_tabs>li.active a { + border-bottom: none +} +ul.bar_tabs.right { + padding-right: 14px +} +ul.bar_tabs.right li { + float: right +} +a:focus { + outline: none +} +ul.timeline li { + position: relative; + border-bottom: 1px solid #e8e8e8; + clear: both +} +.timeline .block { + margin: 0; + border-left: 3px solid #e8e8e8; + overflow: visible; + padding: 10px 15px; + margin-left: 105px +} +.timeline.widget { + min-width: 0; + max-width: inherit +} +.timeline.widget .block { + margin-left: 5px +} +.timeline .tags { + position: absolute; + top: 15px; + left: 0; + width: 84px +} +.timeline .tag { + display: block; + height: 30px; + font-size: 13px; + padding: 8px +} +.timeline .tag span { + display: block; + overflow: hidden; + width: 100%; + white-space: nowrap; + text-overflow: ellipsis +} +.tag { + line-height: 1; + background: #1ABB9C; + color: #fff !important +} +.tag:after { + content: " "; + height: 30px; + width: 0; + position: absolute; + left: 100%; + top: 0; + margin: 0; + pointer-events: none; + border-top: 14px solid transparent; + border-bottom: 14px solid transparent; + border-left: 11px solid #1ABB9C +} +.timeline h2.title { + position: relative; + font-size: 16px; + margin: 0 +} +.timeline h2.title:before { + content: ""; + position: absolute; + left: -23px; + top: 3px; + display: block; + width: 14px; + height: 14px; + border: 3px solid #d2d3d2; + border-radius: 14px; + background: #f9f9f9 +} +.timeline .byline { + padding: .25em 0 +} +.byline { + -webkit-font-smoothing: antialiased; + font-style: italic; + font-size: .9375em; + line-height: 1.3; + color: #aab6aa +} +ul.social li { + border: 0 +} +.social-sidebar, +.social-body { + float: right +} +.social-sidebar { + background: #EDEDED; + width: 22% +} +.social-body { + border: 1px solid #ccc; + width: 78% +} +.thumb img { + width: 50px; + height: 50px; + border-radius: 50% +} +.chat .thumb img { + width: 27px; + height: 27px; + border-radius: 50% +} +.chat .status { + float: left; + margin: 16px 0 0 -16px; + font-size: 14px; + font-weight: bold; + width: 12px; + height: 12px; + display: block; + border: 2px solid #FFF; + z-index: 12312; + border-radius: 50% +} +.chat .status.online { + background: #1ABB9C +} +.chat .status.away { + background: #F39C12 +} +.chat .status.offline { + background: #ccc +} +.chat .media-body { + padding-top: 5px +} +.dashboard_graph .x_title { + padding: 5px 5px 7px +} +.dashboard_graph .x_title h3 { + margin: 0; + font-weight: normal +} +.chart { + position: relative; + display: inline-block; + width: 110px; + height: 110px; + margin-top: 5px; + margin-bottom: 5px; + text-align: center +} +.chart canvas { + position: absolute; + top: 0; + left: 0 +} +.percent { + display: inline-block; + line-height: 110px; + z-index: 2; + font-size: 18px +} +.percent:after { + content: '%'; + margin-left: 0.1em; + font-size: .8em +} +.angular { + margin-top: 100px +} +.angular .chart { + margin-top: 0 +} +.widget { + min-width: 250px; + max-width: 310px +} +.widget_tally_box .btn-group button { + text-align: center +} +.widget_tally_box .btn-group button { + color: inherit; + font-weight: 500; + background-color: #f5f5f5; + border: 1px solid #e7e7e7 +} +ul.widget_tally, +ul.widget_tally li { + width: 100% +} +ul.widget_tally li { + padding: 2px 10px; + border-bottom: 1px solid #ECECEC; + padding-bottom: 4px +} +ul.widget_tally .month { + width: 70%; + float: left +} +ul.widget_tally .count { + width: 30%; + float: left; + text-align: right +} +.pie_bg { + border-bottom: 1px solid rgba(101, 204, 182, 0.16); + padding-bottom: 15px; + border-radius: 4px; + filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid: DXImageTransform.Microsoft.gradient(enabled=false); + padding-bottom: 10px; + box-shadow: 0 4px 6px -6px #222 +} +.widget_tally_box .flex { + display: -ms-flexbox; + display: flex +} +ul.widget_profile_box { + width: 100%; + height: 42px; + padding: 3px; + background: #ececec; + margin-top: 40px; + margin-left: 1px +} +ul.widget_profile_box li:first-child { + width: 25%; + float: left +} +ul.widget_profile_box li:first-child a { + float: left +} +ul.widget_profile_box li:last-child { + width: 25%; + float: right +} +ul.widget_profile_box li:last-child a { + float: right +} +ul.widget_profile_box li a { + font-size: 22px; + text-align: center; + width: 35px; + height: 35px; + border: 1px solid rgba(52, 73, 94, 0.44); + display: block; + border-radius: 50%; + padding: 0px +} +ul.widget_profile_box li a:hover { + color: #1ABB9C !important; + border: 1px solid #26b99a +} +ul.widget_profile_box li .profile_img { + width: 85px; + height: 85px; + margin: 0; + margin-top: -28px +} +.widget_tally_box p, +.widget_tally_box span { + text-align: center +} +.widget_tally_box .name { + text-align: center; + margin: 25px +} +.widget_tally_box .name_title { + text-align: center; + margin: 5px +} +.widget_tally_box ul.legend { + margin: 0 +} +.widget_tally_box ul.legend p, +.widget_tally_box ul.legend span { + text-align: left +} +.widget_tally_box ul.legend li .icon { + font-size: 20px; + float: left; + width: 14px +} +.widget_tally_box ul.legend li .name { + font-size: 14px; + margin: 5px 0 0 14px; + text-overflow: ellipsis; + float: left +} +.widget_tally_box ul.legend p { + display: inline-block; + margin: 0 +} +.widget_tally_box ul.verticle_bars li { + height: 140px; + width: 23% +} +.widget .verticle_bars li .progress.vertical.progress_wide { + width: 65% +} +ul.count2 { + width: 100%; + margin-left: 1px; + border: 1px solid #ddd; + border-left: 0; + border-right: 0; + padding: 10px 0 +} +ul.count2 li { + width: 30%; + text-align: center +} +ul.count2 li h3 { + font-weight: 400; + margin: 0 +} +ul.count2 li span { + font-weight: 300 +} +.divider { + border-bottom: 1px solid #ddd; + margin: 10px +} +.divider-dashed { + border-top: 1px dashed #e7eaec; + background-color: #ffffff; + height: 1px; + margin: 10px 0 +} +ul.messages { + padding: 0; + list-style: none +} +ul.messages li, +.tasks li { + border-bottom: 1px dotted #e6e6e6; + padding: 8px 0 +} +ul.messages li img.avatar, +img.avatar { + height: 32px; + width: 32px; + float: left; + display: inline-block; + border-radius: 2px; + padding: 2px; + background: #f7f7f7; + border: 1px solid #e6e6e6 +} +ul.messages li .message_date { + float: right; + text-align: right +} +ul.messages li .message_wrapper { + margin-left: 50px; + margin-right: 40px +} +ul.messages li .message_wrapper h4.heading { + font-weight: 600; + margin: 0; + cursor: pointer; + margin-bottom: 10px; + line-height: 100% +} +ul.messages li .message_wrapper blockquote { + padding: 0px 10px; + margin: 0; + border-left: 5px solid #eee +} +ul.user_data li { + margin-bottom: 6px +} +ul.user_data li p { + margin-bottom: 0 +} +ul.user_data li .progress { + width: 90% +} +.project_progress .progress { + margin-bottom: 3px !important; + margin-top: 5px +} +.projects .list-inline { + margin: 0 +} +.profile_title { + background: #F5F7FA; + border: 0; + padding: 7px 0; + display: -ms-flexbox; + display: flex +} +ul.stats-overview { + border-bottom: 1px solid #e8e8e8; + padding-bottom: 10px; + margin-bottom: 10px +} +ul.stats-overview li { + display: inline-block; + text-align: center; + padding: 0 15px; + width: 30%; + font-size: 14px; + border-right: 1px solid #e8e8e8 +} +ul.stats-overview li:last-child { + border-right: 0 +} +ul.stats-overview li .name { + font-size: 12px +} +ul.stats-overview li .value { + font-size: 14px; + font-weight: bold; + display: block +} +ul.stats-overview li:first-child { + padding-left: 0 +} +ul.project_files li { + margin-bottom: 5px +} +ul.project_files li a i { + width: 20px +} +.project_detail p { + margin-bottom: 10px +} +.project_detail p.title { + font-weight: bold; + margin-bottom: 0 +} +.avatar img { + border-radius: 50%; + max-width: 45px +} +.pricing { + background: #fff +} +.pricing .title { + background: #1ABB9C; + height: 110px; + color: #fff; + padding: 15px 0 0; + text-align: center +} +.pricing .title h2 { + text-transform: capitalize; + font-size: 18px; + border-radius: 5px 5px 0 0; + margin: 0; + font-weight: 400 +} +.pricing .title h1 { + font-size: 30px; + margin: 12px +} +.pricing .title span { + background: rgba(51, 51, 51, 0.28); + padding: 2px 5px +} +.pricing_features { + background: #FAFAFA; + padding: 20px 15px; + min-height: 230px; + font-size: 13.5px +} +.pricing_features ul li { + margin-top: 10px +} +.pricing_footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + text-align: center; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px +} +.pricing_footer p { + font-size: 13px; + padding: 10px 0 2px; + display: block +} +.ui-ribbon-container { + position: relative +} +.ui-ribbon-container .ui-ribbon-wrapper { + position: absolute; + overflow: hidden; + width: 85px; + height: 88px; + top: -3px; + right: -3px +} +.ui-ribbon-container.ui-ribbon-primary .ui-ribbon { + background-color: #5b90bf +} +.ui-ribbon-container .ui-ribbon { + position: relative; + display: block; + text-align: center; + font-size: 15px; + font-weight: 700; + color: #fff; + transform: rotate(45deg); + padding: 7px 0; + left: -5px; + top: 15px; + width: 120px; + line-height: 20px; + background-color: #555; + box-shadow: 0 0 3px rgba(0, 0, 0, 0.3) +} +.ui-ribbon-container.ui-ribbon-primary .ui-ribbon:after, +.ui-ribbon-container.ui-ribbon-primary .ui-ribbon:before { + border-top: 2px solid #5b90bf +} +.ui-ribbon-container .ui-ribbon:before { + left: 0; + bottom: -1px +} +.ui-ribbon-container .ui-ribbon:before { + right: 0 +} +.ui-ribbon-container .ui-ribbon:after, +.ui-ribbon-container .ui-ribbon:before { + position: absolute; + content: " "; + line-height: 0; + border-top: 2px solid #555; + border-left: 2px solid transparent; + border-right: 2px solid transparent +} +.thumbnail .image { + height: 120px; + overflow: hidden +} +.caption { + padding: 9px 5px; + background: #F7F7F7 +} +.caption p { + margin-bottom: 5px +} +.thumbnail { + height: 190px; + overflow: hidden +} +.view { + overflow: hidden; + position: relative; + text-align: center; + box-shadow: 1px 1px 2px #e6e6e6; + cursor: default +} +.view .mask, +.view .content { + position: absolute; + width: 100%; + overflow: hidden; + top: 0; + left: 0 +} +.view img { + display: block; + position: relative +} +.view .tools { + text-transform: uppercase; + color: #fff; + text-align: center; + position: relative; + font-size: 17px; + padding: 3px; + background: rgba(0, 0, 0, 0.35); + margin: 43px 0 0 0 +} +.mask.no-caption .tools { + margin: 90px 0 0 0 +} +.view .tools a { + display: inline-block; + color: #FFF; + font-size: 18px; + font-weight: 400; + padding: 0 4px +} +.view p { + font-family: Georgia, serif; + font-style: italic; + font-size: 12px; + position: relative; + color: #fff; + padding: 10px 20px 20px; + text-align: center +} +.view a.info { + display: inline-block; + text-decoration: none; + padding: 7px 14px; + background: #000; + color: #fff; + text-transform: uppercase; + box-shadow: 0 0 1px #000 +} +.view-first img { + transition: all 0.2s linear +} +.view-first .mask { + opacity: 0; + background-color: rgba(0, 0, 0, 0.5); + transition: all 0.4s ease-in-out +} +.view-first .tools { + transform: translateY(-100px); + opacity: 0; + transition: all 0.2s ease-in-out +} +.view-first p { + transform: translateY(100px); + opacity: 0; + transition: all 0.2s linear +} +.view-first:hover img { + transform: scale(1.1) +} +.view-first:hover .mask { + opacity: 1 +} +.view-first:hover .tools, +.view-first:hover p { + opacity: 1; + transform: translateY(0px) +} +.view-first:hover p { + transition-delay: 0.1s +} +.form-group.has-feedback span { + display: block !important; +} +.form-group .btn { + margin-bottom: -6px; +} +/*! + * bootstrap-vertical-tabs - v1.2.1 + * https://dbtek.github.io/bootstrap-vertical-tabs + * 2014-11-07 + * Copyright (c) 2014 İsmail Demirbilek + * License: MIT + */ + +.tabs-left, +.tabs-right { + border-bottom: none; + padding-top: 2px +} +.tabs-left { + border-right: 1px solid #F7F7F7 +} +.tabs-right { + border-left: 1px solid #F7F7F7 +} +.tabs-left>li, +.tabs-right>li { + float: none; + margin-bottom: 2px +} +.tabs-left>li { + margin-right: -1px +} +.tabs-right>li { + margin-left: -1px +} +.tabs-left>li.active>a, +.tabs-left>li.active>a:hover, +.tabs-left>li.active>a:focus { + border-bottom-color: #F7F7F7; + border-right-color: transparent +} +.tabs-right>li.active>a, +.tabs-right>li.active>a:hover, +.tabs-right>li.active>a:focus { + border-bottom: 1px solid #F7F7F7; + border-left-color: transparent +} +.tabs-left>li>a { + border-radius: 4px 0 0 4px; + margin-right: 0; + display: block; + background: #F7F7F7; + text-overflow: ellipsis; + overflow: hidden +} +.tabs-right>li>a { + border-radius: 0 4px 4px 0; + margin-right: 0; + background: #F7F7F7; + text-overflow: ellipsis; + overflow: hidden +} +.sideways { + margin-top: 50px; + border: none; + position: relative +} +.sideways>li { + height: 20px; + width: 120px; + margin-bottom: 100px +} +.sideways>li>a { + border-bottom: 1px solid #ddd; + border-right-color: transparent; + text-align: center; + border-radius: 4px 4px 0px 0px +} +.sideways>li.active>a, +.sideways>li.active>a:hover, +.sideways>li.active>a:focus { + border-bottom-color: transparent; + border-right-color: #ddd; + border-left-color: #ddd +} +.sideways.tabs-left { + left: -50px +} +.sideways.tabs-right { + right: -50px +} +.sideways.tabs-right>li { + transform: rotate(90deg) +} +.sideways.tabs-left>li { + transform: rotate(-90deg) +} +.morris-hover { + position: absolute; + z-index: 1000 +} +.morris-hover.morris-default-style { + padding: 6px; + color: #666; + background: rgba(243, 242, 243, 0.8); + border: solid 2px rgba(195, 194, 196, 0.8); + font-family: sans-serif; + font-size: 12px; + text-align: center +} +.morris-hover.morris-default-style .morris-hover-row-label { + font-weight: bold; + margin: 0.25em 0 +} +.morris-hover.morris-default-style .morris-hover-point { + white-space: nowrap; + margin: 0.1em 0 +} +.price { + font-size: 40px; + font-weight: 400; + color: #26B99A; + margin: 0 +} +.prod_title { + border-bottom: 1px solid #DFDFDF; + padding-bottom: 5px; + margin: 30px 0; + font-size: 20px; + font-weight: 400 +} +.product-image img { + width: 90% +} +.prod_color li { + margin: 0 10px +} +.prod_color li p { + margin-bottom: 0 +} +.prod_size li { + padding: 0 +} +.prod_color .color { + width: 25px; + height: 25px; + border: 2px solid rgba(51, 51, 51, 0.28) !important; + padding: 2px; + border-radius: 50px +} +.product_gallery a { + width: 100px; + height: 100px; + float: left; + margin: 10px; + border: 1px solid #e5e5e5 +} +.product_gallery a img { + width: 100%; + margin-top: 15px +} +.product_price { + margin: 20px 0; + padding: 5px 10px; + background-color: #FFFFFF; + text-align: left; + border: 2px dashed #E0E0E0 +} +.price-tax { + font-size: 18px +} +.product_social { + margin: 20px 0 +} +.product_social ul li a i { + font-size: 35px +} +.login { + background: #F7F7F7 +} +.login .fa-paw { + font-size: 26px +} +a.hiddenanchor { + display: none +} +.login_wrapper { + right: 0px; + margin: 0px auto; + margin-top: 5%; + max-width: 350px; + position: relative +} +.registration_form, +.login_form { + position: absolute; + top: 0px; + width: 100% +} +.registration_form { + z-index: 21; + opacity: 0; + width: 100% +} +.login_form { + z-index: 22 +} +#signup:target ~ .login_wrapper .registration_form, +#signin:target ~ .login_wrapper .login_form { + z-index: 22; + animation-name: fadeInLeft; + animation-delay: .1s +} +#signup:target ~ .login_wrapper .login_form, +#signin:target ~ .login_wrapper .registration_form { + animation-name: fadeOutLeft +} +.animate { + -webkit-animation-duration: 0.5s; + -webkit-animation-timing-function: ease; + -webkit-animation-fill-mode: both; + -moz-animation-duration: 0.5s; + -moz-animation-timing-function: ease; + -moz-animation-fill-mode: both; + -o-animation-duration: 0.5s; + -o-animation-timing-function: ease; + -o-animation-fill-mode: both; + -ms-animation-duration: 0.5s; + -ms-animation-timing-function: ease; + -ms-animation-fill-mode: both; + animation-duration: 0.5s; + animation-timing-function: ease; + animation-fill-mode: both +} +.login_box { + padding: 20px; + margin: auto +} +.left { + float: left +} +.alignleft { + float: left; + margin-right: 15px +} +.alignright { + float: right; + margin-left: 15px +} +.clearfix:after, +form:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden +} +.login_content { + margin: 0 auto; + padding: 25px 0 0; + position: relative; + text-align: center; + text-shadow: 0 1px 0 #fff; + min-width: 280px +} +.login_content a, +.login_content .btn-default:hover { + text-decoration: none +} +.login_content a:hover { + text-decoration: underline +} +.login_content h1 { + font: normal 25px Helvetica, Arial, sans-serif; + letter-spacing: -0.05em; + line-height: 20px; + margin: 10px 0 30px +} +.login_content h1:before, +.login_content h1:after { + content: ""; + height: 1px; + position: absolute; + top: 10px; + width: 27% +} +.login_content h1:after { + background: #7e7e7e; + background: linear-gradient(left, #7e7e7e 0%, #fff 100%); + right: 0 +} +.login_content h1:before { + background: #7e7e7e; + background: linear-gradient(right, #7e7e7e 0%, #fff 100%); + left: 0 +} +.login_content h1:before, +.login_content h1:after { + content: ""; + height: 1px; + position: absolute; + top: 10px; + width: 20% +} +.login_content h1:after { + background: #7e7e7e; + background: linear-gradient(left, #7e7e7e 0%, #fff 100%); + right: 0 +} +.login_content h1:before { + background: #7e7e7e; + background: linear-gradient(right, #7e7e7e 0%, #fff 100%); + left: 0 +} +.login_content form { + margin: 20px 0; + position: relative +} +.login_content form input[type="text"], +.login_content form input[type="email"], +.login_content form input[type="password"] { + border-radius: 3px; + -ms-box-shadow: 0 1px 0 #fff, 0 -2px 5px rgba(0, 0, 0, 0.08) inset; + -o-box-shadow: 0 1px 0 #fff, 0 -2px 5px rgba(0, 0, 0, 0.08) inset; + box-shadow: 0 1px 0 #fff, 0 -2px 5px rgba(0, 0, 0, 0.08) inset; + border: 1px solid #c8c8c8; + color: #777; + margin: 0 0 20px; + width: 100% +} +.login_content form input[type="text"]:focus, +.login_content form input[type="email"]:focus, +.login_content form input[type="password"]:focus { + -ms-box-shadow: 0 0 2px #ed1c24 inset; + -o-box-shadow: 0 0 2px #ed1c24 inset; + box-shadow: 0 0 2px #A97AAD inset; + background-color: #fff; + border: 1px solid #A878AF; + outline: none +} +#username { + background-position: 10px 10px !important +} +#password { + background-position: 10px -53px !important +} +.login_content form div a { + font-size: 12px; + margin: 10px 15px 0 0 +} +.reset_pass { + margin-top: 10px !important +} +.login_content div .reset_pass { + margin-top: 13px !important; + margin-right: 39px; + float: right +} +.separator { + border-top: 1px solid #D8D8D8; + margin-top: 10px; + padding-top: 10px +} +.button { + background: #f7f9fa; + background: linear-gradient(top, #f7f9fa 0%, #f0f0f0 100%); + filter: progid: DXImageTransform.Microsoft.gradient( startColorstr='#f7f9fa', endColorstr='#f0f0f0', GradientType=0); + -ms-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset; + -o-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset; + border-radius: 0 0 5px 5px; + border-top: 1px solid #CFD5D9; + padding: 15px 0 +} +.login_content form input[type="submit"], +#content form .submit { + float: left; + margin-left: 38px +} +.button a { + background: url(http://cssdeck.com/uploads/media/items/8/8bcLQqF.png) 0 -112px no-repeat; + color: #7E7E7E; + font-size: 17px; + padding: 2px 0 2px 40px; + text-decoration: none; + transition: all 0.3s ease +} +.button a:hover { + background-position: 0 -135px; + color: #00aeef +} +header { + width: 100% +} +#nprogress .bar { + background: #1ABB9C +} +#nprogress .peg { + box-shadow: 0 0 10px #1ABB9C, 0 0 5px #1ABB9C +} +#nprogress .spinner-icon { + border-top-color: #1ABB9C; + border-left-color: #1ABB9C +} +.editor-wrapper { + min-height: 250px; + background-color: white; + border-collapse: separate; + border: 1px solid #ccc; + padding: 4px; + box-sizing: content-box; + box-shadow: rgba(0, 0, 0, 0.07451) 0px 1px 1px 0px inset; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; + overflow: scroll; + outline: none +} +.voiceBtn { + width: 20px; + color: transparent; + background-color: transparent; + transform: scale(2, 2); + -webkit-transform: scale(2, 2); + -moz-transform: scale(2, 2); + border: transparent; + cursor: pointer; + box-shadow: none; + -webkit-box-shadow: none +} +div[data-role="editor-toolbar"] { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none +} +.dropdown-menu a { + cursor: pointer +} +.select2-container--default .select2-selection--single, +.select2-container--default .select2-selection--multiple { + background-color: #fff; + border: 1px solid #ccc; + border-radius: 0; + min-height: 38px +} +.select2-container--default .select2-selection--single .select2-selection__rendered { + color: #73879C; + padding-top: 5px +} +.select2-container--default .select2-selection--multiple .select2-selection__rendered { + padding-top: 3px +} +.select2-container--default .select2-selection--single .select2-selection__arrow { + height: 36px +} +.select2-container--default .select2-selection--multiple .select2-selection__choice, +.select2-container--default .select2-selection--multiple .select2-selection__clear { + margin-top: 2px; + border: none; + border-radius: 0; + padding: 3px 5px +} +.select2-container--default.select2-container--focus .select2-selection--multiple { + border: 1px solid #ccc +} +.switchery { + width: 32px; + height: 20px +} +.switchery>small { + width: 20px; + height: 20px +} +fieldset { + border: none; + margin: 0; + padding: 0 +} +.cropper .img-container, +.cropper .img-preview { + background-color: #f7f7f7; + width: 100%; + text-align: center +} +.cropper .img-container { + min-height: 200px; + max-height: 516px; + margin-bottom: 20px +} +@media (min-width: 768px) { + .cropper .img-container { + min-height: 516px + } +} +.cropper .img-container>img { + max-width: 100% +} +.cropper .docs-preview { + margin-right: -15px +} +.cropper .img-preview { + float: left; + margin-right: 10px; + margin-bottom: 10px; + overflow: hidden +} +.cropper .img-preview>img { + max-width: 100% +} +.cropper .preview-lg { + width: 263px; + height: 148px +} +.cropper .preview-md { + width: 139px; + height: 78px +} +.cropper .preview-sm { + width: 69px; + height: 39px +} +.cropper .preview-xs { + width: 35px; + height: 20px; + margin-right: 0 +} +.cropper .docs-data>.input-group { + margin-bottom: 10px +} +.cropper .docs-data>.input-group>label { + min-width: 80px +} +.cropper .docs-data>.input-group>span { + min-width: 50px +} +.cropper .docs-buttons>.btn, +.cropper .docs-buttons>.btn-group, +.cropper .docs-buttons>.form-control { + margin-right: 5px; + margin-bottom: 10px +} +.cropper .docs-toggles>.btn, +.cropper .docs-toggles>.btn-group, +.cropper .docs-toggles>.dropdown { + margin-bottom: 10px +} +.cropper .docs-tooltip { + display: block; + margin: -6px -12px; + padding: 6px 12px +} +.cropper .docs-tooltip>.icon { + margin: 0 -3px; + vertical-align: top +} +.cropper .tooltip-inner { + white-space: normal +} +.cropper .btn-upload .tooltip-inner, +.cropper .btn-toggle .tooltip-inner { + white-space: nowrap +} +.cropper .btn-toggle { + padding: 6px +} +.cropper .btn-toggle>.docs-tooltip { + margin: -6px; + padding: 6px +} +@media (max-width: 400px) { + .cropper .btn-group-crop { + margin-right: -15px !important + } + .cropper .btn-group-crop>.btn { + padding-left: 5px; + padding-right: 5px + } + .cropper .btn-group-crop .docs-tooltip { + margin-left: -5px; + margin-right: -5px; + padding-left: 5px; + padding-right: 5px + } +} +.cropper .docs-options .dropdown-menu { + width: 100% +} +.cropper .docs-options .dropdown-menu>li { + padding: 3px 20px +} +.cropper .docs-options .dropdown-menu>li:hover { + background-color: #f7f7f7 +} +.cropper .docs-options .dropdown-menu>li>label { + display: block +} +.cropper .docs-cropped .modal-body { + text-align: center +} +.cropper .docs-cropped .modal-body>img, +.cropper .docs-cropped .modal-body>canvas { + max-width: 100% +} +.cropper .docs-diagram .modal-dialog { + max-width: 352px +} +.cropper .docs-cropped canvas { + max-width: 100% +} +.form_wizard .stepContainer { + display: block; + position: relative; + margin: 0; + padding: 0; + border: 0 solid #CCC; + overflow-x: hidden +} +.wizard_horizontal ul.wizard_steps { + display: table; + list-style: none; + position: relative; + width: 100%; + margin: 0 0 20px +} +.wizard_horizontal ul.wizard_steps li { + display: table-cell; + text-align: center +} +.wizard_horizontal ul.wizard_steps li a, +.wizard_horizontal ul.wizard_steps li:hover { + display: block; + position: relative; + -moz-opacity: 1; + filter: alpha(opacity=100); + opacity: 1; + color: #666 +} +.wizard_horizontal ul.wizard_steps li a:before { + content: ""; + position: absolute; + height: 4px; + background: #ccc; + top: 20px; + width: 100%; + z-index: 4; + left: 0 +} +.wizard_horizontal ul.wizard_steps li a.disabled .step_no { + background: #ccc +} +.wizard_horizontal ul.wizard_steps li a .step_no { + width: 40px; + height: 40px; + line-height: 40px; + border-radius: 100px; + display: block; + margin: 0 auto 5px; + font-size: 16px; + text-align: center; + position: relative; + z-index: 5 +} +.wizard_horizontal ul.wizard_steps li a.selected:before, +.step_no { + background: #34495E; + color: #fff +} +.wizard_horizontal ul.wizard_steps li a.done:before, +.wizard_horizontal ul.wizard_steps li a.done .step_no { + background: #1ABB9C; + color: #fff +} +.wizard_horizontal ul.wizard_steps li:first-child a:before { + left: 50% +} +.wizard_horizontal ul.wizard_steps li:last-child a:before { + right: 50%; + width: 50%; + left: auto +} +.wizard_verticle .stepContainer { + width: 80%; + float: left; + padding: 0 10px +} +.actionBar { + width: 100%; + border-top: 1px solid #ddd; + padding: 10px 5px; + text-align: right; + margin-top: 10px +} +.actionBar .buttonDisabled { + cursor: not-allowed; + pointer-events: none; + opacity: .65; + filter: alpha(opacity=65); + box-shadow: none +} +.actionBar a { + margin: 0 3px +} +.wizard_verticle .wizard_content { + width: 80%; + float: left; + padding-left: 20px +} +.wizard_verticle ul.wizard_steps { + display: table; + list-style: none; + position: relative; + width: 20%; + float: left; + margin: 0 0 20px +} +.wizard_verticle ul.wizard_steps li { + display: list-item; + text-align: center +} +.wizard_verticle ul.wizard_steps li a { + height: 80px +} +.wizard_verticle ul.wizard_steps li a:first-child { + margin-top: 20px +} +.wizard_verticle ul.wizard_steps li a, +.wizard_verticle ul.wizard_steps li:hover { + display: block; + position: relative; + -moz-opacity: 1; + filter: alpha(opacity=100); + opacity: 1; + color: #666 +} +.wizard_verticle ul.wizard_steps li a:before { + content: ""; + position: absolute; + height: 100%; + background: #ccc; + top: 20px; + width: 4px; + z-index: 4; + left: 49% +} +.wizard_verticle ul.wizard_steps li a.disabled .step_no { + background: #ccc +} +.wizard_verticle ul.wizard_steps li a .step_no { + width: 40px; + height: 40px; + line-height: 40px; + border-radius: 100px; + display: block; + margin: 0 auto 5px; + font-size: 16px; + text-align: center; + position: relative; + z-index: 5 +} +.wizard_verticle ul.wizard_steps li a.selected:before, +.step_no { + background: #34495E; + color: #fff +} +.wizard_verticle ul.wizard_steps li a.done:before, +.wizard_verticle ul.wizard_steps li a.done .step_no { + background: #1ABB9C; + color: #fff +} +.wizard_verticle ul.wizard_steps li:first-child a:before { + left: 49% +} +.wizard_verticle ul.wizard_steps li:last-child a:before { + left: 49%; + left: auto; + width: 0 +} +.form_wizard .loader { + display: none +} +.form_wizard .msgBox { + display: none +} +.progress { + border-radius: 0 +} +.progress-bar-info { + background-color: #3498DB +} +.progress-bar-success { + background-color: #26B99A +} +.progress_summary .progress { + margin: 5px 0 12px !important +} +.progress_summary .row { + margin-bottom: 5px +} +.progress_summary .row .col-xs-2 { + padding: 0 +} +.progress_summary .more_info span { + text-align: right; + float: right +} +.progress_summary .data span { + text-align: right; + float: right +} +.progress_summary p { + margin-bottom: 3px; + width: 100% +} +.progress_title .left { + float: left; + text-align: left +} +.progress_title .right { + float: right; + text-align: right; + font-weight: 300 +} +.progress.progress_sm { + border-radius: 0; + margin-bottom: 18px; + height: 10px !important +} +.progress.progress_sm .progress-bar { + height: 10px !important +} +.dashboard_graph p { + margin: 0 0 4px +} +ul.verticle_bars { + width: 100% +} +ul.verticle_bars li { + width: 23%; + height: 200px; + margin: 0 +} +.progress.vertical.progress_wide { + width: 35px +} +.alert-success { + color: #ffffff; + background-color: rgba(38, 185, 154, 0.88); + border-color: rgba(38, 185, 154, 0.88) +} +.alert-info { + color: #E9EDEF; + background-color: rgba(52, 152, 219, 0.88); + border-color: rgba(52, 152, 219, 0.88) +} +.alert-warning { + color: #E9EDEF; + background-color: rgba(243, 156, 18, 0.88); + border-color: rgba(243, 156, 18, 0.88) +} +.alert-danger, +.alert-error { + color: #E9EDEF; + background-color: rgba(231, 76, 60, 0.88); + border-color: rgba(231, 76, 60, 0.88) +} +.ui-pnotify.dark .ui-pnotify-container { + color: #E9EDEF; + background-color: rgba(52, 73, 94, 0.88); + border-color: rgba(52, 73, 94, 0.88) +} +.custom-notifications { + position: fixed; + margin: 15px; + right: 0; + float: right; + width: 400px; + z-index: 4000; + bottom: 0 +} +ul.notifications { + float: right; + display: block; + margin-bottom: 7px; + padding: 0; + width: 100% +} +.notifications li { + float: right; + margin: 3px; + width: 36px; + box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.3) +} +.notifications li:last-child { + margin-left: 0 +} +.notifications a { + display: block; + text-align: center; + text-decoration: none; + text-transform: uppercase; + padding: 9px 8px +} +.tabbed_notifications .text { + padding: 5px 15px; + height: 140px; + border-radius: 7px; + box-shadow: 6px 6px 6px rgba(0, 0, 0, 0.3) +} +.tabbed_notifications div p { + display: inline-block +} +.tabbed_notifications h2 { + font-weight: bold; + text-transform: uppercase; + width: 80%; + float: left; + height: 20px; + text-overflow: ellipsis; + overflow: hidden; + display: block +} +.tabbed_notifications .close { + padding: 5px; + color: #E9EDEF; + float: right; + opacity: 1 +} +.fc-state-default { + background: #f5f5f5; + color: #73879C +} +.fc-state-down, +.fc-state-active { + color: #333; + background: #ccc +} +.dropzone { + min-height: 300px; + border: 1px solid #e5e5e5 +} + +/* +.x_content { + direction: rtl; +} +*/ + +.main_menu .label { + line-height: 11px; + margin-top: 4px; +} +@media (max-width: 460px) { + .dataTables_wrapper .col-sm-6 { + width: 100%; + margin-bottom: 5px; + } + .dataTables_wrapper .col-sm-6 .dataTables_filter { + float: none; + } +} + + +@media (max-width: 767px) { + .dataTables_length { float:none; } +} + + + + +/* CSS3 Checkbox */ + +.checkbox-input { display:block;position:relative; } +.checkbox-input:before { display:block;content:"";position:absolute;top:2px;left:0;height:20px;width:20px;background:red;border-radius:3px; } + + + #input + label:after { + content: 'click my input'; + color: blue; + } + + #input:focus + label:after { + content: 'not valid yet'; + color: blue; + } + + #input:valid + label:after { + content: 'looks good'; + color: red; + } + +/* CSS3 Checkbox - end */ + + + +/* +.checkbox { display: block;position:relative;cursor:pointer; } +.checkbox input { position:absolute;z-index:-1;opacity:0;left:0;top:0; } +.checkbox div { position:absolute;top:2px;left:0;height:20px;width:20px;background:#e6e6e6;border-radius:3px; } +.checkbox input:checked ~ div { background: #1ABC9C; } +.checkbox:hover input:not([disabled]):checked ~ div, +.checkbox input:checked:focus ~ div { background: #1ABC9C; } +.checkbox input:disabled ~ div { background: #1ABC9C;opacity: 0.6;pointer-events: none; } +.checkbox div:after { content: '';position: absolute;display: none; } +.checkbox input:checked ~ div:after { display: block; } +.checkbox-wp div:after { left: 7px;top: 3px;width: 7px;height: 11px;border: solid #fff;border-width: 0 2px 2px 0;transform: rotate(40deg); } +.checkbox-wp input:disabled ~ div:after { border-color: #F2F2F2; } + + +.checkbox-radio div { border-radius: 50%; } +.checkbox-radio div:after { left: 7px;top: 7px;height: 6px;width: 6px;border-radius: 50%;background: #fff; } +.checkbox-radio input:disabled ~ div:after { background: #F2F2F2; } + + +.checkbox, .radio { margin-top:-3px; } + +table thead .checkbox { margin-top:-7px;margin-top:-21px; } +table thead .checkbox.radio { margin-top:-7px;margin-top:-21px; } +*/ + + + + diff --git a/build/js/custom.js b/build/js/custom.js index 1acf545e3fb644b9283fb9f25e7a38ce2dcc5636..cb6c7040715aaa622cd025bb506e5a8be0bbcf52 100644 --- a/build/js/custom.js +++ b/build/js/custom.js @@ -187,11 +187,12 @@ $(document).ready(function() { }); // /Switchery + // iCheck $(document).ready(function() { - if ($("input.flat")[0]) { + if ($("input.checkbox")[0]) { $(document).ready(function () { - $('input.flat').iCheck({ + $('input.checkbox').iCheck({ checkboxClass: 'icheckbox_flat-green', radioClass: 'iradio_flat-green' }); @@ -200,6 +201,7 @@ $(document).ready(function() { }); // /iCheck + // Table $('table input').on('ifChecked', function () { checkState = ''; @@ -253,6 +255,8 @@ function countChecked() { } } + + // Accordion $(document).ready(function() { $(".expand").on("click", function () { diff --git a/build/js/custom.min.js b/build/js/custom.min.js index 627697b88d329379cc6c266299951d4c9cdaf51c..dd48380bb2fe19ac20ba3878e75b1708b0ecfcdc 100644 --- a/build/js/custom.min.js +++ b/build/js/custom.min.js @@ -1 +1 @@ -function countChecked(){"all"===checkState&&$(".bulk_action input[name='table_records']").iCheck("check"),"none"===checkState&&$(".bulk_action input[name='table_records']").iCheck("uncheck");var e=$(".bulk_action input[name='table_records']:checked").length;e?($(".column-title").hide(),$(".bulk-actions").show(),$(".action-cnt").html(e+" Records Selected")):($(".column-title").show(),$(".bulk-actions").hide())}!function(e,t){var n=function(e,t,n){var i;return function(){function c(){n||e.apply(a,o),i=null}var a=this,o=arguments;i?clearTimeout(i):n&&e.apply(a,o),i=setTimeout(c,t||100)}};jQuery.fn[t]=function(e){return e?this.bind("resize",n(e)):this.trigger(t)}}(jQuery,"smartresize");var CURRENT_URL=window.location.href.split("#")[0].split("?")[0],$BODY=$("body"),$MENU_TOGGLE=$("#menu_toggle"),$SIDEBAR_MENU=$("#sidebar-menu"),$SIDEBAR_FOOTER=$(".sidebar-footer"),$LEFT_COL=$(".left_col"),$RIGHT_COL=$(".right_col"),$NAV_MENU=$(".nav_menu"),$FOOTER=$("footer");$(document).ready(function(){var e=function(){$RIGHT_COL.css("min-height",$(window).height());var e=$BODY.outerHeight(),t=$BODY.hasClass("footer_fixed")?-10:$FOOTER.height(),n=$LEFT_COL.eq(1).height()+$SIDEBAR_FOOTER.height(),i=n>e?n:e;i-=$NAV_MENU.height()+t,$RIGHT_COL.css("min-height",i)};$SIDEBAR_MENU.find("a").on("click",function(t){var n=$(this).parent();n.is(".active")?(n.removeClass("active active-sm"),$("ul:first",n).slideUp(function(){e()})):(n.parent().is(".child_menu")||($SIDEBAR_MENU.find("li").removeClass("active active-sm"),$SIDEBAR_MENU.find("li ul").slideUp()),n.addClass("active"),$("ul:first",n).slideDown(function(){e()}))}),$MENU_TOGGLE.on("click",function(){$BODY.hasClass("nav-md")?($SIDEBAR_MENU.find("li.active ul").hide(),$SIDEBAR_MENU.find("li.active").addClass("active-sm").removeClass("active")):($SIDEBAR_MENU.find("li.active-sm ul").show(),$SIDEBAR_MENU.find("li.active-sm").addClass("active").removeClass("active-sm")),$BODY.toggleClass("nav-md nav-sm"),e()}),$SIDEBAR_MENU.find('a[href="'+CURRENT_URL+'"]').parent("li").addClass("current-page"),$SIDEBAR_MENU.find("a").filter(function(){return this.href==CURRENT_URL}).parent("li").addClass("current-page").parents("ul").slideDown(function(){e()}).parent().addClass("active"),$(window).smartresize(function(){e()}),e(),$.fn.mCustomScrollbar&&$(".menu_fixed").mCustomScrollbar({autoHideScrollbar:!0,theme:"minimal",mouseWheel:{preventDefault:!0}})}),$(document).ready(function(){$(".collapse-link").on("click",function(){var e=$(this).closest(".x_panel"),t=$(this).find("i"),n=e.find(".x_content");e.attr("style")?n.slideToggle(200,function(){e.removeAttr("style")}):(n.slideToggle(200),e.css("height","auto")),t.toggleClass("fa-chevron-up fa-chevron-down")}),$(".close-link").click(function(){var e=$(this).closest(".x_panel");e.remove()})}),$(document).ready(function(){$('[data-toggle="tooltip"]').tooltip({container:"body"})}),$(".progress .progress-bar")[0]&&$(".progress .progress-bar").progressbar(),$(document).ready(function(){if($(".js-switch")[0]){var e=Array.prototype.slice.call(document.querySelectorAll(".js-switch"));e.forEach(function(e){new Switchery(e,{color:"#26B99A"})})}}),$(document).ready(function(){$("input.flat")[0]&&$(document).ready(function(){$("input.flat").iCheck({checkboxClass:"icheckbox_flat-green",radioClass:"iradio_flat-green"})})}),$("table input").on("ifChecked",function(){checkState="",$(this).parent().parent().parent().addClass("selected"),countChecked()}),$("table input").on("ifUnchecked",function(){checkState="",$(this).parent().parent().parent().removeClass("selected"),countChecked()});var checkState="";$(".bulk_action input").on("ifChecked",function(){checkState="",$(this).parent().parent().parent().addClass("selected"),countChecked()}),$(".bulk_action input").on("ifUnchecked",function(){checkState="",$(this).parent().parent().parent().removeClass("selected"),countChecked()}),$(".bulk_action input#check-all").on("ifChecked",function(){checkState="all",countChecked()}),$(".bulk_action input#check-all").on("ifUnchecked",function(){checkState="none",countChecked()}),$(document).ready(function(){$(".expand").on("click",function(){$(this).next().slideToggle(200),$expand=$(this).find(">:first-child"),"+"==$expand.text()?$expand.text("-"):$expand.text("+")})}),"undefined"!=typeof NProgress&&($(document).ready(function(){NProgress.start()}),$(window).load(function(){NProgress.done()})); \ No newline at end of file +function countChecked(){"all"===checkState&&$(".bulk_action .checkbox input[name='table_records']").iCheck("check"),"none"===checkState&&$(".bulk_action .checkbox input[name='table_records']").iCheck("uncheck");var e=$(".bulk_action .checkbox input[name='table_records']:checked").length;e?($(".column-title").hide(),$(".bulk-actions").show(),$(".action-cnt").html(e+" Records Selected")):($(".column-title").show(),$(".bulk-actions").hide())}!function(e,t){var n=function(e,t,n){var i;return function(){function c(){n||e.apply(a,o),i=null}var a=this,o=arguments;i?clearTimeout(i):n&&e.apply(a,o),i=setTimeout(c,t||100)}};jQuery.fn[t]=function(e){return e?this.bind("resize",n(e)):this.trigger(t)}}(jQuery,"smartresize");var CURRENT_URL=window.location.href.split("#")[0].split("?")[0],$BODY=$("body"),$MENU_TOGGLE=$("#menu_toggle"),$SIDEBAR_MENU=$("#sidebar-menu"),$SIDEBAR_FOOTER=$(".sidebar-footer"),$LEFT_COL=$(".left_col"),$RIGHT_COL=$(".right_col"),$NAV_MENU=$(".nav_menu"),$FOOTER=$("footer");$(document).ready(function(){var e=function(){$RIGHT_COL.css("min-height",$(window).height());var e=$BODY.outerHeight(),t=$BODY.hasClass("footer_fixed")?-10:$FOOTER.height(),n=$LEFT_COL.eq(1).height()+$SIDEBAR_FOOTER.height(),i=n>e?n:e;i-=$NAV_MENU.height()+t,$RIGHT_COL.css("min-height",i)};$SIDEBAR_MENU.find("a").on("click",function(t){var n=$(this).parent();n.is(".active")?(n.removeClass("active active-sm"),$("ul:first",n).slideUp(function(){e()})):(n.parent().is(".child_menu")||($SIDEBAR_MENU.find("li").removeClass("active active-sm"),$SIDEBAR_MENU.find("li ul").slideUp()),n.addClass("active"),$("ul:first",n).slideDown(function(){e()}))}),$MENU_TOGGLE.on("click",function(){$BODY.hasClass("nav-md")?($SIDEBAR_MENU.find("li.active ul").hide(),$SIDEBAR_MENU.find("li.active").addClass("active-sm").removeClass("active")):($SIDEBAR_MENU.find("li.active-sm ul").show(),$SIDEBAR_MENU.find("li.active-sm").addClass("active").removeClass("active-sm")),$BODY.toggleClass("nav-md nav-sm"),e()}),$SIDEBAR_MENU.find('a[href="'+CURRENT_URL+'"]').parent("li").addClass("current-page"),$SIDEBAR_MENU.find("a").filter(function(){return this.href==CURRENT_URL}).parent("li").addClass("current-page").parents("ul").slideDown(function(){e()}).parent().addClass("active"),$(window).smartresize(function(){e()}),e(),$.fn.mCustomScrollbar&&$(".menu_fixed").mCustomScrollbar({autoHideScrollbar:!0,theme:"minimal",mouseWheel:{preventDefault:!0}})}),$(document).ready(function(){$(".collapse-link").on("click",function(){var e=$(this).closest(".x_panel"),t=$(this).find("i"),n=e.find(".x_content");e.attr("style")?n.slideToggle(200,function(){e.removeAttr("style")}):(n.slideToggle(200),e.css("height","auto")),t.toggleClass("fa-chevron-up fa-chevron-down")}),$(".close-link").click(function(){var e=$(this).closest(".x_panel");e.remove()})}),$(document).ready(function(){$('[data-toggle="tooltip"]').tooltip({container:"body"})}),$(".progress .progress-bar")[0]&&$(".progress .progress-bar").progressbar(),$(document).ready(function(){if($(".js-switch")[0]){var e=Array.prototype.slice.call(document.querySelectorAll(".js-switch"));e.forEach(function(e){new Switchery(e,{color:"#26B99A"})})}}),/*$(document).ready(function(){$(".checkbox input")[0]&&$(document).ready(function(){$(".checkbox input").iCheck({checkboxClass:"icheckbox_flat-green",radioClass:"iradio_flat-green"})})}),*/$("table .checkbox input").on("ifChecked",function(){checkState="",$(this).parent().parent().parent().addClass("selected"),countChecked()}),$("table .checkbox input").on("ifUnchecked",function(){checkState="",$(this).parent().parent().parent().removeClass("selected"),countChecked()});var checkState="";$(".bulk_action .checkbox input").on("ifChecked",function(){checkState="",$(this).parent().parent().parent().addClass("selected"),countChecked()}),$(".bulk_action .checkbox input").on("ifUnchecked",function(){checkState="",$(this).parent().parent().parent().removeClass("selected"),countChecked()}),$(".bulk_action .checkbox input#check-all").on("ifChecked",function(){checkState="all",countChecked()}),$(".bulk_action .checkbox input#check-all").on("ifUnchecked",function(){checkState="none",countChecked()}),$(document).ready(function(){$(".expand").on("click",function(){$(this).next().slideToggle(200),$expand=$(this).find(">:first-child"),"+"==$expand.text()?$expand.text("-"):$expand.text("+")})}),"undefined"!=typeof NProgress&&($(document).ready(function(){NProgress.start()}),$(window).load(function(){NProgress.done()})); \ No newline at end of file diff --git a/build/js/custom2.js b/build/js/custom2.js new file mode 100644 index 0000000000000000000000000000000000000000..7e2f6b37151982a0d0bbed0eb819e51bb3f009bc --- /dev/null +++ b/build/js/custom2.js @@ -0,0 +1,285 @@ +/** + * Resize function without multiple trigger + * + * Usage: + * $(window).smartresize(function(){ + * // code here + * }); + */ +(function($,sr){ + // debouncing function from John Hann + // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/ + var debounce = function (func, threshold, execAsap) { + var timeout; + + return function debounced () { + var obj = this, args = arguments; + function delayed () { + if (!execAsap) + func.apply(obj, args); + timeout = null; + } + + if (timeout) + clearTimeout(timeout); + else if (execAsap) + func.apply(obj, args); + + timeout = setTimeout(delayed, threshold || 100); + }; + }; + + // smartresize + jQuery.fn[sr] = function(fn){ return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); }; + +})(jQuery,'smartresize'); +/** + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +var CURRENT_URL = window.location.href.split('#')[0].split('?')[0], + $BODY = $('body'), + $MENU_TOGGLE = $('#menu_toggle'), + $SIDEBAR_MENU = $('#sidebar-menu'), + $SIDEBAR_FOOTER = $('.sidebar-footer'), + $LEFT_COL = $('.left_col'), + $RIGHT_COL = $('.right_col'), + $NAV_MENU = $('.nav_menu'), + $FOOTER = $('footer'); + +// Sidebar +$(document).ready(function() { + // TODO: This is some kind of easy fix, maybe we can improve this + var setContentHeight = function () { + // reset height + $RIGHT_COL.css('min-height', $(window).height()); + + var bodyHeight = $BODY.outerHeight(), + footerHeight = $BODY.hasClass('footer_fixed') ? -10 : $FOOTER.height(), + leftColHeight = $LEFT_COL.eq(1).height() + $SIDEBAR_FOOTER.height(), + contentHeight = bodyHeight < leftColHeight ? leftColHeight : bodyHeight; + + // normalize content + contentHeight -= $NAV_MENU.height() + footerHeight; + + $RIGHT_COL.css('min-height', contentHeight); + }; + + $SIDEBAR_MENU.find('a').on('click', function(ev) { + var $li = $(this).parent(); + + if ($li.is('.active')) { + $li.removeClass('active active-sm'); + $('ul:first', $li).slideUp(function() { + setContentHeight(); + }); + } else { + // prevent closing menu if we are on child menu + if (!$li.parent().is('.child_menu')) { + $SIDEBAR_MENU.find('li').removeClass('active active-sm'); + $SIDEBAR_MENU.find('li ul').slideUp(); + } + + $li.addClass('active'); + + $('ul:first', $li).slideDown(function() { + setContentHeight(); + }); + } + }); + + // toggle small or large menu + $MENU_TOGGLE.on('click', function() { + if ($BODY.hasClass('nav-md')) { + $SIDEBAR_MENU.find('li.active ul').hide(); + $SIDEBAR_MENU.find('li.active').addClass('active-sm').removeClass('active'); + } else { + $SIDEBAR_MENU.find('li.active-sm ul').show(); + $SIDEBAR_MENU.find('li.active-sm').addClass('active').removeClass('active-sm'); + } + + $BODY.toggleClass('nav-md nav-sm'); + + setContentHeight(); + }); + + // check active menu + $SIDEBAR_MENU.find('a[href="' + CURRENT_URL + '"]').parent('li').addClass('current-page'); + + $SIDEBAR_MENU.find('a').filter(function () { + return this.href == CURRENT_URL; + }).parent('li').addClass('current-page').parents('ul').slideDown(function() { + setContentHeight(); + }).parent().addClass('active'); + + // recompute content when resizing + $(window).smartresize(function(){ + setContentHeight(); + }); + + setContentHeight(); + + // fixed sidebar + if ($.fn.mCustomScrollbar) { + $('.menu_fixed').mCustomScrollbar({ + autoHideScrollbar: true, + theme: 'minimal', + mouseWheel:{ preventDefault: true } + }); + } +}); +// /Sidebar + +// Panel toolbox +$(document).ready(function() { + $('.collapse-link').on('click', function() { + var $BOX_PANEL = $(this).closest('.x_panel'), + $ICON = $(this).find('i'), + $BOX_CONTENT = $BOX_PANEL.find('.x_content'); + + // fix for some div with hardcoded fix class + if ($BOX_PANEL.attr('style')) { + $BOX_CONTENT.slideToggle(200, function(){ + $BOX_PANEL.removeAttr('style'); + }); + } else { + $BOX_CONTENT.slideToggle(200); + $BOX_PANEL.css('height', 'auto'); + } + + $ICON.toggleClass('fa-chevron-up fa-chevron-down'); + }); + + $('.close-link').click(function () { + var $BOX_PANEL = $(this).closest('.x_panel'); + + $BOX_PANEL.remove(); + }); +}); +// /Panel toolbox + +// Tooltip +$(document).ready(function() { + $('[data-toggle="tooltip"]').tooltip({ + container: 'body' + }); +}); +// /Tooltip + +// Progressbar +if ($(".progress .progress-bar")[0]) { + $('.progress .progress-bar').progressbar(); +} +// /Progressbar + +// Switchery +$(document).ready(function() { + if ($(".js-switch")[0]) { + var elems = Array.prototype.slice.call(document.querySelectorAll('.js-switch')); + elems.forEach(function (html) { + var switchery = new Switchery(html, { + color: '#26B99A' + }); + }); + } +}); +// /Switchery + +/* +// iCheck +$(document).ready(function() { + if ($(".checkbox input")[0]) { + $(document).ready(function () { + $('.checkbox input').iCheck({ + checkboxClass: 'icheckbox_flat-green', + radioClass: 'iradio_flat-green' + }); + }); + } +}); +// /iCheck +*/ + +// Table +/* +$('table .checkbox-action').on('ifChecked', function () { + checkState = ''; + $(this).parent().parent().parent().addClass('selected'); + countChecked(); +}); + +$('table .checkbox-action').on('ifUnchecked', function () { + checkState = ''; + $(this).parent().parent().parent().removeClass('selected'); + countChecked(); +}); + +var checkState = ''; + +$('.bulk_action .checkbox-action').on('ifChecked', function () { + checkState = ''; + $(this).parent().parent().parent().addClass('selected'); + countChecked(); +}); +$('.bulk_action .checkbox-action').on('ifUnchecked', function () { + checkState = ''; + $(this).parent().parent().parent().removeClass('selected'); + countChecked(); +}); +$('.bulk_action .checkbox-action#check-all').on('ifChecked', function () { + checkState = 'all'; + countChecked(); +}); +$('.bulk_action .checkbox-action#check-all').on('ifUnchecked', function () { + checkState = 'none'; + countChecked(); +}); + +function countChecked() { + if (checkState === 'all') { + $(".bulk_action .checkbox-action[name='table_records']").iCheck('check'); + } + if (checkState === 'none') { + $(".bulk_action .checkbox-action[name='table_records']").iCheck('uncheck'); + } + + var checkCount = $(".bulk_action .checkbox-action[name='table_records']:checked").length; + + if (checkCount) { + $('.column-title').hide(); + $('.bulk-actions').show(); + $('.action-cnt').html(checkCount + ' Records Selected'); + } else { + $('.column-title').show(); + $('.bulk-actions').hide(); + } +} +*/ + + +// Accordion +$(document).ready(function() { + $(".expand").on("click", function () { + $(this).next().slideToggle(200); + $expand = $(this).find(">:first-child"); + + if ($expand.text() == "+") { + $expand.text("-"); + } else { + $expand.text("+"); + } + }); +}); + +// NProgress +if (typeof NProgress != 'undefined') { + $(document).ready(function () { + NProgress.start(); + }); + + $(window).load(function () { + NProgress.done(); + }); +} diff --git a/build/js/new-custom.js b/build/js/new-custom.js new file mode 100644 index 0000000000000000000000000000000000000000..75a02f056bab73e1f744d18271ac29ead74fd2ff --- /dev/null +++ b/build/js/new-custom.js @@ -0,0 +1,4931 @@ + + + /** + * Resize function without multiple trigger + * + * Usage: + * $(window).smartresize(function(){ + * // code here + * }); + */ + (function($,sr){ + // debouncing function from John Hann + // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/ + var debounce = function (func, threshold, execAsap) { + var timeout; + + return function debounced () { + var obj = this, args = arguments; + function delayed () { + if (!execAsap) + func.apply(obj, args); + timeout = null; + } + + if (timeout) + clearTimeout(timeout); + else if (execAsap) + func.apply(obj, args); + + timeout = setTimeout(delayed, threshold || 100); + }; + }; + + // smartresize + jQuery.fn[sr] = function(fn){ return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); }; + + })(jQuery,'smartresize'); + /** + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + + var CURRENT_URL = window.location.href.split('#')[0].split('?')[0], + $BODY = $('body'), + $MENU_TOGGLE = $('#menu_toggle'), + $SIDEBAR_MENU = $('#sidebar-menu'), + $SIDEBAR_FOOTER = $('.sidebar-footer'), + $LEFT_COL = $('.left_col'), + $RIGHT_COL = $('.right_col'), + $NAV_MENU = $('.nav_menu'), + $FOOTER = $('footer'); + + // Sidebar + function init_sidebar() { + // TODO: This is some kind of easy fix, maybe we can improve this + var setContentHeight = function () { + // reset height + $RIGHT_COL.css('min-height', $(window).height()); + + var bodyHeight = $BODY.outerHeight(), + footerHeight = $BODY.hasClass('footer_fixed') ? -10 : $FOOTER.height(), + leftColHeight = $LEFT_COL.eq(1).height() + $SIDEBAR_FOOTER.height(), + contentHeight = bodyHeight < leftColHeight ? leftColHeight : bodyHeight; + + // normalize content + contentHeight -= $NAV_MENU.height() + footerHeight; + + $RIGHT_COL.css('min-height', contentHeight); + }; + + $SIDEBAR_MENU.find('a').on('click', function(ev) { + var $li = $(this).parent(); + + if ($li.is('.active')) { + $li.removeClass('active active-sm'); + $('ul:first', $li).slideUp(function() { + setContentHeight(); + }); + } else { + // prevent closing menu if we are on child menu + if (!$li.parent().is('.child_menu')) { + $SIDEBAR_MENU.find('li').removeClass('active active-sm'); + $SIDEBAR_MENU.find('li ul').slideUp(); + } + + $li.addClass('active'); + + $('ul:first', $li).slideDown(function() { + setContentHeight(); + }); + } + }); + + // toggle small or large menu + $MENU_TOGGLE.on('click', function() { + if ($BODY.hasClass('nav-md')) { + $SIDEBAR_MENU.find('li.active ul').hide(); + $SIDEBAR_MENU.find('li.active').addClass('active-sm').removeClass('active'); + } else { + $SIDEBAR_MENU.find('li.active-sm ul').show(); + $SIDEBAR_MENU.find('li.active-sm').addClass('active').removeClass('active-sm'); + } + + $BODY.toggleClass('nav-md nav-sm'); + + setContentHeight(); + }); + + // check active menu + $SIDEBAR_MENU.find('a[href="' + CURRENT_URL + '"]').parent('li').addClass('current-page'); + + $SIDEBAR_MENU.find('a').filter(function () { + return this.href == CURRENT_URL; + }).parent('li').addClass('current-page').parents('ul').slideDown(function() { + setContentHeight(); + }).parent().addClass('active'); + + // recompute content when resizing + $(window).smartresize(function(){ + setContentHeight(); + }); + + setContentHeight(); + + // fixed sidebar + if ($.fn.mCustomScrollbar) { + $('.menu_fixed').mCustomScrollbar({ + autoHideScrollbar: true, + theme: 'minimal', + mouseWheel:{ preventDefault: true } + }); + } + }; + // /Sidebar + + /* PROGRESSBAR */ + + if ($(".progress .progress-bar")[0]) { + $('.progress .progress-bar').progressbar(); + } + + /* + Chart.defaults.global.legend = { + enabled: false + }; +*/ + /* KNOB */ + + function init_knob() { + + if( typeof (knob) === 'undefined'){ return; } + console.log('init_knob'); + + $(".knob").knob({ + change: function(value) { + //console.log("change : " + value); + }, + release: function(value) { + //console.log(this.$.attr('value')); + console.log("release : " + value); + }, + cancel: function() { + console.log("cancel : ", this); + }, + /*format : function (value) { + return value + '%'; + },*/ + draw: function() { + + // "tron" case + if (this.$.data('skin') == 'tron') { + + this.cursorExt = 0.3; + + var a = this.arc(this.cv) // Arc + , + pa // Previous arc + , r = 1; + + this.g.lineWidth = this.lineWidth; + + if (this.o.displayPrevious) { + pa = this.arc(this.v); + this.g.beginPath(); + this.g.strokeStyle = this.pColor; + this.g.arc(this.xy, this.xy, this.radius - this.lineWidth, pa.s, pa.e, pa.d); + this.g.stroke(); + } + + this.g.beginPath(); + this.g.strokeStyle = r ? this.o.fgColor : this.fgColor; + this.g.arc(this.xy, this.xy, this.radius - this.lineWidth, a.s, a.e, a.d); + this.g.stroke(); + + this.g.lineWidth = 2; + this.g.beginPath(); + this.g.strokeStyle = this.o.fgColor; + this.g.arc(this.xy, this.xy, this.radius - this.lineWidth + 1 + this.lineWidth * 2 / 3, 0, 2 * Math.PI, false); + this.g.stroke(); + + return false; + } + } + + }); + + // Example of infinite knob, iPod click wheel + var v, up = 0, + down = 0, + i = 0, + $idir = $("div.idir"), + $ival = $("div.ival"), + incr = function() { + i++; + $idir.show().html("+").fadeOut(); + $ival.html(i); + }, + decr = function() { + i--; + $idir.show().html("-").fadeOut(); + $ival.html(i); + }; + $("input.infinite").knob({ + min: 0, + max: 20, + stopper: false, + change: function() { + if (v > this.cv) { + if (up) { + decr(); + up = 0; + } else { + up = 1; + down = 0; + } + } else { + if (v < this.cv) { + if (down) { + incr(); + down = 0; + } else { + down = 1; + up = 0; + } + } + } + v = this.cv; + } + }); + + }; + + + /* VALIDATOR */ + + function init_validator () { + + if( typeof (validator) === 'undefined'){ return; } + console.log('init_validator'); + + // initialize the validator function + validator.message.date = 'not a real date'; + + // validate a field on "blur" event, a 'select' on 'change' event & a '.reuired' classed multifield on 'keyup': + $('form') + .on('blur', 'input[required], input.optional, select.required', validator.checkField) + .on('change', 'select.required', validator.checkField) + .on('keypress', 'input[required][pattern]', validator.keypress); + + $('.multi.required').on('keyup blur', 'input', function() { + validator.checkField.apply($(this).siblings().last()[0]); + }); + + $('form').submit(function(e) { + e.preventDefault(); + var submit = true; + + // evaluate the form using generic validaing + if (!validator.checkAll($(this))) { + submit = false; + } + + if (submit) + this.submit(); + + return false; + }); + + }; + + /* VALIDATOR --- end */ + + /* CHARTS */ + + /* + function init_chart_line(){ + + if( typeof (Chart) === 'undefined'){ return; } + console.log('init_chart_line'); + + // Line chart + var ctx = document.getElementById("lineChart"); + var lineChart = new Chart(ctx, { + type: 'line', + data: { + labels: ["January", "February", "March", "April", "May", "June", "July"], + datasets: [{ + label: "My First dataset", + backgroundColor: "rgba(38, 185, 154, 0.31)", + borderColor: "rgba(38, 185, 154, 0.7)", + pointBorderColor: "rgba(38, 185, 154, 0.7)", + pointBackgroundColor: "rgba(38, 185, 154, 0.7)", + pointHoverBackgroundColor: "#fff", + pointHoverBorderColor: "rgba(220,220,220,1)", + pointBorderWidth: 1, + data: [31, 74, 6, 39, 20, 85, 7] + }, { + label: "My Second dataset", + backgroundColor: "rgba(3, 88, 106, 0.3)", + borderColor: "rgba(3, 88, 106, 0.70)", + pointBorderColor: "rgba(3, 88, 106, 0.70)", + pointBackgroundColor: "rgba(3, 88, 106, 0.70)", + pointHoverBackgroundColor: "#fff", + pointHoverBorderColor: "rgba(151,187,205,1)", + pointBorderWidth: 1, + data: [82, 23, 66, 9, 99, 4, 2] + }] + }, + }); + + } + */ + + + /* + function init_bar_chart(){ + + if(typeof (Chart) === 'undefined'){ return; } + console.log('init_bar_chart'); + + + // Bar chart + var ctx = document.getElementById("mybarChart"); + var mybarChart = new Chart(ctx, { + type: 'bar', + data: { + labels: ["January", "February", "March", "April", "May", "June", "July"], + datasets: [{ + label: '# of Votes', + backgroundColor: "#26B99A", + data: [51, 30, 40, 28, 92, 50, 45] + }, { + label: '# of Votes', + backgroundColor: "#03586A", + data: [41, 56, 25, 48, 72, 34, 12] + }] + }, + + options: { + scales: { + yAxes: [{ + ticks: { + beginAtZero: true + } + }] + } + } + }); + + } + + function init_doughnut_chart(){ + + if(typeof (Chart) === 'undefined'){ return; } + console.log('init_doughnut_chart'); + + // Doughnut chart + var ctx = document.getElementById("canvasDoughnut"); + var data = { + labels: [ + "Dark Grey", + "Purple Color", + "Gray Color", + "Green Color", + "Blue Color" + ], + datasets: [{ + data: [120, 50, 140, 180, 100], + backgroundColor: [ + "#455C73", + "#9B59B6", + "#BDC3C7", + "#26B99A", + "#3498DB" + ], + hoverBackgroundColor: [ + "#34495E", + "#B370CF", + "#CFD4D8", + "#36CAAB", + "#49A9EA" + ] + + }] + }; + + var canvasDoughnut = new Chart(ctx, { + type: 'doughnut', + tooltipFillColor: "rgba(51, 51, 51, 0.55)", + data: data + }); + + } + + function init_radar_chart(){ + + if(typeof (Chart) === 'undefined'){ return; } + console.log('init_radar_chart'); + + // Radar chart + var ctx = document.getElementById("canvasRadar"); + var data = { + labels: ["Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running"], + datasets: [{ + label: "My First dataset", + backgroundColor: "rgba(3, 88, 106, 0.2)", + borderColor: "rgba(3, 88, 106, 0.80)", + pointBorderColor: "rgba(3, 88, 106, 0.80)", + pointBackgroundColor: "rgba(3, 88, 106, 0.80)", + pointHoverBackgroundColor: "#fff", + pointHoverBorderColor: "rgba(220,220,220,1)", + data: [65, 59, 90, 81, 56, 55, 40] + }, { + label: "My Second dataset", + backgroundColor: "rgba(38, 185, 154, 0.2)", + borderColor: "rgba(38, 185, 154, 0.85)", + pointColor: "rgba(38, 185, 154, 0.85)", + pointStrokeColor: "#fff", + pointHighlightFill: "#fff", + pointHighlightStroke: "rgba(151,187,205,1)", + data: [28, 48, 40, 19, 96, 27, 100] + }] + }; + + var canvasRadar = new Chart(ctx, { + type: 'radar', + data: data, + }); + + } + + function init_pie_chart(){ + + if(typeof (Chart) === 'undefined'){ return; } + console.log('init_pie_chart'); + + // Pie chart + var ctx = document.getElementById("pieChart"); + var data = { + datasets: [{ + data: [120, 50, 140, 180, 100], + backgroundColor: [ + "#455C73", + "#9B59B6", + "#BDC3C7", + "#26B99A", + "#3498DB" + ], + label: 'My dataset' // for legend + }], + labels: [ + "Dark Gray", + "Purple", + "Gray", + "Green", + "Blue" + ] + }; + + var pieChart = new Chart(ctx, { + data: data, + type: 'pie', + otpions: { + legend: false + } + }); + + } + + function init_flot_chart3(){ + + if(typeof ($.plot) === 'undefined'){ return; } + console.log('init_flot_chart3'); + + //random data + var d1 = [ + [0, 1], + [1, 9], + [2, 6], + [3, 10], + [4, 5], + [5, 17], + [6, 6], + [7, 10], + [8, 7], + [9, 11], + [10, 35], + [11, 9], + [12, 12], + [13, 5], + [14, 3], + [15, 4], + [16, 9] + ]; + + //flot options + var options = { + series: { + curvedLines: { + apply: true, + active: true, + monotonicFit: true + } + }, + colors: ["#26B99A"], + grid: { + borderWidth: { + top: 0, + right: 0, + bottom: 1, + left: 1 + }, + borderColor: { + bottom: "#7F8790", + left: "#7F8790" + } + } + }; + var plot = $.plot($("#placeholder3xx3"), [{ + label: "Registrations", + data: d1, + lines: { + fillColor: "rgba(150, 202, 89, 0.12)" + }, //#96CA59 rgba(150, 202, 89, 0.42) + points: { + fillColor: "#fff" + } + }], options); + + } + + function init_flot_chart2(){ + + if(typeof ($.plot) === 'undefined'){ return; } + console.log('init_flot_chart2'); + + //define chart clolors ( you maybe add more colors if you want or flot will add it automatic ) + var chartColours = ['#96CA59', '#3F97EB', '#72c380', '#6f7a8a', '#f7cb38', '#5a8022', '#2c7282']; + + //generate random number for charts + randNum = function() { + return (Math.floor(Math.random() * (1 + 40 - 20))) + 20; + }; + + var d1 = []; + //var d2 = []; + + //here we generate data for chart + for (var i = 0; i < 30; i++) { + d1.push([new Date(Date.today().add(i).days()).getTime(), randNum() + i + i + 10]); + // d2.push([new Date(Date.today().add(i).days()).getTime(), randNum()]); + } + + var chartMinDate = d1[0][0]; //first day + var chartMaxDate = d1[20][0]; //last day + + var tickSize = [1, "day"]; + var tformat = "%d/%m/%y"; + + //graph options + var options = { + grid: { + show: true, + aboveData: true, + color: "#3f3f3f", + labelMargin: 10, + axisMargin: 0, + borderWidth: 0, + borderColor: null, + minBorderMargin: 5, + clickable: true, + hoverable: true, + autoHighlight: true, + mouseActiveRadius: 100 + }, + series: { + lines: { + show: true, + fill: true, + lineWidth: 2, + steps: false + }, + points: { + show: true, + radius: 4.5, + symbol: "circle", + lineWidth: 3.0 + } + }, + legend: { + position: "ne", + margin: [0, -25], + noColumns: 0, + labelBoxBorderColor: null, + labelFormatter: function(label, series) { + // just add some space to labes + return label + '  '; + }, + width: 40, + height: 1 + }, + colors: chartColours, + shadowSize: 0, + tooltip: true, //activate tooltip + tooltipOpts: { + content: "%s: %y.0", + xDateFormat: "%d/%m", + shifts: { + x: -30, + y: -50 + }, + defaultTheme: false + }, + yaxis: { + min: 0 + }, + xaxis: { + mode: "time", + minTickSize: tickSize, + timeformat: tformat, + min: chartMinDate, + max: chartMaxDate + } + }; + var plot = $.plot($("#placeholder33x"), [{ + label: "Email Sent", + data: d1, + lines: { + fillColor: "rgba(150, 202, 89, 0.12)" + }, //#96CA59 rgba(150, 202, 89, 0.42) + points: { + fillColor: "#fff" + } + }], options); + + } + + function init_flot_chart(){ + + if( typeof ($.plot) === 'undefined'){ return; } + console.log('init_flot_chart'); + + var data1 = [ + [gd(2012, 1, 1), 17], + [gd(2012, 1, 2), 74], + [gd(2012, 1, 3), 6], + [gd(2012, 1, 4), 39], + [gd(2012, 1, 5), 20], + [gd(2012, 1, 6), 85], + [gd(2012, 1, 7), 7] + ]; + + var data2 = [ + [gd(2012, 1, 1), 82], + [gd(2012, 1, 2), 23], + [gd(2012, 1, 3), 66], + [gd(2012, 1, 4), 9], + [gd(2012, 1, 5), 119], + [gd(2012, 1, 6), 6], + [gd(2012, 1, 7), 9] + ]; + $("#canvas_dahs").length && $.plot($("#canvas_dahs"), [ + data1, data2 + ], { + series: { + lines: { + show: false, + fill: true + }, + splines: { + show: true, + tension: 0.4, + lineWidth: 1, + fill: 0.4 + }, + points: { + radius: 0, + show: true + }, + shadowSize: 2 + }, + grid: { + verticalLines: true, + hoverable: true, + clickable: true, + tickColor: "#d5d5d5", + borderWidth: 1, + color: '#fff' + }, + colors: ["rgba(38, 185, 154, 0.38)", "rgba(3, 88, 106, 0.38)"], + xaxis: { + tickColor: "rgba(51, 51, 51, 0.06)", + mode: "time", + tickSize: [1, "day"], + //tickLength: 10, + axisLabel: "Date", + axisLabelUseCanvas: true, + axisLabelFontSizePixels: 12, + axisLabelFontFamily: 'Verdana, Arial', + axisLabelPadding: 10 + }, + yaxis: { + ticks: 8, + tickColor: "rgba(51, 51, 51, 0.06)", + }, + tooltip: false + }); + + function gd(year, month, day) { + return new Date(year, month - 1, day).getTime(); + } + + } + + function init_polar_area_chart(){ + + if(typeof (Chart) === 'undefined'){ return; } + console.log('init_polar_area_chart'); + + // PolarArea chart + var ctx = document.getElementById("polarArea"); + var data = { + datasets: [{ + data: [120, 50, 140, 180, 100], + backgroundColor: [ + "#455C73", + "#9B59B6", + "#BDC3C7", + "#26B99A", + "#3498DB" + ], + label: 'My dataset' + }], + labels: [ + "Dark Gray", + "Purple", + "Gray", + "Green", + "Blue" + ] + }; + + var polarArea = new Chart(ctx, { + data: data, + type: 'polarArea', + options: { + scale: { + ticks: { + beginAtZero: true + } + } + } + }); + + } + */ + + /* ECHARTS */ + + + var theme = { + color: [ + '#26B99A', '#34495E', '#BDC3C7', '#3498DB', + '#9B59B6', '#8abb6f', '#759c6a', '#bfd3b7' + ], + + title: { + itemGap: 8, + textStyle: { + fontWeight: 'normal', + color: '#408829' + } + }, + + dataRange: { + color: ['#1f610a', '#97b58d'] + }, + + toolbox: { + color: ['#408829', '#408829', '#408829', '#408829'] + }, + + tooltip: { + backgroundColor: 'rgba(0,0,0,0.5)', + axisPointer: { + type: 'line', + lineStyle: { + color: '#408829', + type: 'dashed' + }, + crossStyle: { + color: '#408829' + }, + shadowStyle: { + color: 'rgba(200,200,200,0.3)' + } + } + }, + + dataZoom: { + dataBackgroundColor: '#eee', + fillerColor: 'rgba(64,136,41,0.2)', + handleColor: '#408829' + }, + grid: { + borderWidth: 0 + }, + + categoryAxis: { + axisLine: { + lineStyle: { + color: '#408829' + } + }, + splitLine: { + lineStyle: { + color: ['#eee'] + } + } + }, + + valueAxis: { + axisLine: { + lineStyle: { + color: '#408829' + } + }, + splitArea: { + show: true, + areaStyle: { + color: ['rgba(250,250,250,0.1)', 'rgba(200,200,200,0.1)'] + } + }, + splitLine: { + lineStyle: { + color: ['#eee'] + } + } + }, + timeline: { + lineStyle: { + color: '#408829' + }, + controlStyle: { + normal: {color: '#408829'}, + emphasis: {color: '#408829'} + } + }, + + k: { + itemStyle: { + normal: { + color: '#68a54a', + color0: '#a9cba2', + lineStyle: { + width: 1, + color: '#408829', + color0: '#86b379' + } + } + } + }, + map: { + itemStyle: { + normal: { + areaStyle: { + color: '#ddd' + }, + label: { + textStyle: { + color: '#c12e34' + } + } + }, + emphasis: { + areaStyle: { + color: '#99d2dd' + }, + label: { + textStyle: { + color: '#c12e34' + } + } + } + } + }, + force: { + itemStyle: { + normal: { + linkStyle: { + strokeColor: '#408829' + } + } + } + }, + chord: { + padding: 4, + itemStyle: { + normal: { + lineStyle: { + width: 1, + color: 'rgba(128, 128, 128, 0.5)' + }, + chordStyle: { + lineStyle: { + width: 1, + color: 'rgba(128, 128, 128, 0.5)' + } + } + }, + emphasis: { + lineStyle: { + width: 1, + color: 'rgba(128, 128, 128, 0.5)' + }, + chordStyle: { + lineStyle: { + width: 1, + color: 'rgba(128, 128, 128, 0.5)' + } + } + } + } + }, + gauge: { + startAngle: 225, + endAngle: -45, + axisLine: { + show: true, + lineStyle: { + color: [[0.2, '#86b379'], [0.8, '#68a54a'], [1, '#408829']], + width: 8 + } + }, + axisTick: { + splitNumber: 10, + length: 12, + lineStyle: { + color: 'auto' + } + }, + axisLabel: { + textStyle: { + color: 'auto' + } + }, + splitLine: { + length: 18, + lineStyle: { + color: 'auto' + } + }, + pointer: { + length: '90%', + color: 'auto' + }, + title: { + textStyle: { + color: '#333' + } + }, + detail: { + textStyle: { + color: 'auto' + } + } + }, + textStyle: { + fontFamily: 'Arial, Verdana, sans-serif' + } + }; + + + function init_echarts() { + + if(typeof (echarts) === 'undefined'){ return; } + console.log('init_echarts'); + + var echartBar = echarts.init(document.getElementById('mainb'), theme); + echartBar.setOption({ + title: { + text: 'Graph title', + subtext: 'Graph Sub-text' + }, + tooltip: { + trigger: 'axis' + }, + legend: { + data: ['sales', 'purchases'] + }, + toolbox: { + show: false + }, + calculable: false, + xAxis: [{ + type: 'category', + data: ['1?', '2?', '3?', '4?', '5?', '6?', '7?', '8?', '9?', '10?', '11?', '12?'] + }], + yAxis: [{ + type: 'value' + }], + series: [{ + name: 'sales', + type: 'bar', + data: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3], + markPoint: { + data: [{ + type: 'max', + name: '???' + }, { + type: 'min', + name: '???' + }] + }, + markLine: { + data: [{ + type: 'average', + name: '???' + }] + } + }, { + name: 'purchases', + type: 'bar', + data: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3], + markPoint: { + data: [{ + name: 'sales', + value: 182.2, + xAxis: 7, + yAxis: 183, + }, { + name: 'purchases', + value: 2.3, + xAxis: 11, + yAxis: 3 + }] + }, + markLine: { + data: [{ + type: 'average', + name: '???' + }] + } + }] + + }); + + } + + function init_echart_radar () { + + if( typeof (echarts) === 'undefined'){ return; } + console.log('init_echart_radar'); + + var echartRadar = echarts.init(document.getElementById('echart_sonar'), theme); + + echartRadar.setOption({ + title: { + text: 'Budget vs spending', + subtext: 'Subtitle' + }, + tooltip: { + trigger: 'item' + }, + legend: { + orient: 'vertical', + x: 'right', + y: 'bottom', + data: ['Allocated Budget', 'Actual Spending'] + }, + toolbox: { + show: true, + feature: { + restore: { + show: true, + title: "Restore" + }, + saveAsImage: { + show: true, + title: "Save Image" + } + } + }, + polar: [{ + indicator: [{ + text: 'Sales', + max: 6000 + }, { + text: 'Administration', + max: 16000 + }, { + text: 'Information Techology', + max: 30000 + }, { + text: 'Customer Support', + max: 38000 + }, { + text: 'Development', + max: 52000 + }, { + text: 'Marketing', + max: 25000 + }] + }], + calculable: true, + series: [{ + name: 'Budget vs spending', + type: 'radar', + data: [{ + value: [4300, 10000, 28000, 35000, 50000, 19000], + name: 'Allocated Budget' + }, { + value: [5000, 14000, 28000, 31000, 42000, 21000], + name: 'Actual Spending' + }] + }] + }); + + } + + function init_echart_funnel () { + + if( typeof (echarts) === 'undefined'){ return; } + console.log('init_echart_funnel'); + + + var echartFunnel = echarts.init(document.getElementById('echart_pyramid'), theme); + + echartFunnel.setOption({ + title: { + text: 'Echart Pyramid Graph', + subtext: 'Subtitle' + }, + tooltip: { + trigger: 'item', + formatter: "{a}
{b} : {c}%" + }, + toolbox: { + show: true, + feature: { + restore: { + show: true, + title: "Restore" + }, + saveAsImage: { + show: true, + title: "Save Image" + } + } + }, + legend: { + data: ['Something #1', 'Something #2', 'Something #3', 'Something #4', 'Something #5'], + orient: 'vertical', + x: 'left', + y: 'bottom' + }, + calculable: true, + series: [{ + name: '???', + type: 'funnel', + width: '40%', + data: [{ + value: 60, + name: 'Something #1' + }, { + value: 40, + name: 'Something #2' + }, { + value: 20, + name: 'Something #3' + }, { + value: 80, + name: 'Something #4' + }, { + value: 100, + name: 'Something #5' + }] + }] + }); + + } + + function init_echart_gauge () { + + if( typeof (echarts) === 'undefined'){ return; } + console.log('init_echart_gauge'); + + var echartGauge = echarts.init(document.getElementById('echart_guage'), theme); + + echartGauge.setOption({ + tooltip: { + formatter: "{a}
{b} : {c}%" + }, + toolbox: { + show: true, + feature: { + restore: { + show: true, + title: "Restore" + }, + saveAsImage: { + show: true, + title: "Save Image" + } + } + }, + series: [{ + name: 'Performance', + type: 'gauge', + center: ['50%', '50%'], + startAngle: 140, + endAngle: -140, + min: 0, + max: 100, + precision: 0, + splitNumber: 10, + axisLine: { + show: true, + lineStyle: { + color: [ + [0.2, 'lightgreen'], + [0.4, 'orange'], + [0.8, 'skyblue'], + [1, '#ff4500'] + ], + width: 30 + } + }, + axisTick: { + show: true, + splitNumber: 5, + length: 8, + lineStyle: { + color: '#eee', + width: 1, + type: 'solid' + } + }, + axisLabel: { + show: true, + formatter: function(v) { + switch (v + '') { + case '10': + return 'a'; + case '30': + return 'b'; + case '60': + return 'c'; + case '90': + return 'd'; + default: + return ''; + } + }, + textStyle: { + color: '#333' + } + }, + splitLine: { + show: true, + length: 30, + lineStyle: { + color: '#eee', + width: 2, + type: 'solid' + } + }, + pointer: { + length: '80%', + width: 8, + color: 'auto' + }, + title: { + show: true, + offsetCenter: ['-65%', -10], + textStyle: { + color: '#333', + fontSize: 15 + } + }, + detail: { + show: true, + backgroundColor: 'rgba(0,0,0,0)', + borderWidth: 0, + borderColor: '#ccc', + width: 100, + height: 40, + offsetCenter: ['-60%', 10], + formatter: '{value}%', + textStyle: { + color: 'auto', + fontSize: 30 + } + }, + data: [{ + value: 50, + name: 'Performance' + }] + }] + }); + } + + function init_echart_line () { + + if( typeof (echarts) === 'undefined' ){ return; } + console.log('init_echart_line'); + + var echartLine = echarts.init(document.getElementById('echart_line'), theme); + + echartLine.setOption({ + title: { + text: 'Line Graph', + subtext: 'Subtitle' + }, + tooltip: { + trigger: 'axis' + }, + legend: { + x: 220, + y: 40, + data: ['Intent', 'Pre-order', 'Deal'] + }, + toolbox: { + show: true, + feature: { + magicType: { + show: true, + title: { + line: 'Line', + bar: 'Bar', + stack: 'Stack', + tiled: 'Tiled' + }, + type: ['line', 'bar', 'stack', 'tiled'] + }, + restore: { + show: true, + title: "Restore" + }, + saveAsImage: { + show: true, + title: "Save Image" + } + } + }, + calculable: true, + xAxis: [{ + type: 'category', + boundaryGap: false, + data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + }], + yAxis: [{ + type: 'value' + }], + series: [{ + name: 'Deal', + type: 'line', + smooth: true, + itemStyle: { + normal: { + areaStyle: { + type: 'default' + } + } + }, + data: [10, 12, 21, 54, 260, 830, 710] + }, { + name: 'Pre-order', + type: 'line', + smooth: true, + itemStyle: { + normal: { + areaStyle: { + type: 'default' + } + } + }, + data: [30, 182, 434, 791, 390, 30, 10] + }, { + name: 'Intent', + type: 'line', + smooth: true, + itemStyle: { + normal: { + areaStyle: { + type: 'default' + } + } + }, + data: [1320, 1132, 601, 234, 120, 90, 20] + }] + }); + } + + function init_echart_scatter () { + + if( typeof (echarts) === 'undefined'){ return; } + console.log('init_echart_scatter'); + + var echartScatter = echarts.init(document.getElementById('echart_scatter'), theme); + + echartScatter.setOption({ + title: { + text: 'Scatter Graph', + subtext: 'Heinz 2003' + }, + tooltip: { + trigger: 'axis', + showDelay: 0, + axisPointer: { + type: 'cross', + lineStyle: { + type: 'dashed', + width: 1 + } + } + }, + legend: { + data: ['Data2', 'Data1'] + }, + toolbox: { + show: true, + feature: { + saveAsImage: { + show: true, + title: "Save Image" + } + } + }, + xAxis: [{ + type: 'value', + scale: true, + axisLabel: { + formatter: '{value} cm' + } + }], + yAxis: [{ + type: 'value', + scale: true, + axisLabel: { + formatter: '{value} kg' + } + }], + series: [{ + name: 'Data1', + type: 'scatter', + tooltip: { + trigger: 'item', + formatter: function(params) { + if (params.value.length > 1) { + return params.seriesName + ' :
' + params.value[0] + 'cm ' + params.value[1] + 'kg '; + } else { + return params.seriesName + ' :
' + params.name + ' : ' + params.value + 'kg '; + } + } + }, + data: [ + [161.2, 51.6], + [167.5, 59.0], + [159.5, 49.2], + [157.0, 63.0], + [155.8, 53.6], + [170.0, 59.0], + [159.1, 47.6], + [166.0, 69.8], + [176.2, 66.8], + [160.2, 75.2], + [172.5, 55.2], + [170.9, 54.2], + [172.9, 62.5], + [153.4, 42.0], + [160.0, 50.0], + [147.2, 49.8], + [168.2, 49.2], + [175.0, 73.2], + [157.0, 47.8], + [167.6, 68.8], + [159.5, 50.6], + [175.0, 82.5], + [166.8, 57.2], + [176.5, 87.8], + [170.2, 72.8], + [174.0, 54.5], + [173.0, 59.8], + [179.9, 67.3], + [170.5, 67.8], + [160.0, 47.0], + [154.4, 46.2], + [162.0, 55.0], + [176.5, 83.0], + [160.0, 54.4], + [152.0, 45.8], + [162.1, 53.6], + [170.0, 73.2], + [160.2, 52.1], + [161.3, 67.9], + [166.4, 56.6], + [168.9, 62.3], + [163.8, 58.5], + [167.6, 54.5], + [160.0, 50.2], + [161.3, 60.3], + [167.6, 58.3], + [165.1, 56.2], + [160.0, 50.2], + [170.0, 72.9], + [157.5, 59.8], + [167.6, 61.0], + [160.7, 69.1], + [163.2, 55.9], + [152.4, 46.5], + [157.5, 54.3], + [168.3, 54.8], + [180.3, 60.7], + [165.5, 60.0], + [165.0, 62.0], + [164.5, 60.3], + [156.0, 52.7], + [160.0, 74.3], + [163.0, 62.0], + [165.7, 73.1], + [161.0, 80.0], + [162.0, 54.7], + [166.0, 53.2], + [174.0, 75.7], + [172.7, 61.1], + [167.6, 55.7], + [151.1, 48.7], + [164.5, 52.3], + [163.5, 50.0], + [152.0, 59.3], + [169.0, 62.5], + [164.0, 55.7], + [161.2, 54.8], + [155.0, 45.9], + [170.0, 70.6], + [176.2, 67.2], + [170.0, 69.4], + [162.5, 58.2], + [170.3, 64.8], + [164.1, 71.6], + [169.5, 52.8], + [163.2, 59.8], + [154.5, 49.0], + [159.8, 50.0], + [173.2, 69.2], + [170.0, 55.9], + [161.4, 63.4], + [169.0, 58.2], + [166.2, 58.6], + [159.4, 45.7], + [162.5, 52.2], + [159.0, 48.6], + [162.8, 57.8], + [159.0, 55.6], + [179.8, 66.8], + [162.9, 59.4], + [161.0, 53.6], + [151.1, 73.2], + [168.2, 53.4], + [168.9, 69.0], + [173.2, 58.4], + [171.8, 56.2], + [178.0, 70.6], + [164.3, 59.8], + [163.0, 72.0], + [168.5, 65.2], + [166.8, 56.6], + [172.7, 105.2], + [163.5, 51.8], + [169.4, 63.4], + [167.8, 59.0], + [159.5, 47.6], + [167.6, 63.0], + [161.2, 55.2], + [160.0, 45.0], + [163.2, 54.0], + [162.2, 50.2], + [161.3, 60.2], + [149.5, 44.8], + [157.5, 58.8], + [163.2, 56.4], + [172.7, 62.0], + [155.0, 49.2], + [156.5, 67.2], + [164.0, 53.8], + [160.9, 54.4], + [162.8, 58.0], + [167.0, 59.8], + [160.0, 54.8], + [160.0, 43.2], + [168.9, 60.5], + [158.2, 46.4], + [156.0, 64.4], + [160.0, 48.8], + [167.1, 62.2], + [158.0, 55.5], + [167.6, 57.8], + [156.0, 54.6], + [162.1, 59.2], + [173.4, 52.7], + [159.8, 53.2], + [170.5, 64.5], + [159.2, 51.8], + [157.5, 56.0], + [161.3, 63.6], + [162.6, 63.2], + [160.0, 59.5], + [168.9, 56.8], + [165.1, 64.1], + [162.6, 50.0], + [165.1, 72.3], + [166.4, 55.0], + [160.0, 55.9], + [152.4, 60.4], + [170.2, 69.1], + [162.6, 84.5], + [170.2, 55.9], + [158.8, 55.5], + [172.7, 69.5], + [167.6, 76.4], + [162.6, 61.4], + [167.6, 65.9], + [156.2, 58.6], + [175.2, 66.8], + [172.1, 56.6], + [162.6, 58.6], + [160.0, 55.9], + [165.1, 59.1], + [182.9, 81.8], + [166.4, 70.7], + [165.1, 56.8], + [177.8, 60.0], + [165.1, 58.2], + [175.3, 72.7], + [154.9, 54.1], + [158.8, 49.1], + [172.7, 75.9], + [168.9, 55.0], + [161.3, 57.3], + [167.6, 55.0], + [165.1, 65.5], + [175.3, 65.5], + [157.5, 48.6], + [163.8, 58.6], + [167.6, 63.6], + [165.1, 55.2], + [165.1, 62.7], + [168.9, 56.6], + [162.6, 53.9], + [164.5, 63.2], + [176.5, 73.6], + [168.9, 62.0], + [175.3, 63.6], + [159.4, 53.2], + [160.0, 53.4], + [170.2, 55.0], + [162.6, 70.5], + [167.6, 54.5], + [162.6, 54.5], + [160.7, 55.9], + [160.0, 59.0], + [157.5, 63.6], + [162.6, 54.5], + [152.4, 47.3], + [170.2, 67.7], + [165.1, 80.9], + [172.7, 70.5], + [165.1, 60.9], + [170.2, 63.6], + [170.2, 54.5], + [170.2, 59.1], + [161.3, 70.5], + [167.6, 52.7], + [167.6, 62.7], + [165.1, 86.3], + [162.6, 66.4], + [152.4, 67.3], + [168.9, 63.0], + [170.2, 73.6], + [175.2, 62.3], + [175.2, 57.7], + [160.0, 55.4], + [165.1, 104.1], + [174.0, 55.5], + [170.2, 77.3], + [160.0, 80.5], + [167.6, 64.5], + [167.6, 72.3], + [167.6, 61.4], + [154.9, 58.2], + [162.6, 81.8], + [175.3, 63.6], + [171.4, 53.4], + [157.5, 54.5], + [165.1, 53.6], + [160.0, 60.0], + [174.0, 73.6], + [162.6, 61.4], + [174.0, 55.5], + [162.6, 63.6], + [161.3, 60.9], + [156.2, 60.0], + [149.9, 46.8], + [169.5, 57.3], + [160.0, 64.1], + [175.3, 63.6], + [169.5, 67.3], + [160.0, 75.5], + [172.7, 68.2], + [162.6, 61.4], + [157.5, 76.8], + [176.5, 71.8], + [164.4, 55.5], + [160.7, 48.6], + [174.0, 66.4], + [163.8, 67.3] + ], + markPoint: { + data: [{ + type: 'max', + name: 'Max' + }, { + type: 'min', + name: 'Min' + }] + }, + markLine: { + data: [{ + type: 'average', + name: 'Mean' + }] + } + }, { + name: 'Data2', + type: 'scatter', + tooltip: { + trigger: 'item', + formatter: function(params) { + if (params.value.length > 1) { + return params.seriesName + ' :
' + params.value[0] + 'cm ' + params.value[1] + 'kg '; + } else { + return params.seriesName + ' :
' + params.name + ' : ' + params.value + 'kg '; + } + } + }, + data: [ + [174.0, 65.6], + [175.3, 71.8], + [193.5, 80.7], + [186.5, 72.6], + [187.2, 78.8], + [181.5, 74.8], + [184.0, 86.4], + [184.5, 78.4], + [175.0, 62.0], + [184.0, 81.6], + [180.0, 76.6], + [177.8, 83.6], + [192.0, 90.0], + [176.0, 74.6], + [174.0, 71.0], + [184.0, 79.6], + [192.7, 93.8], + [171.5, 70.0], + [173.0, 72.4], + [176.0, 85.9], + [176.0, 78.8], + [180.5, 77.8], + [172.7, 66.2], + [176.0, 86.4], + [173.5, 81.8], + [178.0, 89.6], + [180.3, 82.8], + [180.3, 76.4], + [164.5, 63.2], + [173.0, 60.9], + [183.5, 74.8], + [175.5, 70.0], + [188.0, 72.4], + [189.2, 84.1], + [172.8, 69.1], + [170.0, 59.5], + [182.0, 67.2], + [170.0, 61.3], + [177.8, 68.6], + [184.2, 80.1], + [186.7, 87.8], + [171.4, 84.7], + [172.7, 73.4], + [175.3, 72.1], + [180.3, 82.6], + [182.9, 88.7], + [188.0, 84.1], + [177.2, 94.1], + [172.1, 74.9], + [167.0, 59.1], + [169.5, 75.6], + [174.0, 86.2], + [172.7, 75.3], + [182.2, 87.1], + [164.1, 55.2], + [163.0, 57.0], + [171.5, 61.4], + [184.2, 76.8], + [174.0, 86.8], + [174.0, 72.2], + [177.0, 71.6], + [186.0, 84.8], + [167.0, 68.2], + [171.8, 66.1], + [182.0, 72.0], + [167.0, 64.6], + [177.8, 74.8], + [164.5, 70.0], + [192.0, 101.6], + [175.5, 63.2], + [171.2, 79.1], + [181.6, 78.9], + [167.4, 67.7], + [181.1, 66.0], + [177.0, 68.2], + [174.5, 63.9], + [177.5, 72.0], + [170.5, 56.8], + [182.4, 74.5], + [197.1, 90.9], + [180.1, 93.0], + [175.5, 80.9], + [180.6, 72.7], + [184.4, 68.0], + [175.5, 70.9], + [180.6, 72.5], + [177.0, 72.5], + [177.1, 83.4], + [181.6, 75.5], + [176.5, 73.0], + [175.0, 70.2], + [174.0, 73.4], + [165.1, 70.5], + [177.0, 68.9], + [192.0, 102.3], + [176.5, 68.4], + [169.4, 65.9], + [182.1, 75.7], + [179.8, 84.5], + [175.3, 87.7], + [184.9, 86.4], + [177.3, 73.2], + [167.4, 53.9], + [178.1, 72.0], + [168.9, 55.5], + [157.2, 58.4], + [180.3, 83.2], + [170.2, 72.7], + [177.8, 64.1], + [172.7, 72.3], + [165.1, 65.0], + [186.7, 86.4], + [165.1, 65.0], + [174.0, 88.6], + [175.3, 84.1], + [185.4, 66.8], + [177.8, 75.5], + [180.3, 93.2], + [180.3, 82.7], + [177.8, 58.0], + [177.8, 79.5], + [177.8, 78.6], + [177.8, 71.8], + [177.8, 116.4], + [163.8, 72.2], + [188.0, 83.6], + [198.1, 85.5], + [175.3, 90.9], + [166.4, 85.9], + [190.5, 89.1], + [166.4, 75.0], + [177.8, 77.7], + [179.7, 86.4], + [172.7, 90.9], + [190.5, 73.6], + [185.4, 76.4], + [168.9, 69.1], + [167.6, 84.5], + [175.3, 64.5], + [170.2, 69.1], + [190.5, 108.6], + [177.8, 86.4], + [190.5, 80.9], + [177.8, 87.7], + [184.2, 94.5], + [176.5, 80.2], + [177.8, 72.0], + [180.3, 71.4], + [171.4, 72.7], + [172.7, 84.1], + [172.7, 76.8], + [177.8, 63.6], + [177.8, 80.9], + [182.9, 80.9], + [170.2, 85.5], + [167.6, 68.6], + [175.3, 67.7], + [165.1, 66.4], + [185.4, 102.3], + [181.6, 70.5], + [172.7, 95.9], + [190.5, 84.1], + [179.1, 87.3], + [175.3, 71.8], + [170.2, 65.9], + [193.0, 95.9], + [171.4, 91.4], + [177.8, 81.8], + [177.8, 96.8], + [167.6, 69.1], + [167.6, 82.7], + [180.3, 75.5], + [182.9, 79.5], + [176.5, 73.6], + [186.7, 91.8], + [188.0, 84.1], + [188.0, 85.9], + [177.8, 81.8], + [174.0, 82.5], + [177.8, 80.5], + [171.4, 70.0], + [185.4, 81.8], + [185.4, 84.1], + [188.0, 90.5], + [188.0, 91.4], + [182.9, 89.1], + [176.5, 85.0], + [175.3, 69.1], + [175.3, 73.6], + [188.0, 80.5], + [188.0, 82.7], + [175.3, 86.4], + [170.5, 67.7], + [179.1, 92.7], + [177.8, 93.6], + [175.3, 70.9], + [182.9, 75.0], + [170.8, 93.2], + [188.0, 93.2], + [180.3, 77.7], + [177.8, 61.4], + [185.4, 94.1], + [168.9, 75.0], + [185.4, 83.6], + [180.3, 85.5], + [174.0, 73.9], + [167.6, 66.8], + [182.9, 87.3], + [160.0, 72.3], + [180.3, 88.6], + [167.6, 75.5], + [186.7, 101.4], + [175.3, 91.1], + [175.3, 67.3], + [175.9, 77.7], + [175.3, 81.8], + [179.1, 75.5], + [181.6, 84.5], + [177.8, 76.6], + [182.9, 85.0], + [177.8, 102.5], + [184.2, 77.3], + [179.1, 71.8], + [176.5, 87.9], + [188.0, 94.3], + [174.0, 70.9], + [167.6, 64.5], + [170.2, 77.3], + [167.6, 72.3], + [188.0, 87.3], + [174.0, 80.0], + [176.5, 82.3], + [180.3, 73.6], + [167.6, 74.1], + [188.0, 85.9], + [180.3, 73.2], + [167.6, 76.3], + [183.0, 65.9], + [183.0, 90.9], + [179.1, 89.1], + [170.2, 62.3], + [177.8, 82.7], + [179.1, 79.1], + [190.5, 98.2], + [177.8, 84.1], + [180.3, 83.2], + [180.3, 83.2] + ], + markPoint: { + data: [{ + type: 'max', + name: 'Max' + }, { + type: 'min', + name: 'Min' + }] + }, + markLine: { + data: [{ + type: 'average', + name: 'Mean' + }] + } + }] + }); + + } + + function init_echart_bar_horizontal () { + + if( typeof (echarts) === 'undefined'){ return; } + console.log('init_echart_bar_horizontal'); + + var echartBar = echarts.init(document.getElementById('echart_bar_horizontal'), theme); + + echartBar.setOption({ + title: { + text: 'Bar Graph', + subtext: 'Graph subtitle' + }, + tooltip: { + trigger: 'axis' + }, + legend: { + x: 100, + data: ['2015', '2016'] + }, + toolbox: { + show: true, + feature: { + saveAsImage: { + show: true, + title: "Save Image" + } + } + }, + calculable: true, + xAxis: [{ + type: 'value', + boundaryGap: [0, 0.01] + }], + yAxis: [{ + type: 'category', + data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'] + }], + series: [{ + name: '2015', + type: 'bar', + data: [18203, 23489, 29034, 104970, 131744, 630230] + }, { + name: '2016', + type: 'bar', + data: [19325, 23438, 31000, 121594, 134141, 681807] + }] + }); + + } + + function init_echart_pie_collapse () { + + if( typeof (echarts) === 'undefined'){ return; } + console.log('init_echart_pie_collapse'); + + var echartPieCollapse = echarts.init(document.getElementById('echart_pie2'), theme); + + echartPieCollapse.setOption({ + tooltip: { + trigger: 'item', + formatter: "{a}
{b} : {c} ({d}%)" + }, + legend: { + x: 'center', + y: 'bottom', + data: ['rose1', 'rose2', 'rose3', 'rose4', 'rose5', 'rose6'] + }, + toolbox: { + show: true, + feature: { + magicType: { + show: true, + type: ['pie', 'funnel'] + }, + restore: { + show: true, + title: "Restore" + }, + saveAsImage: { + show: true, + title: "Save Image" + } + } + }, + calculable: true, + series: [{ + name: 'Area Mode', + type: 'pie', + radius: [25, 90], + center: ['50%', 170], + roseType: 'area', + x: '50%', + max: 40, + sort: 'ascending', + data: [{ + value: 10, + name: 'rose1' + }, { + value: 5, + name: 'rose2' + }, { + value: 15, + name: 'rose3' + }, { + value: 25, + name: 'rose4' + }, { + value: 20, + name: 'rose5' + }, { + value: 35, + name: 'rose6' + }] + }] + }); + + } + + function init_echart_donut () { + + if( typeof (echarts) === 'undefined'){ return; } + console.log('init_echart_donut'); + + var echartDonut = echarts.init(document.getElementById('echart_donut'), theme); + + echartDonut.setOption({ + tooltip: { + trigger: 'item', + formatter: "{a}
{b} : {c} ({d}%)" + }, + calculable: true, + legend: { + x: 'center', + y: 'bottom', + data: ['Direct Access', 'E-mail Marketing', 'Union Ad', 'Video Ads', 'Search Engine'] + }, + toolbox: { + show: true, + feature: { + magicType: { + show: true, + type: ['pie', 'funnel'], + option: { + funnel: { + x: '25%', + width: '50%', + funnelAlign: 'center', + max: 1548 + } + } + }, + restore: { + show: true, + title: "Restore" + }, + saveAsImage: { + show: true, + title: "Save Image" + } + } + }, + series: [{ + name: 'Access to the resource', + type: 'pie', + radius: ['35%', '55%'], + itemStyle: { + normal: { + label: { + show: true + }, + labelLine: { + show: true + } + }, + emphasis: { + label: { + show: true, + position: 'center', + textStyle: { + fontSize: '14', + fontWeight: 'normal' + } + } + } + }, + data: [{ + value: 335, + name: 'Direct Access' + }, { + value: 310, + name: 'E-mail Marketing' + }, { + value: 234, + name: 'Union Ad' + }, { + value: 135, + name: 'Video Ads' + }, { + value: 1548, + name: 'Search Engine' + }] + }] + }); + + } + + function init_echart_pie () { + + if( typeof (echarts) === 'undefined'){ return; } + console.log('init_echart_pie'); + + var echartPie = echarts.init(document.getElementById('echart_pie'), theme); + + echartPie.setOption({ + tooltip: { + trigger: 'item', + formatter: "{a}
{b} : {c} ({d}%)" + }, + legend: { + x: 'center', + y: 'bottom', + data: ['Direct Access', 'E-mail Marketing', 'Union Ad', 'Video Ads', 'Search Engine'] + }, + toolbox: { + show: true, + feature: { + magicType: { + show: true, + type: ['pie', 'funnel'], + option: { + funnel: { + x: '25%', + width: '50%', + funnelAlign: 'left', + max: 1548 + } + } + }, + restore: { + show: true, + title: "Restore" + }, + saveAsImage: { + show: true, + title: "Save Image" + } + } + }, + calculable: true, + series: [{ + name: '????', + type: 'pie', + radius: '55%', + center: ['50%', '48%'], + data: [{ + value: 335, + name: 'Direct Access' + }, { + value: 310, + name: 'E-mail Marketing' + }, { + value: 234, + name: 'Union Ad' + }, { + value: 135, + name: 'Video Ads' + }, { + value: 1548, + name: 'Search Engine' + }] + }] + }); + + var dataStyle = { + normal: { + label: { + show: false + }, + labelLine: { + show: false + } + } + }; + + var placeHolderStyle = { + normal: { + color: 'rgba(0,0,0,0)', + label: { + show: false + }, + labelLine: { + show: false + } + }, + emphasis: { + color: 'rgba(0,0,0,0)' + } + }; + + } + + function init_echart_bar () { + + if( typeof (echarts) === 'undefined'){ return; } + console.log('init_ehcart_bar'); + + var echartMiniPie = echarts.init(document.getElementById('echart_mini_pie'), theme); + + echartMiniPie .setOption({ + title: { + text: 'Chart #2', + subtext: 'From ExcelHome', + sublink: 'http://e.weibo.com/1341556070/AhQXtjbqh', + x: 'center', + y: 'center', + itemGap: 20, + textStyle: { + color: 'rgba(30,144,255,0.8)', + fontFamily: '????', + fontSize: 35, + fontWeight: 'bolder' + } + }, + tooltip: { + show: true, + formatter: "{a}
{b} : {c} ({d}%)" + }, + legend: { + orient: 'vertical', + x: 170, + y: 45, + itemGap: 12, + data: ['68%Something #1', '29%Something #2', '3%Something #3'], + }, + toolbox: { + show: true, + feature: { + mark: { + show: true + }, + dataView: { + show: true, + title: "Text View", + lang: [ + "Text View", + "Close", + "Refresh", + ], + readOnly: false + }, + restore: { + show: true, + title: "Restore" + }, + saveAsImage: { + show: true, + title: "Save Image" + } + } + }, + series: [{ + name: '1', + type: 'pie', + clockWise: false, + radius: [105, 130], + itemStyle: dataStyle, + data: [{ + value: 68, + name: '68%Something #1' + }, { + value: 32, + name: 'invisible', + itemStyle: placeHolderStyle + }] + }, { + name: '2', + type: 'pie', + clockWise: false, + radius: [80, 105], + itemStyle: dataStyle, + data: [{ + value: 29, + name: '29%Something #2' + }, { + value: 71, + name: 'invisible', + itemStyle: placeHolderStyle + }] + }, { + name: '3', + type: 'pie', + clockWise: false, + radius: [25, 80], + itemStyle: dataStyle, + data: [{ + value: 3, + name: '3%Something #3' + }, { + value: 97, + name: 'invisible', + itemStyle: placeHolderStyle + }] + }] + }); + + } + + function init_echart_map () { + + if( typeof (echarts) === 'undefined'){ return; } + console.log('init_echart_map'); + + var echartMap = echarts.init(document.getElementById('echart_world_map'), theme); + + echartMap.setOption({ + title: { + text: 'World Population (2010)', + subtext: 'from United Nations, Total population, both sexes combined, as of 1 July (thousands)', + x: 'center', + y: 'top' + }, + tooltip: { + trigger: 'item', + formatter: function(params) { + var value = (params.value + '').split('.'); + value = value[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, '$1,') + '.' + value[1]; + return params.seriesName + '
' + params.name + ' : ' + value; + } + }, + toolbox: { + show: true, + orient: 'vertical', + x: 'right', + y: 'center', + feature: { + mark: { + show: true + }, + dataView: { + show: true, + title: "Text View", + lang: [ + "Text View", + "Close", + "Refresh", + ], + readOnly: false + }, + restore: { + show: true, + title: "Restore" + }, + saveAsImage: { + show: true, + title: "Save Image" + } + } + }, + dataRange: { + min: 0, + max: 1000000, + text: ['High', 'Low'], + realtime: false, + calculable: true, + color: ['#087E65', '#26B99A', '#CBEAE3'] + }, + series: [{ + name: 'World Population (2010)', + type: 'map', + mapType: 'world', + roam: false, + mapLocation: { + y: 60 + }, + itemStyle: { + emphasis: { + label: { + show: true + } + } + }, + data: [{ + name: 'Afghanistan', + value: 28397.812 + }, { + name: 'Angola', + value: 19549.124 + }, { + name: 'Albania', + value: 3150.143 + }, { + name: 'United Arab Emirates', + value: 8441.537 + }, { + name: 'Argentina', + value: 40374.224 + }, { + name: 'Armenia', + value: 2963.496 + }, { + name: 'French Southern and Antarctic Lands', + value: 268.065 + }, { + name: 'Australia', + value: 22404.488 + }, { + name: 'Austria', + value: 8401.924 + }, { + name: 'Azerbaijan', + value: 9094.718 + }, { + name: 'Burundi', + value: 9232.753 + }, { + name: 'Belgium', + value: 10941.288 + }, { + name: 'Benin', + value: 9509.798 + }, { + name: 'Burkina Faso', + value: 15540.284 + }, { + name: 'Bangladesh', + value: 151125.475 + }, { + name: 'Bulgaria', + value: 7389.175 + }, { + name: 'The Bahamas', + value: 66402.316 + }, { + name: 'Bosnia and Herzegovina', + value: 3845.929 + }, { + name: 'Belarus', + value: 9491.07 + }, { + name: 'Belize', + value: 308.595 + }, { + name: 'Bermuda', + value: 64.951 + }, { + name: 'Bolivia', + value: 716.939 + }, { + name: 'Brazil', + value: 195210.154 + }, { + name: 'Brunei', + value: 27.223 + }, { + name: 'Bhutan', + value: 716.939 + }, { + name: 'Botswana', + value: 1969.341 + }, { + name: 'Central African Republic', + value: 4349.921 + }, { + name: 'Canada', + value: 34126.24 + }, { + name: 'Switzerland', + value: 7830.534 + }, { + name: 'Chile', + value: 17150.76 + }, { + name: 'China', + value: 1359821.465 + }, { + name: 'Ivory Coast', + value: 60508.978 + }, { + name: 'Cameroon', + value: 20624.343 + }, { + name: 'Democratic Republic of the Congo', + value: 62191.161 + }, { + name: 'Republic of the Congo', + value: 3573.024 + }, { + name: 'Colombia', + value: 46444.798 + }, { + name: 'Costa Rica', + value: 4669.685 + }, { + name: 'Cuba', + value: 11281.768 + }, { + name: 'Northern Cyprus', + value: 1.468 + }, { + name: 'Cyprus', + value: 1103.685 + }, { + name: 'Czech Republic', + value: 10553.701 + }, { + name: 'Germany', + value: 83017.404 + }, { + name: 'Djibouti', + value: 834.036 + }, { + name: 'Denmark', + value: 5550.959 + }, { + name: 'Dominican Republic', + value: 10016.797 + }, { + name: 'Algeria', + value: 37062.82 + }, { + name: 'Ecuador', + value: 15001.072 + }, { + name: 'Egypt', + value: 78075.705 + }, { + name: 'Eritrea', + value: 5741.159 + }, { + name: 'Spain', + value: 46182.038 + }, { + name: 'Estonia', + value: 1298.533 + }, { + name: 'Ethiopia', + value: 87095.281 + }, { + name: 'Finland', + value: 5367.693 + }, { + name: 'Fiji', + value: 860.559 + }, { + name: 'Falkland Islands', + value: 49.581 + }, { + name: 'France', + value: 63230.866 + }, { + name: 'Gabon', + value: 1556.222 + }, { + name: 'United Kingdom', + value: 62066.35 + }, { + name: 'Georgia', + value: 4388.674 + }, { + name: 'Ghana', + value: 24262.901 + }, { + name: 'Guinea', + value: 10876.033 + }, { + name: 'Gambia', + value: 1680.64 + }, { + name: 'Guinea Bissau', + value: 10876.033 + }, { + name: 'Equatorial Guinea', + value: 696.167 + }, { + name: 'Greece', + value: 11109.999 + }, { + name: 'Greenland', + value: 56.546 + }, { + name: 'Guatemala', + value: 14341.576 + }, { + name: 'French Guiana', + value: 231.169 + }, { + name: 'Guyana', + value: 786.126 + }, { + name: 'Honduras', + value: 7621.204 + }, { + name: 'Croatia', + value: 4338.027 + }, { + name: 'Haiti', + value: 9896.4 + }, { + name: 'Hungary', + value: 10014.633 + }, { + name: 'Indonesia', + value: 240676.485 + }, { + name: 'India', + value: 1205624.648 + }, { + name: 'Ireland', + value: 4467.561 + }, { + name: 'Iran', + value: 240676.485 + }, { + name: 'Iraq', + value: 30962.38 + }, { + name: 'Iceland', + value: 318.042 + }, { + name: 'Israel', + value: 7420.368 + }, { + name: 'Italy', + value: 60508.978 + }, { + name: 'Jamaica', + value: 2741.485 + }, { + name: 'Jordan', + value: 6454.554 + }, { + name: 'Japan', + value: 127352.833 + }, { + name: 'Kazakhstan', + value: 15921.127 + }, { + name: 'Kenya', + value: 40909.194 + }, { + name: 'Kyrgyzstan', + value: 5334.223 + }, { + name: 'Cambodia', + value: 14364.931 + }, { + name: 'South Korea', + value: 51452.352 + }, { + name: 'Kosovo', + value: 97.743 + }, { + name: 'Kuwait', + value: 2991.58 + }, { + name: 'Laos', + value: 6395.713 + }, { + name: 'Lebanon', + value: 4341.092 + }, { + name: 'Liberia', + value: 3957.99 + }, { + name: 'Libya', + value: 6040.612 + }, { + name: 'Sri Lanka', + value: 20758.779 + }, { + name: 'Lesotho', + value: 2008.921 + }, { + name: 'Lithuania', + value: 3068.457 + }, { + name: 'Luxembourg', + value: 507.885 + }, { + name: 'Latvia', + value: 2090.519 + }, { + name: 'Morocco', + value: 31642.36 + }, { + name: 'Moldova', + value: 103.619 + }, { + name: 'Madagascar', + value: 21079.532 + }, { + name: 'Mexico', + value: 117886.404 + }, { + name: 'Macedonia', + value: 507.885 + }, { + name: 'Mali', + value: 13985.961 + }, { + name: 'Myanmar', + value: 51931.231 + }, { + name: 'Montenegro', + value: 620.078 + }, { + name: 'Mongolia', + value: 2712.738 + }, { + name: 'Mozambique', + value: 23967.265 + }, { + name: 'Mauritania', + value: 3609.42 + }, { + name: 'Malawi', + value: 15013.694 + }, { + name: 'Malaysia', + value: 28275.835 + }, { + name: 'Namibia', + value: 2178.967 + }, { + name: 'New Caledonia', + value: 246.379 + }, { + name: 'Niger', + value: 15893.746 + }, { + name: 'Nigeria', + value: 159707.78 + }, { + name: 'Nicaragua', + value: 5822.209 + }, { + name: 'Netherlands', + value: 16615.243 + }, { + name: 'Norway', + value: 4891.251 + }, { + name: 'Nepal', + value: 26846.016 + }, { + name: 'New Zealand', + value: 4368.136 + }, { + name: 'Oman', + value: 2802.768 + }, { + name: 'Pakistan', + value: 173149.306 + }, { + name: 'Panama', + value: 3678.128 + }, { + name: 'Peru', + value: 29262.83 + }, { + name: 'Philippines', + value: 93444.322 + }, { + name: 'Papua New Guinea', + value: 6858.945 + }, { + name: 'Poland', + value: 38198.754 + }, { + name: 'Puerto Rico', + value: 3709.671 + }, { + name: 'North Korea', + value: 1.468 + }, { + name: 'Portugal', + value: 10589.792 + }, { + name: 'Paraguay', + value: 6459.721 + }, { + name: 'Qatar', + value: 1749.713 + }, { + name: 'Romania', + value: 21861.476 + }, { + name: 'Russia', + value: 21861.476 + }, { + name: 'Rwanda', + value: 10836.732 + }, { + name: 'Western Sahara', + value: 514.648 + }, { + name: 'Saudi Arabia', + value: 27258.387 + }, { + name: 'Sudan', + value: 35652.002 + }, { + name: 'South Sudan', + value: 9940.929 + }, { + name: 'Senegal', + value: 12950.564 + }, { + name: 'Solomon Islands', + value: 526.447 + }, { + name: 'Sierra Leone', + value: 5751.976 + }, { + name: 'El Salvador', + value: 6218.195 + }, { + name: 'Somaliland', + value: 9636.173 + }, { + name: 'Somalia', + value: 9636.173 + }, { + name: 'Republic of Serbia', + value: 3573.024 + }, { + name: 'Suriname', + value: 524.96 + }, { + name: 'Slovakia', + value: 5433.437 + }, { + name: 'Slovenia', + value: 2054.232 + }, { + name: 'Sweden', + value: 9382.297 + }, { + name: 'Swaziland', + value: 1193.148 + }, { + name: 'Syria', + value: 7830.534 + }, { + name: 'Chad', + value: 11720.781 + }, { + name: 'Togo', + value: 6306.014 + }, { + name: 'Thailand', + value: 66402.316 + }, { + name: 'Tajikistan', + value: 7627.326 + }, { + name: 'Turkmenistan', + value: 5041.995 + }, { + name: 'East Timor', + value: 10016.797 + }, { + name: 'Trinidad and Tobago', + value: 1328.095 + }, { + name: 'Tunisia', + value: 10631.83 + }, { + name: 'Turkey', + value: 72137.546 + }, { + name: 'United Republic of Tanzania', + value: 44973.33 + }, { + name: 'Uganda', + value: 33987.213 + }, { + name: 'Ukraine', + value: 46050.22 + }, { + name: 'Uruguay', + value: 3371.982 + }, { + name: 'United States of America', + value: 312247.116 + }, { + name: 'Uzbekistan', + value: 27769.27 + }, { + name: 'Venezuela', + value: 236.299 + }, { + name: 'Vietnam', + value: 89047.397 + }, { + name: 'Vanuatu', + value: 236.299 + }, { + name: 'West Bank', + value: 13.565 + }, { + name: 'Yemen', + value: 22763.008 + }, { + name: 'South Africa', + value: 51452.352 + }, { + name: 'Zambia', + value: 13216.985 + }, { + name: 'Zimbabwe', + value: 13076.978 + }] + }] + }); + + } + + + /* ECHARTS --- end */ + + /* SMART WIZARD */ + + function init_SmartWizard() { + + if( typeof (smartWizard) === 'undefined'){ return; } + console.log('init_SmartWizard'); + + $('#wizard').smartWizard(); + + $('#wizard_verticle').smartWizard({ + transitionEffect: 'slide' + }); + + $('.buttonNext').addClass('btn btn-success'); + $('.buttonPrevious').addClass('btn btn-primary'); + $('.buttonFinish').addClass('btn btn-default'); + + }; + + /* CROPPER */ + + function init_cropper() { + + if( typeof (cropper) === 'undefined'){ return; } + console.log('init_cropper'); + + var $image = $('#image'); + var $download = $('#download'); + var $dataX = $('#dataX'); + var $dataY = $('#dataY'); + var $dataHeight = $('#dataHeight'); + var $dataWidth = $('#dataWidth'); + var $dataRotate = $('#dataRotate'); + var $dataScaleX = $('#dataScaleX'); + var $dataScaleY = $('#dataScaleY'); + var options = { + aspectRatio: 16 / 9, + preview: '.img-preview', + crop: function (e) { + $dataX.val(Math.round(e.x)); + $dataY.val(Math.round(e.y)); + $dataHeight.val(Math.round(e.height)); + $dataWidth.val(Math.round(e.width)); + $dataRotate.val(e.rotate); + $dataScaleX.val(e.scaleX); + $dataScaleY.val(e.scaleY); + } + }; + + + // Tooltip + $('[data-toggle="tooltip"]').tooltip(); + + + // Cropper + $image.on({ + 'build.cropper': function (e) { + console.log(e.type); + }, + 'built.cropper': function (e) { + console.log(e.type); + }, + 'cropstart.cropper': function (e) { + console.log(e.type, e.action); + }, + 'cropmove.cropper': function (e) { + console.log(e.type, e.action); + }, + 'cropend.cropper': function (e) { + console.log(e.type, e.action); + }, + 'crop.cropper': function (e) { + console.log(e.type, e.x, e.y, e.width, e.height, e.rotate, e.scaleX, e.scaleY); + }, + 'zoom.cropper': function (e) { + console.log(e.type, e.ratio); + } + }).cropper(options); + + + // Buttons + if (!$.isFunction(document.createElement('canvas').getContext)) { + $('button[data-method="getCroppedCanvas"]').prop('disabled', true); + } + + if (typeof document.createElement('cropper').style.transition === 'undefined') { + $('button[data-method="rotate"]').prop('disabled', true); + $('button[data-method="scale"]').prop('disabled', true); + } + + + // Download + if (typeof $download[0].download === 'undefined') { + $download.addClass('disabled'); + } + + + // Options + $('.docs-toggles').on('change', 'input', function () { + var $this = $(this); + var name = $this.attr('name'); + var type = $this.prop('type'); + var cropBoxData; + var canvasData; + + if (!$image.data('cropper')) { + return; + } + + if (type === 'checkbox') { + options[name] = $this.prop('checked'); + cropBoxData = $image.cropper('getCropBoxData'); + canvasData = $image.cropper('getCanvasData'); + + options.built = function () { + $image.cropper('setCropBoxData', cropBoxData); + $image.cropper('setCanvasData', canvasData); + }; + } else if (type === 'radio') { + options[name] = $this.val(); + } + + $image.cropper('destroy').cropper(options); + }); + + + // Methods + $('.docs-buttons').on('click', '[data-method]', function () { + var $this = $(this); + var data = $this.data(); + var $target; + var result; + + if ($this.prop('disabled') || $this.hasClass('disabled')) { + return; + } + + if ($image.data('cropper') && data.method) { + data = $.extend({}, data); // Clone a new one + + if (typeof data.target !== 'undefined') { + $target = $(data.target); + + if (typeof data.option === 'undefined') { + try { + data.option = JSON.parse($target.val()); + } catch (e) { + console.log(e.message); + } + } + } + + result = $image.cropper(data.method, data.option, data.secondOption); + + switch (data.method) { + case 'scaleX': + case 'scaleY': + $(this).data('option', -data.option); + break; + + case 'getCroppedCanvas': + if (result) { + + // Bootstrap's Modal + $('#getCroppedCanvasModal').modal().find('.modal-body').html(result); + + if (!$download.hasClass('disabled')) { + $download.attr('href', result.toDataURL()); + } + } + + break; + } + + if ($.isPlainObject(result) && $target) { + try { + $target.val(JSON.stringify(result)); + } catch (e) { + console.log(e.message); + } + } + + } + }); + + // Keyboard + $(document.body).on('keydown', function (e) { + if (!$image.data('cropper') || this.scrollTop > 300) { + return; + } + + switch (e.which) { + case 37: + e.preventDefault(); + $image.cropper('move', -1, 0); + break; + + case 38: + e.preventDefault(); + $image.cropper('move', 0, -1); + break; + + case 39: + e.preventDefault(); + $image.cropper('move', 1, 0); + break; + + case 40: + e.preventDefault(); + $image.cropper('move', 0, 1); + break; + } + }); + + // Import image + var $inputImage = $('#inputImage'); + var URL = window.URL || window.webkitURL; + var blobURL; + + if (URL) { + $inputImage.change(function () { + var files = this.files; + var file; + + if (!$image.data('cropper')) { + return; + } + + if (files && files.length) { + file = files[0]; + + if (/^image\/\w+$/.test(file.type)) { + blobURL = URL.createObjectURL(file); + $image.one('built.cropper', function () { + + // Revoke when load complete + URL.revokeObjectURL(blobURL); + }).cropper('reset').cropper('replace', blobURL); + $inputImage.val(''); + } else { + window.alert('Please choose an image file.'); + } + } + }); + } else { + $inputImage.prop('disabled', true).parent().addClass('disabled'); + } + + + }; + + /* CROPPER --- end */ + + /* PANEL TOOLBOX */ + + function init_toolbox() { + + if( typeof ($BOX_PANEL) === 'undefined'){ return; } + console.log('init_toolbox'); + + $('.collapse-link').on('click', function() { + var $BOX_PANEL = $(this).closest('.x_panel'), + $ICON = $(this).find('i'), + $BOX_CONTENT = $BOX_PANEL.find('.x_content'); + + // fix for some div with hardcoded fix class + if ($BOX_PANEL.attr('style')) { + $BOX_CONTENT.slideToggle(200, function(){ + $BOX_PANEL.removeAttr('style'); + }); + } else { + $BOX_CONTENT.slideToggle(200); + $BOX_PANEL.css('height', 'auto'); + } + + $ICON.toggleClass('fa-chevron-up fa-chevron-down'); + }); + + $('.close-link').click(function () { + var $BOX_PANEL = $(this).closest('.x_panel'); + + $BOX_PANEL.remove(); + }); + }; + // /Panel toolbox + + // Tooltip + function init_tooltip() { + + if( typeof (tooltip) === 'undefined'){ return; } + console.log('init_toolbox'); + + $('[data-toggle="tooltip"]').tooltip({ + container: 'body' + }); + }; + // /Tooltip + + /* SWITCHERY */ + + function init_switchery() { + if ($(".js-switch")[0]) { + var elems = Array.prototype.slice.call(document.querySelectorAll('.js-switch')); + elems.forEach(function (html) { + var switchery = new Switchery(html, { + color: '#26B99A' + }); + }); + } + }; + + + /* ICHECK */ + + function init_icheck() { + if ($("input.flat")[0]) { + $(document).ready(function () { + $('input.flat').iCheck({ + checkboxClass: 'icheckbox_flat-green', + radioClass: 'iradio_flat-green' + }); + }); + } + }; + + + // Table + $('table input').on('ifChecked', function () { + checkState = ''; + $(this).parent().parent().parent().addClass('selected'); + countChecked(); + }); + $('table input').on('ifUnchecked', function () { + checkState = ''; + $(this).parent().parent().parent().removeClass('selected'); + countChecked(); + }); + + var checkState = ''; + + $('.bulk_action input').on('ifChecked', function () { + checkState = ''; + $(this).parent().parent().parent().addClass('selected'); + countChecked(); + }); + $('.bulk_action input').on('ifUnchecked', function () { + checkState = ''; + $(this).parent().parent().parent().removeClass('selected'); + countChecked(); + }); + $('.bulk_action input#check-all').on('ifChecked', function () { + checkState = 'all'; + countChecked(); + }); + $('.bulk_action input#check-all').on('ifUnchecked', function () { + checkState = 'none'; + countChecked(); + }); + + /* COUNT CHECKED */ + + function init_countChecked() { + if (checkState === 'all') { + $(".bulk_action input[name='table_records']").iCheck('check'); + } + if (checkState === 'none') { + $(".bulk_action input[name='table_records']").iCheck('uncheck'); + } + + var checkCount = $(".bulk_action input[name='table_records']:checked").length; + + if (checkCount) { + $('.column-title').hide(); + $('.bulk-actions').show(); + $('.action-cnt').html(checkCount + ' Records Selected'); + } else { + $('.column-title').show(); + $('.bulk-actions').hide(); + } + } + + /* DATERANGEPICKER */ + + function init_daterangepicker() { + $('#birthday').daterangepicker({ + singleDatePicker: true, + calender_style: "picker_4" + }, function(start, end, label) { + console.log(start.toISOString(), end.toISOString(), label); + }); + }; + + /* COMPOSE */ + + function init_compose() { + + $('#compose, .compose-close').click(function(){ + $('.compose').slideToggle(); + }); + + }; + + /* WYSIWYG EDITOR */ + /* + function init_wysiwyg() { + function init_ToolbarBootstrapBindings() { + var fonts = ['Serif', 'Sans', 'Arial', 'Arial Black', 'Courier', + 'Courier New', 'Comic Sans MS', 'Helvetica', 'Impact', 'Lucida Grande', 'Lucida Sans', 'Tahoma', 'Times', + 'Times New Roman', 'Verdana' + ], + fontTarget = $('[title=Font]').siblings('.dropdown-menu'); + $.each(fonts, function(idx, fontName) { + fontTarget.append($('
  • ' + fontName + '
  • ')); + }); + $('a[title]').tooltip({ + container: 'body' + }); + $('.dropdown-menu input').click(function() { + return false; + }) + .change(function() { + $(this).parent('.dropdown-menu').siblings('.dropdown-toggle').dropdown('toggle'); + }) + .keydown('esc', function() { + this.value = ''; + $(this).change(); + }); + + $('[data-role=magic-overlay]').each(function() { + var overlay = $(this), + target = $(overlay.data('target')); + overlay.css('opacity', 0).css('position', 'absolute').offset(target.offset()).width(target.outerWidth()).height(target.outerHeight()); + }); + + if ("onwebkitspeechchange" in document.createElement("input")) { + var editorOffset = $('#editor').offset(); + + $('.voiceBtn').css('position', 'absolute').offset({ + top: editorOffset.top, + left: editorOffset.left + $('#editor').innerWidth() - 35 + }); + } else { + $('.voiceBtn').hide(); + } + } + + function showErrorAlert(reason, detail) { + var msg = ''; + if (reason === 'unsupported-file-type') { + msg = "Unsupported format " + detail; + } else { + console.log("error uploading file", reason, detail); + } + $('
    ' + + 'File upload error ' + msg + '
    ').prependTo('#alerts'); + } + + $('.editor-wrapper').each(function(){ + var id = $(this).attr('id'); //editor-one + + $(this).wysiwyg({ + toolbarSelector: '[data-target="#' + id + '"]', + fileUploadError: showErrorAlert + }); + }); + + + window.prettyPrint; + prettyPrint(); + + }; + */ + + /* ACCORDION */ + + function init_accordion() { + $(".expand").on("click", function () { + $(this).next().slideToggle(200); + $expand = $(this).find(">:first-child"); + + if ($expand.text() == "+") { + $expand.text("-"); + } else { + $expand.text("+"); + } + }); + }; + + + /* MORRIS CHART */ + + function init_morris_chart() { + + if( typeof (Morris) === 'undefined'){ return;} + console.log('init_morris_chart'); + + Morris.Bar({ + element: 'graph_bar', + data: [ + { "period": "Jan", "Hours worked": 80 }, + { "period": "Feb", "Hours worked": 125 }, + { "period": "Mar", "Hours worked": 176 }, + { "period": "Apr", "Hours worked": 224 }, + { "period": "May", "Hours worked": 265 }, + { "period": "Jun", "Hours worked": 314 }, + { "period": "Jul", "Hours worked": 347 }, + { "period": "Aug", "Hours worked": 287 }, + { "period": "Sep", "Hours worked": 240 }, + { "period": "Oct", "Hours worked": 211 } + ], + xkey: 'period', + hideHover: 'auto', + barColors: ['#26B99A', '#34495E', '#ACADAC', '#3498DB'], + ykeys: ['Hours worked', 'sorned'], + labels: ['Hours worked', 'SORN'], + xLabelAngle: 60, + resize: true + }); + + $MENU_TOGGLE.on('click', function() { + $(window).resize(); + }); + + }; + + /* SELECT2 */ + + function init_select2() { + + if( typeof (select2) === 'undefined'){ return; } + console.log('init_toolbox'); + + $(".select2_single").select2({ + placeholder: "Select a state", + allowClear: true + }); + $(".select2_group").select2({}); + $(".select2_multiple").select2({ + maximumSelectionLength: 4, + placeholder: "With Max Selection limit 4", + allowClear: true + }); + + }; + + /* CHART - MORRIS PAGE */ + + function init_MorrisChartPage() { + + if( typeof (Morris) === 'undefined'){ return; } + console.log('init_MorrisChartPage'); + + Morris.Bar({ + element: 'graph_bar', + data: [ + {device: 'iPhone 4', geekbench: 380}, + {device: 'iPhone 4S', geekbench: 655}, + {device: 'iPhone 3GS', geekbench: 275}, + {device: 'iPhone 5', geekbench: 1571}, + {device: 'iPhone 5S', geekbench: 655}, + {device: 'iPhone 6', geekbench: 2154}, + {device: 'iPhone 6 Plus', geekbench: 1144}, + {device: 'iPhone 6S', geekbench: 2371}, + {device: 'iPhone 6S Plus', geekbench: 1471}, + {device: 'Other', geekbench: 1371} + ], + xkey: 'device', + ykeys: ['geekbench'], + labels: ['Geekbench'], + barRatio: 0.4, + barColors: ['#26B99A', '#34495E', '#ACADAC', '#3498DB'], + xLabelAngle: 35, + hideHover: 'auto', + resize: true + }); + + Morris.Bar({ + element: 'graph_bar_group', + data: [ + {"period": "2016-10-01", "licensed": 807, "sorned": 660}, + {"period": "2016-09-30", "licensed": 1251, "sorned": 729}, + {"period": "2016-09-29", "licensed": 1769, "sorned": 1018}, + {"period": "2016-09-20", "licensed": 2246, "sorned": 1461}, + {"period": "2016-09-19", "licensed": 2657, "sorned": 1967}, + {"period": "2016-09-18", "licensed": 3148, "sorned": 2627}, + {"period": "2016-09-17", "licensed": 3471, "sorned": 3740}, + {"period": "2016-09-16", "licensed": 2871, "sorned": 2216}, + {"period": "2016-09-15", "licensed": 2401, "sorned": 1656}, + {"period": "2016-09-10", "licensed": 2115, "sorned": 1022} + ], + xkey: 'period', + barColors: ['#26B99A', '#34495E', '#ACADAC', '#3498DB'], + ykeys: ['licensed', 'sorned'], + labels: ['Licensed', 'SORN'], + hideHover: 'auto', + xLabelAngle: 60, + resize: true + }); + + Morris.Bar({ + element: 'graphx', + data: [ + {x: '2015 Q1', y: 2, z: 3, a: 4}, + {x: '2015 Q2', y: 3, z: 5, a: 6}, + {x: '2015 Q3', y: 4, z: 3, a: 2}, + {x: '2015 Q4', y: 2, z: 4, a: 5} + ], + xkey: 'x', + ykeys: ['y', 'z', 'a'], + barColors: ['#26B99A', '#34495E', '#ACADAC', '#3498DB'], + hideHover: 'auto', + labels: ['Y', 'Z', 'A'], + resize: true + }).on('click', function (i, row) { + console.log(i, row); + }); + + Morris.Area({ + element: 'graph_area', + data: [ + {period: '2014 Q1', iphone: 2666, ipad: null, itouch: 2647}, + {period: '2014 Q2', iphone: 2778, ipad: 2294, itouch: 2441}, + {period: '2014 Q3', iphone: 4912, ipad: 1969, itouch: 2501}, + {period: '2014 Q4', iphone: 3767, ipad: 3597, itouch: 5689}, + {period: '2015 Q1', iphone: 6810, ipad: 1914, itouch: 2293}, + {period: '2015 Q2', iphone: 5670, ipad: 4293, itouch: 1881}, + {period: '2015 Q3', iphone: 4820, ipad: 3795, itouch: 1588}, + {period: '2015 Q4', iphone: 15073, ipad: 5967, itouch: 5175}, + {period: '2016 Q1', iphone: 10687, ipad: 4460, itouch: 2028}, + {period: '2016 Q2', iphone: 8432, ipad: 5713, itouch: 1791} + ], + xkey: 'period', + ykeys: ['iphone', 'ipad', 'itouch'], + lineColors: ['#26B99A', '#34495E', '#ACADAC', '#3498DB'], + labels: ['iPhone', 'iPad', 'iPod Touch'], + pointSize: 2, + hideHover: 'auto', + resize: true + }); + + Morris.Donut({ + element: 'graph_donut', + data: [ + {label: 'Jam', value: 25}, + {label: 'Frosted', value: 40}, + {label: 'Custard', value: 25}, + {label: 'Sugar', value: 10} + ], + colors: ['#26B99A', '#34495E', '#ACADAC', '#3498DB'], + formatter: function (y) { + return y + "%"; + }, + resize: true + }); + + Morris.Line({ + element: 'graph_line', + xkey: 'year', + ykeys: ['value'], + labels: ['Value'], + hideHover: 'auto', + lineColors: ['#26B99A', '#34495E', '#ACADAC', '#3498DB'], + data: [ + {year: '2012', value: 20}, + {year: '2013', value: 10}, + {year: '2014', value: 5}, + {year: '2015', value: 5}, + {year: '2016', value: 20} + ], + resize: true + }); + + $MENU_TOGGLE.on('click', function() { + $(window).resize(); + }); + + }; + + /* DATE PEACKER */ + + function init_date_picker() { + + var cb = function(start, end, label) { + console.log(start.toISOString(), end.toISOString(), label); + $('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY')); + //alert("Callback has fired: [" + start.format('MMMM D, YYYY') + " to " + end.format('MMMM D, YYYY') + ", label = " + label + "]"); + } + + var optionSet1 = { + startDate: moment().subtract(29, 'days'), + endDate: moment(), + minDate: '01/01/2012', + maxDate: '12/31/2015', + dateLimit: { + days: 60 + }, + showDropdowns: true, + showWeekNumbers: true, + timePicker: false, + timePickerIncrement: 1, + timePicker12Hour: true, + ranges: { + 'Today': [moment(), moment()], + 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], + 'Last 7 Days': [moment().subtract(6, 'days'), moment()], + 'Last 30 Days': [moment().subtract(29, 'days'), moment()], + 'This Month': [moment().startOf('month'), moment().endOf('month')], + 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')] + }, + opens: 'left', + buttonClasses: ['btn btn-default'], + applyClass: 'btn-small btn-primary', + cancelClass: 'btn-small', + format: 'MM/DD/YYYY', + separator: ' to ', + locale: { + applyLabel: 'Submit', + cancelLabel: 'Clear', + fromLabel: 'From', + toLabel: 'To', + customRangeLabel: 'Custom', + daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], + monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + firstDay: 1 + } + }; + $('#reportrange span').html(moment().subtract(29, 'days').format('MMMM D, YYYY') + ' - ' + moment().format('MMMM D, YYYY')); + $('#reportrange').daterangepicker(optionSet1, cb); + $('#reportrange').on('show.daterangepicker', function() { + console.log("show event fired"); + }); + $('#reportrange').on('hide.daterangepicker', function() { + console.log("hide event fired"); + }); + $('#reportrange').on('apply.daterangepicker', function(ev, picker) { + console.log("apply event fired, start/end dates are " + picker.startDate.format('MMMM D, YYYY') + " to " + picker.endDate.format('MMMM D, YYYY')); + }); + $('#reportrange').on('cancel.daterangepicker', function(ev, picker) { + console.log("cancel event fired"); + }); + $('#options1').click(function() { + $('#reportrange').data('daterangepicker').setOptions(optionSet1, cb); + }); + $('#options2').click(function() { + $('#reportrange').data('daterangepicker').setOptions(optionSet2, cb); + }); + $('#destroy').click(function() { + $('#reportrange').data('daterangepicker').remove(); + }); + }; + + /* INPUTS */ + + function onAddTag(tag) { + alert("Added a tag: " + tag); + } + + function onRemoveTag(tag) { + alert("Removed a tag: " + tag); + } + + function onChangeTag(input, tag) { + alert("Changed a tag: " + tag); + } + + //tags input + function init_TagsInput() { + + if(typeof $.fn.tagsInput !== 'undefined'){ + + $('#tags_1').tagsInput({ + width: 'auto' + }); + + } + + }; + + /* PARSLEY */ + + function init_parsley() { + + $/*.listen*/('parsley:field:validate', function() { + validateFront(); + }); + $('#demo-form .btn').on('click', function() { + $('#demo-form').parsley().validate(); + validateFront(); + }); + var validateFront = function() { + if (true === $('#demo-form').parsley().isValid()) { + $('.bs-callout-info').removeClass('hidden'); + $('.bs-callout-warning').addClass('hidden'); + } else { + $('.bs-callout-info').addClass('hidden'); + $('.bs-callout-warning').removeClass('hidden'); + } + }; + + $/*.listen*/('parsley:field:validate', function() { + validateFront(); + }); + $('#demo-form2 .btn').on('click', function() { + $('#demo-form2').parsley().validate(); + validateFront(); + }); + var validateFront = function() { + if (true === $('#demo-form2').parsley().isValid()) { + $('.bs-callout-info').removeClass('hidden'); + $('.bs-callout-warning').addClass('hidden'); + } else { + $('.bs-callout-info').addClass('hidden'); + $('.bs-callout-warning').removeClass('hidden'); + } + }; + + try { + hljs.initHighlightingOnLoad(); + } catch (err) {} + + }; + + + /* AUTOSIZE */ + + function init_autosize() { + + if(typeof $.fn.autosize !== 'undefined'){ + + autosize($('.resizable_textarea')); + + } + + }; + + /* AUTOCOMPLETE */ + + function init_autocomplete() { + + if( typeof (autocomplete) === 'undefined'){ return; } + console.log('init_autocomplete'); + + var countries = { AD:"Andorra",A2:"Andorra Test",AE:"United Arab Emirates",AF:"Afghanistan",AG:"Antigua and Barbuda",AI:"Anguilla",AL:"Albania",AM:"Armenia",AN:"Netherlands Antilles",AO:"Angola",AQ:"Antarctica",AR:"Argentina",AS:"American Samoa",AT:"Austria",AU:"Australia",AW:"Aruba",AX:"land Islands",AZ:"Azerbaijan",BA:"Bosnia and Herzegovina",BB:"Barbados",BD:"Bangladesh",BE:"Belgium",BF:"Burkina Faso",BG:"Bulgaria",BH:"Bahrain",BI:"Burundi",BJ:"Benin",BL:"Saint Barthlemy",BM:"Bermuda",BN:"Brunei",BO:"Bolivia",BQ:"British Antarctic Territory",BR:"Brazil",BS:"Bahamas",BT:"Bhutan",BV:"Bouvet Island",BW:"Botswana",BY:"Belarus",BZ:"Belize",CA:"Canada",CC:"Cocos [Keeling] Islands",CD:"Congo - Kinshasa",CF:"Central African Republic",CG:"Congo - Brazzaville",CH:"Switzerland",CI:"Cte dIvoire",CK:"Cook Islands",CL:"Chile",CM:"Cameroon",CN:"China",CO:"Colombia",CR:"Costa Rica",CS:"Serbia and Montenegro",CT:"Canton and Enderbury Islands",CU:"Cuba",CV:"Cape Verde",CX:"Christmas Island",CY:"Cyprus",CZ:"Czech Republic",DD:"East Germany",DE:"Germany",DJ:"Djibouti",DK:"Denmark",DM:"Dominica",DO:"Dominican Republic",DZ:"Algeria",EC:"Ecuador",EE:"Estonia",EG:"Egypt",EH:"Western Sahara",ER:"Eritrea",ES:"Spain",ET:"Ethiopia",FI:"Finland",FJ:"Fiji",FK:"Falkland Islands",FM:"Micronesia",FO:"Faroe Islands",FQ:"French Southern and Antarctic Territories",FR:"France",FX:"Metropolitan France",GA:"Gabon",GB:"United Kingdom",GD:"Grenada",GE:"Georgia",GF:"French Guiana",GG:"Guernsey",GH:"Ghana",GI:"Gibraltar",GL:"Greenland",GM:"Gambia",GN:"Guinea",GP:"Guadeloupe",GQ:"Equatorial Guinea",GR:"Greece",GS:"South Georgia and the South Sandwich Islands",GT:"Guatemala",GU:"Guam",GW:"Guinea-Bissau",GY:"Guyana",HK:"Hong Kong SAR China",HM:"Heard Island and McDonald Islands",HN:"Honduras",HR:"Croatia",HT:"Haiti",HU:"Hungary",ID:"Indonesia",IE:"Ireland",IL:"Israel",IM:"Isle of Man",IN:"India",IO:"British Indian Ocean Territory",IQ:"Iraq",IR:"Iran",IS:"Iceland",IT:"Italy",JE:"Jersey",JM:"Jamaica",JO:"Jordan",JP:"Japan",JT:"Johnston Island",KE:"Kenya",KG:"Kyrgyzstan",KH:"Cambodia",KI:"Kiribati",KM:"Comoros",KN:"Saint Kitts and Nevis",KP:"North Korea",KR:"South Korea",KW:"Kuwait",KY:"Cayman Islands",KZ:"Kazakhstan",LA:"Laos",LB:"Lebanon",LC:"Saint Lucia",LI:"Liechtenstein",LK:"Sri Lanka",LR:"Liberia",LS:"Lesotho",LT:"Lithuania",LU:"Luxembourg",LV:"Latvia",LY:"Libya",MA:"Morocco",MC:"Monaco",MD:"Moldova",ME:"Montenegro",MF:"Saint Martin",MG:"Madagascar",MH:"Marshall Islands",MI:"Midway Islands",MK:"Macedonia",ML:"Mali",MM:"Myanmar [Burma]",MN:"Mongolia",MO:"Macau SAR China",MP:"Northern Mariana Islands",MQ:"Martinique",MR:"Mauritania",MS:"Montserrat",MT:"Malta",MU:"Mauritius",MV:"Maldives",MW:"Malawi",MX:"Mexico",MY:"Malaysia",MZ:"Mozambique",NA:"Namibia",NC:"New Caledonia",NE:"Niger",NF:"Norfolk Island",NG:"Nigeria",NI:"Nicaragua",NL:"Netherlands",NO:"Norway",NP:"Nepal",NQ:"Dronning Maud Land",NR:"Nauru",NT:"Neutral Zone",NU:"Niue",NZ:"New Zealand",OM:"Oman",PA:"Panama",PC:"Pacific Islands Trust Territory",PE:"Peru",PF:"French Polynesia",PG:"Papua New Guinea",PH:"Philippines",PK:"Pakistan",PL:"Poland",PM:"Saint Pierre and Miquelon",PN:"Pitcairn Islands",PR:"Puerto Rico",PS:"Palestinian Territories",PT:"Portugal",PU:"U.S. Miscellaneous Pacific Islands",PW:"Palau",PY:"Paraguay",PZ:"Panama Canal Zone",QA:"Qatar",RE:"Runion",RO:"Romania",RS:"Serbia",RU:"Russia",RW:"Rwanda",SA:"Saudi Arabia",SB:"Solomon Islands",SC:"Seychelles",SD:"Sudan",SE:"Sweden",SG:"Singapore",SH:"Saint Helena",SI:"Slovenia",SJ:"Svalbard and Jan Mayen",SK:"Slovakia",SL:"Sierra Leone",SM:"San Marino",SN:"Senegal",SO:"Somalia",SR:"Suriname",ST:"So Tom and Prncipe",SU:"Union of Soviet Socialist Republics",SV:"El Salvador",SY:"Syria",SZ:"Swaziland",TC:"Turks and Caicos Islands",TD:"Chad",TF:"French Southern Territories",TG:"Togo",TH:"Thailand",TJ:"Tajikistan",TK:"Tokelau",TL:"Timor-Leste",TM:"Turkmenistan",TN:"Tunisia",TO:"Tonga",TR:"Turkey",TT:"Trinidad and Tobago",TV:"Tuvalu",TW:"Taiwan",TZ:"Tanzania",UA:"Ukraine",UG:"Uganda",UM:"U.S. Minor Outlying Islands",US:"United States",UY:"Uruguay",UZ:"Uzbekistan",VA:"Vatican City",VC:"Saint Vincent and the Grenadines",VD:"North Vietnam",VE:"Venezuela",VG:"British Virgin Islands",VI:"U.S. Virgin Islands",VN:"Vietnam",VU:"Vanuatu",WF:"Wallis and Futuna",WK:"Wake Island",WS:"Samoa",YD:"People's Democratic Republic of Yemen",YE:"Yemen",YT:"Mayotte",ZA:"South Africa",ZM:"Zambia",ZW:"Zimbabwe",ZZ:"Unknown or Invalid Region" }; + + var countriesArray = $.map(countries, function(value, key) { + return { + value: value, + data: key + }; + }); + + // initialize autocomplete with custom appendTo + $('#autocomplete-custom-append').autocomplete({ + lookup: countriesArray + }); + + }; + + /* STARRR */ + + function init_starrr() { + + if( typeof (starrr) === 'undefined'){ return; } + console.log('init_starrr'); + + $(".stars").starrr(); + + $('.stars-existing').starrr({ + rating: 4 + }); + + $('.stars').on('starrr:change', function (e, value) { + $('.stars-count').html(value); + }); + + $('.stars-existing').on('starrr:change', function (e, value) { + $('.stars-count-existing').html(value); + }); + + }; + + /* BOOTSTRAP DATERANGEPICKER */ + + //1 + function init_bootstrap_daterangepicker() { + + if( typeof (daterangepicker) === 'undefined'){ return; } + console.log('init_bootstrap_daterangepicker'); + + var cb = function(start, end, label) { + console.log(start.toISOString(), end.toISOString(), label); + $('#reportrange_right span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY')); + }; + + var optionSet1 = { + startDate: moment().subtract(29, 'days'), + endDate: moment(), + minDate: '01/01/2012', + maxDate: '12/31/2020', + dateLimit: { + days: 60 + }, + showDropdowns: true, + showWeekNumbers: true, + timePicker: false, + timePickerIncrement: 1, + timePicker12Hour: true, + ranges: { + 'Today': [moment(), moment()], + 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], + 'Last 7 Days': [moment().subtract(6, 'days'), moment()], + 'Last 30 Days': [moment().subtract(29, 'days'), moment()], + 'This Month': [moment().startOf('month'), moment().endOf('month')], + 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')] + }, + opens: 'right', + buttonClasses: ['btn btn-default'], + applyClass: 'btn-small btn-primary', + cancelClass: 'btn-small', + format: 'MM/DD/YYYY', + separator: ' to ', + locale: { + applyLabel: 'Submit', + cancelLabel: 'Clear', + fromLabel: 'From', + toLabel: 'To', + customRangeLabel: 'Custom', + daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], + monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + firstDay: 1 + } + }; + + $('#reportrange_right span').html(moment().subtract(29, 'days').format('MMMM D, YYYY') + ' - ' + moment().format('MMMM D, YYYY')); + + $('#reportrange_right').daterangepicker(optionSet1, cb); + + $('#reportrange_right').on('show.daterangepicker', function() { + console.log("show event fired"); + }); + $('#reportrange_right').on('hide.daterangepicker', function() { + console.log("hide event fired"); + }); + $('#reportrange_right').on('apply.daterangepicker', function(ev, picker) { + console.log("apply event fired, start/end dates are " + picker.startDate.format('MMMM D, YYYY') + " to " + picker.endDate.format('MMMM D, YYYY')); + }); + $('#reportrange_right').on('cancel.daterangepicker', function(ev, picker) { + console.log("cancel event fired"); + }); + + $('#options1').click(function() { + $('#reportrange_right').data('daterangepicker').setOptions(optionSet1, cb); + }); + + $('#options2').click(function() { + $('#reportrange_right').data('daterangepicker').setOptions(optionSet2, cb); + }); + + $('#destroy').click(function() { + $('#reportrange_right').data('daterangepicker').remove(); + }); + + }; + + //2 + + function init_bootstrap_daterangepicker2() { + + if( typeof (daterangepicker) === 'undefined'){ return; } + console.log('init_bootstrap_daterangepicker2'); + + var cb = function(start, end, label) { + console.log(start.toISOString(), end.toISOString(), label); + $('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY')); + }; + + var optionSet1 = { + startDate: moment().subtract(29, 'days'), + endDate: moment(), + minDate: '01/01/2012', + maxDate: '12/31/2020', + dateLimit: { + days: 60 + }, + showDropdowns: true, + showWeekNumbers: true, + timePicker: false, + timePickerIncrement: 1, + timePicker12Hour: true, + ranges: { + 'Today': [moment(), moment()], + 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], + 'Last 7 Days': [moment().subtract(6, 'days'), moment()], + 'Last 30 Days': [moment().subtract(29, 'days'), moment()], + 'This Month': [moment().startOf('month'), moment().endOf('month')], + 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')] + }, + opens: 'left', + buttonClasses: ['btn btn-default'], + applyClass: 'btn-small btn-primary', + cancelClass: 'btn-small', + format: 'MM/DD/YYYY', + separator: ' to ', + locale: { + applyLabel: 'Submit', + cancelLabel: 'Clear', + fromLabel: 'From', + toLabel: 'To', + customRangeLabel: 'Custom', + daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], + monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + firstDay: 1 + } + }; + $('#reportrange span').html(moment().subtract(29, 'days').format('MMMM D, YYYY') + ' - ' + moment().format('MMMM D, YYYY')); + $('#reportrange').daterangepicker(optionSet1, cb); + $('#reportrange').on('show.daterangepicker', function() { + console.log("show event fired"); + }); + $('#reportrange').on('hide.daterangepicker', function() { + console.log("hide event fired"); + }); + $('#reportrange').on('apply.daterangepicker', function(ev, picker) { + console.log("apply event fired, start/end dates are " + picker.startDate.format('MMMM D, YYYY') + " to " + picker.endDate.format('MMMM D, YYYY')); + }); + $('#reportrange').on('cancel.daterangepicker', function(ev, picker) { + console.log("cancel event fired"); + }); + $('#options1').click(function() { + $('#reportrange').data('daterangepicker').setOptions(optionSet1, cb); + }); + $('#options2').click(function() { + $('#reportrange').data('daterangepicker').setOptions(optionSet2, cb); + }); + $('#destroy').click(function() { + $('#reportrange').data('daterangepicker').remove(); + }); + + }; + + //3 + + function init_bootstrap_daterangepicker3() { + + if( typeof (daterangepicker) === 'undefined'){ return; } + console.log('init_daterangepicker3'); + + $('#single_cal1').daterangepicker({ + singleDatePicker: true, + singleClasses: "picker_1" + }, function(start, end, label) { + console.log(start.toISOString(), end.toISOString(), label); + }); + $('#single_cal2').daterangepicker({ + singleDatePicker: true, + singleClasses: "picker_2" + }, function(start, end, label) { + console.log(start.toISOString(), end.toISOString(), label); + }); + $('#single_cal3').daterangepicker({ + singleDatePicker: true, + singleClasses: "picker_3" + }, function(start, end, label) { + console.log(start.toISOString(), end.toISOString(), label); + }); + $('#single_cal4').daterangepicker({ + singleDatePicker: true, + singleClasses: "picker_4" + }, function(start, end, label) { + console.log(start.toISOString(), end.toISOString(), label); + }); + + + }; + + //4 + + function init_bootstrap_daterangepicker4() { + + if( typeof (daterangepicker) === 'undefined'){ return; } + console.log('init_bootstrap_daterangepicker4'); + + $('#reservation').daterangepicker(null, function(start, end, label) { + console.log(start.toISOString(), end.toISOString(), label); + }); + + $('#reservation-time').daterangepicker({ + timePicker: true, + timePickerIncrement: 30, + locale: { + format: 'MM/DD/YYYY h:mm A' + } + }); + + }; + + /* ION RANGE SLIDER */ + + function init_IonRangeSlider() { + + if( typeof (ionRangeSlider) === 'undefined'){ return; } + console.log('init_IonRangeSlider'); + + $("#range_27").ionRangeSlider({ + type: "double", + min: 1000000, + max: 2000000, + grid: true, + force_edges: true + }); + $("#range").ionRangeSlider({ + hide_min_max: true, + keyboard: true, + min: 0, + max: 5000, + from: 1000, + to: 4000, + type: 'double', + step: 1, + prefix: "$", + grid: true + }); + $("#range_25").ionRangeSlider({ + type: "double", + min: 1000000, + max: 2000000, + grid: true + }); + $("#range_26").ionRangeSlider({ + type: "double", + min: 0, + max: 10000, + step: 500, + grid: true, + grid_snap: true + }); + $("#range_31").ionRangeSlider({ + type: "double", + min: 0, + max: 100, + from: 30, + to: 70, + from_fixed: true + }); + $(".range_min_max").ionRangeSlider({ + type: "double", + min: 0, + max: 100, + from: 30, + to: 70, + max_interval: 50 + }); + $(".range_time24").ionRangeSlider({ + min: +moment().subtract(12, "hours").format("X"), + max: +moment().format("X"), + from: +moment().subtract(6, "hours").format("X"), + grid: true, + force_edges: true, + prettify: function(num) { + var m = moment(num, "X"); + return m.format("Do MMMM, HH:mm"); + } + }); + + }; + + /* COLOR PICKER */ + + function init_ColorPicker() { + + if( typeof (daterangepicker) === 'undefined'){ return; } + console.log('init_ColorPicker'); + + $('#reservation').daterangepicker(null, function(start, end, label) { + console.log(start.toISOString(), end.toISOString(), label); + }); + + $('#reservation-time').daterangepicker({ + timePicker: true, + timePickerIncrement: 30, + locale: { + format: 'MM/DD/YYYY h:mm A' + } + }); + + }; + + /* INPUT MASK */ + + function init_InputMask() { + + if( typeof (inputmask) === 'undefined'){ return; } + console.log('init_InputMask'); + + $(":input").inputmask(); + + }; + + /* PNotify */ + + function init_PNotify() { + + if( typeof (PNotify) === 'undefined'){ return; } + console.log('init_PNotify'); + + new PNotify({ + title: "PNotify", + type: "info", + text: "Welcome. Try hovering over me. You can click things behind me, because I'm non-blocking.", + nonblock: { + nonblock: true + }, + addclass: 'dark', + styling: 'bootstrap3', + hide: false, + before_close: function(PNotify) { + PNotify.update({ + title: PNotify.options.title + " - Enjoy your Stay", + before_close: null + }); + + PNotify.queueRemove(); + + return false; + } + }); + + }; + + /* CUSTOM NOTIFICATION */ + + function init_CustomNotification() { + + if( typeof (CustomTabs) === 'undefined'){ return; } + console.log('init_CustomTabs'); + + var cnt = 10; + + TabbedNotification = function(options) { + var message = ""; + + if (!document.getElementById('custom_notifications')) { + alert('doesnt exists'); + } else { + $('#custom_notifications ul.notifications').append("
  • "); + $('#custom_notifications #notif-group').append(message); + cnt++; + CustomTabs(options); + } + }; + + CustomTabs = function(options) { + $('.tabbed_notifications > div').hide(); + $('.tabbed_notifications > div:first-of-type').show(); + $('#custom_notifications').removeClass('dsp_none'); + $('.notifications a').click(function(e) { + e.preventDefault(); + var $this = $(this), + tabbed_notifications = '#' + $this.parents('.notifications').data('tabbed_notifications'), + others = $this.closest('li').siblings().children('a'), + target = $this.attr('href'); + others.removeClass('active'); + $this.addClass('active'); + $(tabbed_notifications).children('div').hide(); + $(target).show(); + }); + }; + + CustomTabs(); + + var tabid = idname = ''; + + $(document).on('click', '.notification_close', function(e) { + idname = $(this).parent().parent().attr("id"); + tabid = idname.substr(-2); + $('#ntf' + tabid).remove(); + $('#ntlink' + tabid).parent().remove(); + $('.notifications a').first().addClass('active'); + $('#notif-group div').first().css('display', 'block'); + }); + + }; + + + /* GAUGE */ + + + function init_gauge() { + + if( typeof (Gauge) === 'undefined'){ return; } + console.log('init_gauge'); + + var opts = { + lines: 12, + angle: 0, + lineWidth: 0.4, + pointer: { + length: 0.75, + strokeWidth: 0.042, + color: '#1D212A' + }, + limitMax: 'false', + colorStart: '#1ABC9C', + colorStop: '#1ABC9C', + strokeColor: '#F0F3F3', + generateGradient: true + }; + var target = document.getElementById('foo'), + gauge = new Gauge(target).setOptions(opts); + + gauge.maxValue = 6000; + gauge.animationSpeed = 32; + gauge.set(3200); + gauge.setTextField(document.getElementById("gauge-text")); + + } + + function init_gauge2() { + + if( typeof (Gauge) === 'undefined'){ return; } + console.log('init_gauge2'); + + var opts = { + lines: 12, + angle: 0, + lineWidth: 0.4, + pointer: { + length: 0.75, + strokeWidth: 0.042, + color: '#1D212A' + }, + limitMax: 'false', + colorStart: '#1ABC9C', + colorStop: '#1ABC9C', + strokeColor: '#F0F3F3', + generateGradient: true + }; + var target = document.getElementById('foo2'), + gauge = new Gauge(target).setOptions(opts); + + gauge.maxValue = 6000; + gauge.animationSpeed = 32; + gauge.set(3200); + gauge.setTextField(document.getElementById("gauge-text2")); + + } + + /* JQVMAP */ + + + function init_JQVmap(){ + + if( typeof (vectorMap) === 'undefined'){ return; } + console.log('init_JQVmap'); + + $('#world-map-gdp').vectorMap({ + map: 'world_en', + backgroundColor: null, + color: '#ffffff', + hoverOpacity: 0.7, + selectedColor: '#666666', + enableZoom: true, + showTooltip: true, + values: sample_data, + scaleColors: ['#E6F2F0', '#149B7E'], + normalizeFunction: 'polynomial' + }); + + }; + + function init_JQVmap2(){ + + if( typeof (vectorMap) === 'undefined'){ return; } + console.log('init_JQVmap2'); + + $('#usa_map').vectorMap({ + map: 'usa_en', + backgroundColor: null, + color: '#ffffff', + hoverOpacity: 0.7, + selectedColor: '#666666', + enableZoom: true, + showTooltip: true, + values: sample_data, + scaleColors: ['#E6F2F0', '#149B7E'], + normalizeFunction: 'polynomial' + }); + + }; + + + /* SPARKLINES */ + + function init_sparklines() { + /* + if( typeof (sparkline) === 'undefined'){ return; } + console.log('init_sparklines'); + */ + + $(".sparkline_one").sparkline([2, 4, 3, 4, 5, 4, 5, 4, 3, 4, 5, 6, 4, 5, 6, 3, 5, 4, 5, 4, 5, 4, 3, 4, 5, 6, 7, 5, 4, 3, 5, 6], { + type: 'bar', + height: '125', + barWidth: 13, + colorMap: { + '7': '#a1a1a1' + }, + barSpacing: 2, + barColor: '#26B99A' + }); + + $(".sparkline_two").sparkline([2, 4, 3, 4, 5, 4, 5, 4, 3, 4, 5, 6, 7, 5, 4, 3, 5, 6], { + type: 'bar', + height: '40', + barWidth: 9, + colorMap: { + '7': '#a1a1a1' + }, + barSpacing: 2, + barColor: '#26B99A' + }); + + $(".sparkline_three").sparkline([2, 4, 3, 4, 5, 4, 5, 4, 3, 4, 5, 6, 7, 5, 4, 3, 5, 6], { + type: 'line', + width: '200', + height: '40', + lineColor: '#26B99A', + fillColor: 'rgba(223, 223, 223, 0.57)', + lineWidth: 2, + spotColor: '#26B99A', + minSpotColor: '#26B99A' + }); + + $(".sparkline11").sparkline([2, 4, 3, 4, 5, 4, 5, 4, 3, 4, 6, 2, 4, 3, 4, 5, 4, 5, 4, 3], { + type: 'bar', + height: '40', + barWidth: 8, + colorMap: { + '7': '#a1a1a1' + }, + barSpacing: 2, + barColor: '#26B99A' + }); + + $(".sparkline22").sparkline([2, 4, 3, 4, 7, 5, 4, 3, 5, 6, 2, 4, 3, 4, 5, 4, 5, 4, 3, 4, 6], { + type: 'line', + height: '40', + width: '200', + lineColor: '#26B99A', + fillColor: '#ffffff', + lineWidth: 3, + spotColor: '#34495E', + minSpotColor: '#34495E' + }); + + $(".sparkline_bar").sparkline([2, 4, 3, 4, 5, 4, 5, 4, 3, 4, 5, 6, 4, 5, 6, 3, 5], { + type: 'bar', + colorMap: { + '7': '#a1a1a1' + }, + barColor: '#26B99A' + }); + + $(".sparkline_area").sparkline([5, 6, 7, 9, 9, 5, 3, 2, 2, 4, 6, 7], { + type: 'line', + lineColor: '#26B99A', + fillColor: '#26B99A', + spotColor: '#4578a0', + minSpotColor: '#728fb2', + maxSpotColor: '#6d93c4', + highlightSpotColor: '#ef5179', + highlightLineColor: '#8ba8bf', + spotRadius: 2.5, + width: 85 + }); + + $(".sparkline_line").sparkline([2, 4, 3, 4, 5, 4, 5, 4, 3, 4, 5, 6, 4, 5, 6, 3, 5], { + type: 'line', + lineColor: '#26B99A', + fillColor: '#ffffff', + width: 85, + spotColor: '#34495E', + minSpotColor: '#34495E' + }); + + $(".sparkline_pie").sparkline([1, 1, 2, 1], { + type: 'pie', + sliceColors: ['#26B99A', '#ccc', '#75BCDD', '#D66DE2'] + }); + + $(".sparkline_discreet").sparkline([4, 6, 7, 7, 4, 3, 2, 1, 4, 4, 2, 4, 3, 7, 8, 9, 7, 6, 4, 3], { + type: 'discrete', + barWidth: 3, + lineColor: '#26B99A', + width: '85', + }); + + }; + + /* SKYICONS */ + + function init_skycons(){ + + if( typeof (Skycons) === 'undefined'){ return; } + console.log('init_skycons'); + + var icons = new Skycons({ + "color": "#73879C" + }), + list = [ + "clear-day", "clear-night", "partly-cloudy-day", + "partly-cloudy-night", "cloudy", "rain", "sleet", "snow", "wind", + "fog" + ], + i; + + for (i = list.length; i--;) + icons.set(list[i], list[i]); + + icons.play(); + + } + + /* EASYPIECHART */ + + function init_EasyPieChart() { + + if( typeof (easyPieChart) === 'undefined'){ return; } + console.log('init_EasyPieChart'); + + $('.chart').easyPieChart({ + easing: 'easeOutElastic', + delay: 3000, + barColor: '#26B99A', + trackColor: '#fff', + scaleColor: false, + lineWidth: 20, + trackWidth: 16, + lineCap: 'butt', + onStep: function(from, to, percent) { + $(this.el).find('.percent').text(Math.round(percent)); + } + }); + var chart = window.chart = $('.chart').data('easyPieChart'); + $('.js_update').on('click', function() { + chart.update(Math.random() * 200 - 100); + }); + + //hover and retain popover when on popover content + var originalLeave = $.fn.popover.Constructor.prototype.leave; + $.fn.popover.Constructor.prototype.leave = function(obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type); + var container, timeout; + + originalLeave.call(this, obj); + + if (obj.currentTarget) { + container = $(obj.currentTarget).siblings('.popover'); + timeout = self.timeout; + container.one('mouseenter', function() { + //We entered the actual popover call off the dogs + clearTimeout(timeout); + //Let's monitor popover content instead + container.one('mouseleave', function() { + $.fn.popover.Constructor.prototype.leave.call(self, self); + }); + }); + } + }; + + $('body').popover({ + selector: '[data-popover]', + trigger: 'click hover', + delay: { + show: 50, + hide: 400 + } + }); + + }; + + /* DATA TABLES */ + + function init_DataTables() { + + if( typeof (DataTable) === 'undefined'){ return; } + console.log('init_DataTables'); + + var handleDataTableButtons = function() { + if ($("#datatable-buttons").length) { + $("#datatable-buttons").DataTable({ + dom: "Bfrtip", + buttons: [ + { + extend: "copy", + className: "btn-sm" + }, + { + extend: "csv", + className: "btn-sm" + }, + { + extend: "excel", + className: "btn-sm" + }, + { + extend: "pdfHtml5", + className: "btn-sm" + }, + { + extend: "print", + className: "btn-sm" + }, + ], + responsive: true + }); + } + }; + + TableManageButtons = function() { + "use strict"; + return { + init: function() { + handleDataTableButtons(); + } + }; + }(); + + $('#datatable').dataTable(); + + $('#datatable-keytable').DataTable({ + keys: true + }); + + $('#datatable-responsive').DataTable(); + + $('#datatable-scroller').DataTable({ + ajax: "js/datatables/json/scroller-demo.json", + deferRender: true, + scrollY: 380, + scrollCollapse: true, + scroller: true + }); + + $('#datatable-fixed-header').DataTable({ + fixedHeader: true + }); + + var $datatable = $('#datatable-checkbox'); + + $datatable.dataTable({ + 'order': [[ 1, 'asc' ]], + 'columnDefs': [ + { orderable: false, targets: [0] } + ] + }); + $datatable.on('draw.dt', function() { + $('checkbox input').iCheck({ + checkboxClass: 'icheckbox_flat-green' + }); + }); + + TableManageButtons.init(); + + }; + + /* CALENDAR */ + + /*$(window).load*/function init_calendar() { + + if( typeof (fullCalendar) === 'undefined'){ return; } + console.log('init_calendar'); + + var date = new Date(), + d = date.getDate(), + m = date.getMonth(), + y = date.getFullYear(), + started, + categoryClass; + + var calendar = $('#calendar').fullCalendar({ + header: { + left: 'prev,next today', + center: 'title', + right: 'month,agendaWeek,agendaDay,listMonth' + }, + selectable: true, + selectHelper: true, + select: function(start, end, allDay) { + $('#fc_create').click(); + + started = start; + ended = end; + + $(".antosubmit").on("click", function() { + var title = $("#title").val(); + if (end) { + ended = end; + } + + categoryClass = $("#event_type").val(); + + if (title) { + calendar.fullCalendar('renderEvent', { + title: title, + start: started, + end: end, + allDay: allDay + }, + true // make the event "stick" + ); + } + + $('#title').val(''); + + calendar.fullCalendar('unselect'); + + $('.antoclose').click(); + + return false; + }); + }, + eventClick: function(calEvent, jsEvent, view) { + $('#fc_edit').click(); + $('#title2').val(calEvent.title); + + categoryClass = $("#event_type").val(); + + $(".antosubmit2").on("click", function() { + calEvent.title = $("#title2").val(); + + calendar.fullCalendar('updateEvent', calEvent); + $('.antoclose2').click(); + }); + + calendar.fullCalendar('unselect'); + }, + editable: true, + events: [{ + title: 'All Day Event', + start: new Date(y, m, 1) + }, { + title: 'Long Event', + start: new Date(y, m, d - 5), + end: new Date(y, m, d - 2) + }, { + title: 'Meeting', + start: new Date(y, m, d, 10, 30), + allDay: false + }, { + title: 'Lunch', + start: new Date(y, m, d + 14, 12, 0), + end: new Date(y, m, d, 14, 0), + allDay: false + }, { + title: 'Birthday Party', + start: new Date(y, m, d + 1, 19, 0), + end: new Date(y, m, d + 1, 22, 30), + allDay: false + }, { + title: 'Click for Google', + start: new Date(y, m, 28), + end: new Date(y, m, 29), + url: 'http://google.com/' + }] + }); + + }; + + /* + eventAfterRender: function render (event, element, view) { + element.append(event.title); + + } + */ + + $(document).ready(function() { + + init_sidebar(); + init_daterangepicker(); + /*init_wysiwyg();*/ + init_select2(); + init_TagsInput(); + init_toolbox(); + init_switchery(); + init_autosize(); + init_starrr(); + init_parsley(); + init_cropper(); + init_bootstrap_daterangepicker(); + init_bootstrap_daterangepicker2(); + init_bootstrap_daterangepicker3(); + init_bootstrap_daterangepicker4(); + init_IonRangeSlider(); + init_ColorPicker(); + init_InputMask(); + init_tooltip(); + init_DataTables(); + init_JQVmap(); + init_JQVmap2(); + init_SmartWizard(); + init_compose(); + init_autocomplete(); + /*init_ToolbarBootstrapBindings();*/ + init_icheck(); + init_knob(); + init_skycons(); + init_PNotify(); + + //charts + /* + init_bar_chart(); + init_doughnut_chart(); + init_radar_chart(); + init_pie_chart(); + init_polar_area_chart(); + init_flot_chart3(); + init_flot_chart2(); + init_flot_chart(); + */ + //end + + + init_echarts(); + init_echart_map(); + init_echart_bar(); + init_echart_pie(); + init_echart_donut(); + init_echart_pie_collapse(); + init_echart_bar_horizontal(); + init_echart_scatter(); + init_echart_line(); + init_echart_gauge(); + init_echart_funnel(); + init_echart_radar(); + init_echart_bar(); + init_gauge(); + init_gauge2(); + init_validator(); + init_CustomNotification(); + init_countChecked(); + init_accordion(); + init_sparklines(); + init_sparklines2(); + init_sparklines3(); + init_EasyPieChart(); + init_morris_chart(); + init_MorrisChartPage(); + init_date_picker(); + init_calendar(); + + }); + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/js/new-custom2.js b/build/js/new-custom2.js new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/production/calendar.html b/production/calendar.html index 69fb84c42d3e8dc395b36b908bfe3f6a1d66fafa..77a4e7711fdb826a7550fe42658262dd769f29a9 100755 --- a/production/calendar.html +++ b/production/calendar.html @@ -20,7 +20,7 @@ - + @@ -163,7 +163,7 @@ - + @@ -422,106 +422,7 @@ - + - - - \ No newline at end of file diff --git a/production/chartjs.html b/production/chartjs.html index e86fb712992e7c14d25b780784eefbcba6f58fe8..0b12f5bae89bb222f8d17cf1a69ef2936f719064 100755 --- a/production/chartjs.html +++ b/production/chartjs.html @@ -17,7 +17,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -481,204 +481,7 @@ - + - - - \ No newline at end of file diff --git a/production/chartjs2.html b/production/chartjs2.html index 8ad02256f62a0557010e962a8001cefa75967c95..7e798a3a5670f602f8fb6e21bd76ab19f9c0ef19 100755 --- a/production/chartjs2.html +++ b/production/chartjs2.html @@ -17,7 +17,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -479,204 +479,7 @@ - + - - - \ No newline at end of file diff --git a/production/contacts.html b/production/contacts.html index 34199a9c63a3e5ab6858ccfdf83b076a0aadadb3..92df3b84bbf3ba4a80de978cef3285bb32e4a27e 100755 --- a/production/contacts.html +++ b/production/contacts.html @@ -17,7 +17,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -680,6 +680,6 @@ - + \ No newline at end of file diff --git a/production/e_commerce.html b/production/e_commerce.html index fcc5cb7dfadb3a0319ec5093ea239aecddb4d3a7..a4ac3b27afa43cdbae42053b94c85a45c2cac47b 100755 --- a/production/e_commerce.html +++ b/production/e_commerce.html @@ -19,7 +19,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -470,6 +470,6 @@ - + \ No newline at end of file diff --git a/production/echarts.html b/production/echarts.html index 8eabc5cf41546f17f0b9fee0f54e05cde8b273b0..58a0b9280592a79457f8453cfe9ce5ec1e881b74 100755 --- a/production/echarts.html +++ b/production/echarts.html @@ -17,7 +17,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -666,2197 +666,7 @@ - + - \ No newline at end of file diff --git a/production/fixed_footer.html b/production/fixed_footer.html index 5e69beff716e5477a3ace830e6c535341b6fe250..6deaffc007d2869c44742beb6926b03a917580d1 100644 --- a/production/fixed_footer.html +++ b/production/fixed_footer.html @@ -19,7 +19,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -303,6 +303,6 @@ - + \ No newline at end of file diff --git a/production/fixed_sidebar.html b/production/fixed_sidebar.html index e76f1873f044e1e87b3710467ed25e03b0b389eb..1506d7e8d24300761ccd109334387a254d2dde72 100644 --- a/production/fixed_sidebar.html +++ b/production/fixed_sidebar.html @@ -19,7 +19,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -302,6 +302,6 @@ - + \ No newline at end of file diff --git a/production/form.html b/production/form.html index 57660457254f08cb3092be4befbabaf7e98ef46e..b9f86dac928e94adf32cf842d4836ccf3cfb9679 100755 --- a/production/form.html +++ b/production/form.html @@ -7,8 +7,13 @@ + Gentelella Alela! | + + Gentelella Alela! | + + @@ -29,7 +34,7 @@ - + @@ -172,7 +177,7 @@ - + @@ -366,7 +371,8 @@
    - + +
    @@ -451,7 +457,8 @@
    - + +
    @@ -876,7 +883,8 @@
    - + +
    @@ -992,7 +1000,7 @@
    -
    +
    -
    +
    @@ -1357,220 +1365,8 @@ - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - diff --git a/production/form_advanced.html b/production/form_advanced.html index 5ba7567eedbee6545fa53797ad39a8ab94760ab1..922fb55faf6f195f975724f9cd23659461ac29c5 100755 --- a/production/form_advanced.html +++ b/production/form_advanced.html @@ -27,7 +27,7 @@ - + @@ -170,7 +170,7 @@ - +
    @@ -1223,628 +1223,7 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/production/form_buttons.html b/production/form_buttons.html index 6800c6643e515393520b0da3f5e52406d2bdf50d..9f564c8c77e649d172772076ebcb3bbde23a21a1 100755 --- a/production/form_buttons.html +++ b/production/form_buttons.html @@ -17,7 +17,7 @@ - + @@ -160,7 +160,7 @@ - +
    @@ -744,6 +744,6 @@ - + \ No newline at end of file diff --git a/production/form_upload.html b/production/form_upload.html index 9659194a9a2129e52a22b2cdd7b686696efd3ec2..e75fd84107a0690972838e5caa9ba4f80b757df5 100755 --- a/production/form_upload.html +++ b/production/form_upload.html @@ -20,7 +20,7 @@ - + @@ -163,7 +163,7 @@ - + @@ -350,6 +350,6 @@ - + \ No newline at end of file diff --git a/production/form_validation.html b/production/form_validation.html index b2a308a4dba17b74533ae53c7c5fa705c2d7372b..a72972529db9fc736b13c1fb35d616b17f991a29 100755 --- a/production/form_validation.html +++ b/production/form_validation.html @@ -17,7 +17,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -423,38 +423,7 @@ - + - - - \ No newline at end of file diff --git a/production/form_wizards.html b/production/form_wizards.html index 41c76bee16f12010d82f9cafcc6b2f5db68fa593..f0416d68813fb446ca0c8af51982c97f52b54fbc 100755 --- a/production/form_wizards.html +++ b/production/form_wizards.html @@ -17,7 +17,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -597,22 +597,7 @@ - + - - - \ No newline at end of file diff --git a/production/general_elements.html b/production/general_elements.html index 43ccbbe467d99906cc58f5b4c1eda9e90d399fd8..8fe1f5ca415bff37207c2f6b0302cb25bcd926cb 100755 --- a/production/general_elements.html +++ b/production/general_elements.html @@ -26,7 +26,7 @@ - + @@ -169,7 +169,7 @@ - + @@ -1655,87 +1655,7 @@ - + - - - - - - - \ No newline at end of file diff --git a/production/glyphicons.html b/production/glyphicons.html index 7114097210e328c2f2e8371cf429c53e9d047a46..d695568a74bb9994ce17687071f1f05110bbdddd 100755 --- a/production/glyphicons.html +++ b/production/glyphicons.html @@ -17,7 +17,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -1735,6 +1735,6 @@ - + \ No newline at end of file diff --git a/production/icons.html b/production/icons.html index 90291cf8a6fe471025a77fda16002b5d0ba49b92..058f41ab822ef43cfe5b2ccd8a32e3217a22e1f2 100755 --- a/production/icons.html +++ b/production/icons.html @@ -17,7 +17,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -2343,6 +2343,6 @@ - + \ No newline at end of file diff --git a/production/inbox.html b/production/inbox.html index 8cc9892f4a8ea20b12cc2f566b29834fa06c959b..2a93046565daf20973241a848fd8715497548f14 100755 --- a/production/inbox.html +++ b/production/inbox.html @@ -19,7 +19,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -636,80 +636,7 @@ - + - - - - - - > - \ No newline at end of file diff --git a/production/index.html b/production/index.html index d631d98b436d45e5be7a6cf96aed31faf1c8d77e..ee587d3d3082e9aba9f75da9b7f11a23214f68c8 100755 --- a/production/index.html +++ b/production/index.html @@ -17,6 +17,7 @@ + @@ -25,7 +26,7 @@ - + @@ -168,7 +169,7 @@ - + @@ -534,7 +535,7 @@ - + @@ -1020,266 +1021,7 @@ - + - - - - - - - - - - - - - - - - - - - - - - - diff --git a/production/index2.html b/production/index2.html index 0f123e0e7c952fbbce401e67f4a7b1ad171e77bd..ec64d31903e618fe746be404166ea614cd1c25f1 100755 --- a/production/index2.html +++ b/production/index2.html @@ -19,7 +19,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -328,22 +328,22 @@ Total Sessions

    231,809

    - - + +
    Total Revenue

    $231,809

    - - + +
    Total Sessions

    231,809

    - - + +
    @@ -472,15 +472,15 @@
    - +

    Bounce Rates

    - +

    New Traffic

    - +

    Device Share

    @@ -766,10 +766,12 @@ - + + + + + \ No newline at end of file diff --git a/production/index3.html b/production/index3.html index 17b962ba494a6d5292c60fbf966958cf5fb802cd..844313860b7afb690ab6740328aad3c78dfd77dc 100755 --- a/production/index3.html +++ b/production/index3.html @@ -22,7 +22,7 @@ - + @@ -165,7 +165,7 @@ - +
    @@ -277,28 +277,28 @@
    Total Sessions

    231,809

    - +
    Total Revenue

    $ 231,809

    - +
    Total Sessions

    231,809

    - +
    Total Sessions

    231,809

    - +
    @@ -882,9 +882,10 @@ - + + + + + + + + \ No newline at end of file diff --git a/production/invoice.html b/production/invoice.html index 96d0caf09311ea11080e55e1d3cf527f9211bec1..5e7d5fe838d45afb4fe86e146533a3955e7c013b 100755 --- a/production/invoice.html +++ b/production/invoice.html @@ -17,7 +17,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -490,6 +490,6 @@ - + \ No newline at end of file diff --git a/production/level2.html b/production/level2.html index 6353f93aee4b1d7fe51cea2b00e59e8c1b6c53c4..a297ff2d2b551c51ff6786b3b79eeb8edb6a47c8 100644 --- a/production/level2.html +++ b/production/level2.html @@ -1,3 +1,4 @@ + @@ -17,7 +18,7 @@ - + @@ -160,7 +161,7 @@ - + @@ -298,6 +299,6 @@ - + \ No newline at end of file diff --git a/production/login.html b/production/login.html index 5a5da50e4e3a71803a6a5e6123e6860b9233211f..c50e2374cc2782c2defb362c86f78a278ec18591 100755 --- a/production/login.html +++ b/production/login.html @@ -19,7 +19,7 @@ - + diff --git a/production/map.html b/production/map.html index b1ab516acfe5b45e6edebeaf6ae64dff7c073925..1731c1ce7ae5d634c935f35583f3e5ad81a575ed 100755 --- a/production/map.html +++ b/production/map.html @@ -19,7 +19,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -1244,9 +1244,6 @@
    - - - - - @@ -1403,7 +1398,7 @@ - + diff --git a/production/media_gallery.html b/production/media_gallery.html index f4bfb1d18b45c921bb5494e44a2bbc77465d5217..87291d657207854371a3308fc0a878d32b1f6fee 100755 --- a/production/media_gallery.html +++ b/production/media_gallery.html @@ -18,7 +18,7 @@ - + @@ -161,7 +161,7 @@ - + @@ -533,6 +533,6 @@ - + \ No newline at end of file diff --git a/production/morisjs.html b/production/morisjs.html index 8114d9913aa58fc85dd9ef7434c00f5a20a25b1a..76c1447710832ce69ca20fa004cca0da7bd9c3dc 100755 --- a/production/morisjs.html +++ b/production/morisjs.html @@ -19,7 +19,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -493,136 +493,7 @@ - + - - - \ No newline at end of file diff --git a/production/other_charts.html b/production/other_charts.html index ca3e6974a31d6c68e28eccaac428e7e506f98b97..e7bea66d237246c587f59f093c2d3ef5e5dd8489 100755 --- a/production/other_charts.html +++ b/production/other_charts.html @@ -21,7 +21,7 @@ - + @@ -164,7 +164,7 @@ - + @@ -456,143 +456,7 @@ - + - - - - - - - - - - - \ No newline at end of file diff --git a/production/page_403.html b/production/page_403.html index 0520c67c485bb63d93b579c535636afa958ec471..7d5a756d6631c5eddce3387c0958fb7158f2e591 100755 --- a/production/page_403.html +++ b/production/page_403.html @@ -17,7 +17,7 @@ - + @@ -61,6 +61,6 @@ - + \ No newline at end of file diff --git a/production/page_404.html b/production/page_404.html index d0bec47b715cae777715539b0e2dae30b5c7e524..ab24bd055025c6556eb7a690c23ba8c74e9fbe8f 100755 --- a/production/page_404.html +++ b/production/page_404.html @@ -17,7 +17,7 @@ - + @@ -61,6 +61,6 @@ - + diff --git a/production/page_500.html b/production/page_500.html index 2326cef0b1ea62d1d090a90d7db88aeebc54e155..11e07d6ba2154a893d65845c927ce7bd84294dbc 100755 --- a/production/page_500.html +++ b/production/page_500.html @@ -17,7 +17,7 @@ - + @@ -61,6 +61,6 @@ - + \ No newline at end of file diff --git a/production/plain_page.html b/production/plain_page.html index 5bd4846239af6022bf32ef8be88defdbe8890c58..130467a057586ee5a8be7aa81a253ab3887890fc 100755 --- a/production/plain_page.html +++ b/production/plain_page.html @@ -17,7 +17,7 @@ - + @@ -161,7 +161,7 @@ - + @@ -341,6 +341,6 @@ - + diff --git a/production/pricing_tables.html b/production/pricing_tables.html index 3830bbe15d0085177a46e90bc04e12283a60481c..980211bb64668afcfc63f0cbd6c9eb6b361322ba 100755 --- a/production/pricing_tables.html +++ b/production/pricing_tables.html @@ -17,7 +17,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -481,6 +481,6 @@ - + \ No newline at end of file diff --git a/production/profile.html b/production/profile.html index 25f62087e8dddda05a9960786ea9f47f3676a0e3..c272dd9d10f03b12bc970145443b483717c8b5c0 100755 --- a/production/profile.html +++ b/production/profile.html @@ -19,7 +19,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -576,112 +576,7 @@ - + - - - - - \ No newline at end of file diff --git a/production/project_detail.html b/production/project_detail.html index 960e8e32055c123ed620534dde13f363ce057116..58300b075179a2e9c0704bbf805d1f1111fdf7df 100755 --- a/production/project_detail.html +++ b/production/project_detail.html @@ -19,7 +19,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -478,9 +478,10 @@ - + + \ No newline at end of file diff --git a/production/projects.html b/production/projects.html index 1c766383d9361c94e19fd04d99058919734ef9a2..25f46737367598a39569cfd3d485b060a0e813f7 100755 --- a/production/projects.html +++ b/production/projects.html @@ -19,7 +19,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -684,6 +684,6 @@ - + \ No newline at end of file diff --git a/production/tables.html b/production/tables.html index ed32fc985a9ec65468fc0e7ae8e9930573c22cc1..a53e85f36c3b2a7e18248c9b99d9060aec49ca2e 100755 --- a/production/tables.html +++ b/production/tables.html @@ -16,10 +16,10 @@ - + - + @@ -162,7 +162,7 @@ - + @@ -557,8 +557,11 @@
    - @@ -577,7 +580,10 @@ @@ -590,7 +596,10 @@ @@ -604,7 +613,10 @@ @@ -618,7 +630,10 @@ @@ -631,7 +646,10 @@ @@ -644,7 +662,10 @@ @@ -658,7 +679,10 @@ @@ -671,7 +695,10 @@ @@ -685,7 +712,10 @@ @@ -698,7 +728,10 @@ @@ -711,7 +744,10 @@
    - + + Invoice Invoice Date
    - + 121000040 May 23, 2014 11:47:56 PM
    - + 121000039 May 23, 2014 11:30:12 PM
    - + 121000038 May 24, 2014 10:55:33 PM
    - + 121000037 May 24, 2014 10:52:44 PM
    - + 121000040 May 24, 2014 11:47:56 PM
    - + 121000039 May 26, 2014 11:30:12 PM
    - + 121000038 May 26, 2014 10:55:33 PM
    - + 121000037 May 26, 2014 10:52:44 PM
    - + 121000040 May 27, 2014 11:47:56 PM
    - + 121000039 May 28, 2014 11:30:12 PM
    + + + @@ -740,9 +776,9 @@ - + - + \ No newline at end of file diff --git a/production/tables_dynamic.html b/production/tables_dynamic.html index 3148f9fffed047659ef336174500b4d02b3082da..2feff93f12396c0ff4930bad943a58f3ddba042c 100755 --- a/production/tables_dynamic.html +++ b/production/tables_dynamic.html @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@ - + @@ -168,7 +168,7 @@ - + @@ -825,7 +825,12 @@ - + @@ -838,7 +843,12 @@ - + @@ -847,7 +857,12 @@ - + @@ -856,7 +871,12 @@ - + @@ -865,7 +885,12 @@ - + @@ -874,7 +899,12 @@ - + @@ -883,7 +913,12 @@ - + @@ -892,7 +927,12 @@ - + @@ -901,7 +941,12 @@ - + @@ -910,7 +955,12 @@ - + @@ -919,7 +969,12 @@ - + @@ -928,7 +983,12 @@ - + @@ -937,7 +997,12 @@ - + @@ -946,7 +1011,12 @@ - + @@ -955,7 +1025,12 @@ - + @@ -964,7 +1039,12 @@ - + @@ -973,7 +1053,12 @@ - + @@ -982,7 +1067,12 @@ - + @@ -991,7 +1081,12 @@ - + @@ -1000,7 +1095,12 @@ - + @@ -1009,7 +1109,12 @@ - + @@ -1018,7 +1123,12 @@ - + @@ -1027,7 +1137,12 @@ - + @@ -1036,7 +1151,12 @@ - + @@ -1045,7 +1165,12 @@ - + @@ -1054,7 +1179,12 @@ - + @@ -1063,7 +1193,12 @@ - + @@ -1072,7 +1207,12 @@ - + @@ -1081,7 +1221,12 @@ - + @@ -1090,7 +1235,12 @@ - + @@ -1099,7 +1249,12 @@ - + @@ -1108,7 +1263,12 @@ - + @@ -1117,7 +1277,12 @@ - + @@ -1126,7 +1291,12 @@ - + @@ -1135,7 +1305,12 @@ - + @@ -1144,7 +1319,12 @@ - + @@ -1153,7 +1333,12 @@ - + @@ -1162,7 +1347,12 @@ - + @@ -1171,7 +1361,12 @@ - + @@ -1180,7 +1375,12 @@ - + @@ -1189,7 +1389,12 @@ - + @@ -1198,7 +1403,12 @@ - + @@ -1207,7 +1417,12 @@ - + @@ -1216,7 +1431,12 @@ - + @@ -1225,7 +1445,12 @@ - + @@ -1234,7 +1459,12 @@ - + @@ -1243,7 +1473,12 @@ - + @@ -1252,7 +1487,12 @@ - + @@ -1261,7 +1501,12 @@ - + @@ -1270,7 +1515,12 @@ - + @@ -1279,7 +1529,12 @@ - + @@ -1288,7 +1543,12 @@ - + @@ -1297,7 +1557,12 @@ - + @@ -1306,7 +1571,12 @@ - + @@ -1315,7 +1585,12 @@ - + @@ -1324,7 +1599,12 @@ - + @@ -1333,7 +1613,12 @@ - + @@ -1342,7 +1627,12 @@ - + @@ -2869,7 +3159,7 @@
    -

    Responsive example Users

    +

    Responsive exampleUsers

    + + Name Position Office
    + + Tiger Nixon System Architect Edinburgh$320,800
    + + Garrett Winters Accountant Tokyo$170,750
    + + Ashton Cox Junior Technical Author San Francisco$86,000
    + + Cedric Kelly Senior Javascript Developer Edinburgh$433,060
    + + Airi Satou Accountant Tokyo$162,700
    + + Brielle Williamson Integration Specialist New York$372,000
    + + Herrod Chandler Sales Assistant San Francisco$137,500
    + + Rhona Davidson Integration Specialist Tokyo$327,900
    + + Colleen Hurst Javascript Developer San Francisco$205,500
    + + Sonya Frost Software Engineer Edinburgh$103,600
    + + Jena Gaines Office Manager London$90,560
    + + Quinn Flynn Support Lead Edinburgh$342,000
    + + Charde Marshall Regional Director San Francisco$470,600
    + + Haley Kennedy Senior Marketing Designer London$313,500
    + + Tatyana Fitzpatrick Regional Director London$385,750
    + + Michael Silva Marketing Designer London$198,500
    + + Paul Byrd Chief Financial Officer (CFO) New York$725,000
    + + Gloria Little Systems Administrator New York$237,500
    + + Bradley Greer Software Engineer London$132,000
    + + Dai Rios Personnel Lead Edinburgh$217,500
    + + Jenette Caldwell Development Lead New York$345,000
    + + Yuri Berry Chief Marketing Officer (CMO) New York$675,000
    + + Caesar Vance Pre-Sales Support New York$106,450
    + + Doris Wilder Sales Assistant Sidney$85,600
    + + Angelica Ramos Chief Executive Officer (CEO) London$1,200,000
    + + Gavin Joyce Developer Edinburgh$92,575
    + + Jennifer Chang Regional Director Singapore$357,650
    + + Brenden Wagner Software Engineer San Francisco$206,850
    + + Fiona Green Chief Operating Officer (COO) San Francisco$850,000
    + + Shou Itou Regional Marketing Tokyo$163,000
    + + Michelle House Integration Specialist Sidney$95,400
    + + Suki Burks Developer London$114,500
    + + Prescott Bartlett Technical Author London$145,000
    + + Gavin Cortez Team Leader San Francisco$235,500
    + + Martena Mccray Post-Sales support Edinburgh$324,050
    + + Unity Butler Marketing Designer San Francisco$85,675
    + + Howard Hatfield Office Manager San Francisco$164,500
    + + Hope Fuentes Secretary San Francisco$109,850
    + + Vivian Harrell Financial Controller San Francisco$452,500
    + + Timothy Mooney Office Manager London$136,200
    + + Jackson Bradshaw Director New York$645,750
    + + Olivia Liang Support Engineer Singapore$234,500
    + + Bruno Nash Software Engineer London$163,500
    + + Sakura Yamamoto Support Engineer Tokyo$139,575
    + + Thor Walton Developer New York$98,540
    + + Finn Camacho Support Engineer San Francisco$87,500
    + + Serge Baldwin Data Coordinator Singapore$138,575
    + + Zenaida Frank Software Engineer New York$125,250
    + + Zorita Serrano Software Engineer San Francisco$115,000
    + + Jennifer Acosta Junior Javascript Developer Edinburgh$75,650
    + + Cara Stevens Sales Assistant New York$145,600
    + + Hermione Butler Regional Director London$356,250
    + + Lael Greer Systems Administrator London$103,500
    + + Jonas Alexander Developer San Francisco$86,500
    + + Shad Decker Regional Director Edinburgh$183,000
    + + Michael Bruce Javascript Developer Singapore$183,000
    + + Donna Snider Customer Support New York
    @@ -3535,7 +3826,8 @@
    - + + @@ -3583,88 +3875,7 @@ - - - - - TableManageButtons.init(); - }); - - \ No newline at end of file diff --git a/production/typography.html b/production/typography.html index 7165a8cae542b7ae42d54c4ce2164c0552abd205..3529376592f6dd66fc3e7cdec5f7ab0334c1de0e 100755 --- a/production/typography.html +++ b/production/typography.html @@ -17,7 +17,7 @@ - + @@ -160,7 +160,7 @@ - + @@ -377,6 +377,6 @@ - + \ No newline at end of file diff --git a/production/widgets.html b/production/widgets.html index 43bb27c5794e8748ee87611e574ad55e5403f4fa..25e0cd11bb071a1a3c0a05dc700a7620e5665513 100755 --- a/production/widgets.html +++ b/production/widgets.html @@ -19,7 +19,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -909,7 +909,7 @@ - + @@ -919,7 +919,7 @@ - + @@ -928,6 +928,8 @@ + + + + + + \ No newline at end of file diff --git a/vendors/fullcalendar/dist/fullcalendar.css b/vendors/fullcalendar/dist/fullcalendar.css index 81e9c1ee2074e19c1d9c1ab54d89459d4bbe20b6..d0efbd8760cf462726ed05e1a7cd6afb0da5ae3b 100644 --- a/vendors/fullcalendar/dist/fullcalendar.css +++ b/vendors/fullcalendar/dist/fullcalendar.css @@ -1,5 +1,5 @@ /*! - * FullCalendar v2.7.3 Stylesheet + * FullCalendar v3.1.0 Stylesheet * Docs & License: http://fullcalendar.io/ * (c) 2016 Adam Shaw */ @@ -22,14 +22,18 @@ body .fc { /* extra precedence to overcome jqui */ /* Colors --------------------------------------------------------------------------------------------------*/ +/* for gutter border */ + .fc-unthemed th, .fc-unthemed td, .fc-unthemed thead, .fc-unthemed tbody, .fc-unthemed .fc-divider, .fc-unthemed .fc-row, -.fc-unthemed .fc-content, /* for gutter border */ -.fc-unthemed .fc-popover { +.fc-unthemed .fc-content, +.fc-unthemed .fc-popover, +.fc-unthemed .fc-list-view, +.fc-unthemed .fc-list-heading td { border-color: #ddd; } @@ -38,7 +42,8 @@ body .fc { /* extra precedence to overcome jqui */ } .fc-unthemed .fc-divider, -.fc-unthemed .fc-popover .fc-header { +.fc-unthemed .fc-popover .fc-header, +.fc-unthemed .fc-list-heading td { background: #eee; } @@ -46,20 +51,18 @@ body .fc { /* extra precedence to overcome jqui */ color: #666; } -.fc-unthemed .fc-today { +.fc-unthemed td.fc-today { background: #fcf8e3; } .fc-highlight { /* when user is selecting cells */ background: #bce8f1; opacity: .3; - filter: alpha(opacity=30); /* for IE */ } .fc-bgevent { /* default look for background events */ background: rgb(143, 223, 130); opacity: .3; - filter: alpha(opacity=30); /* for IE */ } .fc-nonbusiness { /* default look for non-business-hours areas */ @@ -231,9 +234,9 @@ NOTE: use percentage font sizes or else old IE chokes text-decoration: none; background-position: 0 -15px; -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; } .fc-state-down, @@ -247,7 +250,6 @@ NOTE: use percentage font sizes or else old IE chokes cursor: default; background-image: none; opacity: 0.65; - filter: alpha(opacity=65); box-shadow: none; } @@ -367,6 +369,7 @@ hr.fc-divider { .fc table { width: 100%; + box-sizing: border-box; /* fix scrollbar issue in firefox */ table-layout: fixed; border-collapse: collapse; border-spacing: 0; @@ -390,6 +393,18 @@ hr.fc-divider { } +/* Internal Nav Links +--------------------------------------------------------------------------------------------------*/ + +a[data-goto] { + cursor: pointer; +} + +a[data-goto]:hover { + text-decoration: underline; +} + + /* Fake Table Rows --------------------------------------------------------------------------------------------------*/ @@ -508,10 +523,14 @@ temporary rendered events). line-height: 1.3; border-radius: 3px; border: 1px solid #3a87ad; /* default BORDER color */ - background-color: #3a87ad; /* default BACKGROUND color */ font-weight: normal; /* undo jqui's ui-widget-header bold */ } +.fc-event, +.fc-event-dot { + background-color: #3a87ad; /* default BACKGROUND color */ +} + /* overpower some of bootstrap's and jqui's styles on tags */ .fc-event, .fc-event:hover, @@ -534,7 +553,6 @@ temporary rendered events). z-index: 1; background: #fff; opacity: .25; - filter: alpha(opacity=25); /* for IE */ } .fc-event .fc-content { @@ -688,6 +706,10 @@ be a descendant of the grid when it is being dragged. padding: 0 1px; } +tr:first-child > td > .fc-day-grid-event { + margin-top: 2px; /* a little bit more space before the first event */ +} + .fc-day-grid-event.fc-selected:after { content: ""; position: absolute; @@ -700,7 +722,6 @@ be a descendant of the grid when it is being dragged. /* darkening effect */ background: #000; opacity: .25; - filter: alpha(opacity=25); /* for IE */ } .fc-day-grid-event .fc-content { /* force events to be one-line tall */ @@ -785,14 +806,23 @@ a.fc-more:hover { -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + + /* Toolbar --------------------------------------------------------------------------------------------------*/ .fc-toolbar { text-align: center; +} + +.fc-toolbar.fc-header-toolbar { margin-bottom: 1em; } +.fc-toolbar.fc-footer-toolbar { + margin-top: 1em; +} + .fc-toolbar .fc-left { float: left; } @@ -866,6 +896,8 @@ a.fc-more:hover { z-index: 1; } + + /* BasicView --------------------------------------------------------------------------------------------------*/ @@ -873,8 +905,7 @@ a.fc-more:hover { .fc-basicWeek-view .fc-content-skeleton, .fc-basicDay-view .fc-content-skeleton { - /* we are sure there are no day numbers in these views, so... */ - padding-top: 1px; /* add a pixel to make sure there are 2px padding above events */ + /* there may be week numbers in these views, so no padding-top */ padding-bottom: 1em; /* ensure a space at bottom of cell for user selecting/clicking */ } @@ -897,42 +928,45 @@ a.fc-more:hover { /* week and day number styling */ +.fc-day-top.fc-other-month { + opacity: 0.3; +} + .fc-basic-view .fc-week-number, .fc-basic-view .fc-day-number { - padding: 0 2px; + padding: 2px; +} + +.fc-basic-view th.fc-week-number, +.fc-basic-view th.fc-day-number { + padding: 0 2px; /* column headers can't have as much v space */ } -.fc-basic-view td.fc-week-number span, -.fc-basic-view td.fc-day-number { - padding-top: 2px; - padding-bottom: 2px; +.fc-ltr .fc-basic-view .fc-day-top .fc-day-number { float: right; } +.fc-rtl .fc-basic-view .fc-day-top .fc-day-number { float: left; } + +.fc-ltr .fc-basic-view .fc-day-top .fc-week-number { float: left; border-radius: 0 0 3px 0; } +.fc-rtl .fc-basic-view .fc-day-top .fc-week-number { float: right; border-radius: 0 0 0 3px; } + +.fc-basic-view .fc-day-top .fc-week-number { + min-width: 1.5em; + text-align: center; + background-color: #f2f2f2; + color: #808080; } -.fc-basic-view .fc-week-number { +/* when week/day number have own column */ + +.fc-basic-view td.fc-week-number { text-align: center; } -.fc-basic-view .fc-week-number span { +.fc-basic-view td.fc-week-number > * { /* work around the way we do column resizing and ensure a minimum width */ display: inline-block; min-width: 1.25em; } -.fc-ltr .fc-basic-view .fc-day-number { - text-align: right; -} - -.fc-rtl .fc-basic-view .fc-day-number { - text-align: left; -} - -.fc-day-number.fc-other-month { - opacity: 0.3; - filter: alpha(opacity=30); /* for IE */ - /* opacity with small font can sometimes look too faded - might want to set the 'color' property instead - making day-numbers bold also fixes the problem */ -} /* AgendaView all-day area --------------------------------------------------------------------------------------------------*/ @@ -947,7 +981,6 @@ a.fc-more:hover { } .fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton { - padding-top: 1px; /* add a pixel to make sure there are 2px padding above events */ padding-bottom: 1em; /* give space underneath events for clicking/selecting days */ } @@ -1258,3 +1291,116 @@ be a descendant of the grid when it is being dragged. border-top-color: transparent; border-bottom-color: transparent; } + + + +/* List View +--------------------------------------------------------------------------------------------------*/ + +/* possibly reusable */ + +.fc-event-dot { + display: inline-block; + width: 10px; + height: 10px; + border-radius: 5px; +} + +/* view wrapper */ + +.fc-rtl .fc-list-view { + direction: rtl; /* unlike core views, leverage browser RTL */ +} + +.fc-list-view { + border-width: 1px; + border-style: solid; +} + +/* table resets */ + +.fc .fc-list-table { + table-layout: auto; /* for shrinkwrapping cell content */ +} + +.fc-list-table td { + border-width: 1px 0 0; + padding: 8px 14px; +} + +.fc-list-table tr:first-child td { + border-top-width: 0; +} + +/* day headings with the list */ + +.fc-list-heading { + border-bottom-width: 1px; +} + +.fc-list-heading td { + font-weight: bold; +} + +.fc-ltr .fc-list-heading-main { float: left; } +.fc-ltr .fc-list-heading-alt { float: right; } + +.fc-rtl .fc-list-heading-main { float: right; } +.fc-rtl .fc-list-heading-alt { float: left; } + +/* event list items */ + +.fc-list-item.fc-has-url { + cursor: pointer; /* whole row will be clickable */ +} + +.fc-list-item:hover td { + background-color: #f5f5f5; +} + +.fc-list-item-marker, +.fc-list-item-time { + white-space: nowrap; + width: 1px; +} + +/* make the dot closer to the event title */ +.fc-ltr .fc-list-item-marker { padding-right: 0; } +.fc-rtl .fc-list-item-marker { padding-left: 0; } + +.fc-list-item-title a { + /* every event title cell has an tag */ + text-decoration: none; + color: inherit; +} + +.fc-list-item-title a[href]:hover { + /* hover effect only on titles with hrefs */ + text-decoration: underline; +} + +/* message when no events */ + +.fc-list-empty-wrap2 { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.fc-list-empty-wrap1 { + width: 100%; + height: 100%; + display: table; +} + +.fc-list-empty { + display: table-cell; + vertical-align: middle; + text-align: center; +} + +.fc-unthemed .fc-list-empty { /* theme will provide own background */ + background-color: #eee; +} diff --git a/vendors/fullcalendar/dist/fullcalendar.js b/vendors/fullcalendar/dist/fullcalendar.js index cbe67697d395f8f2a4e18b7eb7b527d3a3a4eb37..cf696b2996013bee497cbdb8ddc0dbe22079276c 100644 --- a/vendors/fullcalendar/dist/fullcalendar.js +++ b/vendors/fullcalendar/dist/fullcalendar.js @@ -1,5 +1,5 @@ /*! - * FullCalendar v2.7.3 + * FullCalendar v3.1.0 * Docs & License: http://fullcalendar.io/ * (c) 2016 Adam Shaw */ @@ -19,8 +19,8 @@ ;; var FC = $.fullCalendar = { - version: "2.7.3", - internalApiVersion: 4 + version: "3.1.0", + internalApiVersion: 7 }; var fcViews = FC.views = {}; @@ -53,13 +53,14 @@ $.fn.fullCalendar = function(options) { calendar.render(); } }); - + return res; }; var complexOptions = [ // names of options that are objects whose properties should be combined 'header', + 'footer', 'buttonText', 'buttonIcons', 'themeButtonIcons' @@ -71,56 +72,6 @@ function mergeOptions(optionObjs) { return mergeProps(optionObjs, complexOptions); } - -// Given options specified for the calendar's constructor, massages any legacy options into a non-legacy form. -// Converts View-Option-Hashes into the View-Specific-Options format. -function massageOverrides(input) { - var overrides = { views: input.views || {} }; // the output. ensure a `views` hash - var subObj; - - // iterate through all option override properties (except `views`) - $.each(input, function(name, val) { - if (name != 'views') { - - // could the value be a legacy View-Option-Hash? - if ( - $.isPlainObject(val) && - !/(time|duration|interval)$/i.test(name) && // exclude duration options. might be given as objects - $.inArray(name, complexOptions) == -1 // complex options aren't allowed to be View-Option-Hashes - ) { - subObj = null; - - // iterate through the properties of this possible View-Option-Hash value - $.each(val, function(subName, subVal) { - - // is the property targeting a view? - if (/^(month|week|day|default|basic(Week|Day)?|agenda(Week|Day)?)$/.test(subName)) { - if (!overrides.views[subName]) { // ensure the view-target entry exists - overrides.views[subName] = {}; - } - overrides.views[subName][name] = subVal; // record the value in the `views` object - } - else { // a non-View-Option-Hash property - if (!subObj) { - subObj = {}; - } - subObj[subName] = subVal; // accumulate these unrelated values for later - } - }); - - if (subObj) { // non-View-Option-Hash properties? transfer them as-is - overrides[name] = subObj; - } - } - else { - overrides[name] = val; // transfer normal options as-is - } - } - }); - - return overrides; -} - ;; // exports @@ -247,7 +198,7 @@ function undistributeHeight(els) { function matchCellWidths(els) { var maxInnerWidth = 0; - els.find('> span').each(function(i, innerEl) { + els.find('> *').each(function(i, innerEl) { var innerWidth = $(innerEl).outerWidth(); if (innerWidth > maxInnerWidth) { maxInnerWidth = innerWidth; @@ -628,7 +579,8 @@ function flexibleCompare(a, b) { ----------------------------------------------------------------------------------------------------------------------*/ -// Computes the intersection of the two ranges. Returns undefined if no intersection. +// Computes the intersection of the two ranges. Will return fresh date clones in a range. +// Returns undefined if no intersection. // Expects all dates to be normalized to the same timezone beforehand. // TODO: move to date section? function intersectRanges(subjectRange, constraintRange) { @@ -897,6 +849,7 @@ function createObject(proto) { f.prototype = proto; return new f(); } +FC.createObject = createObject; function copyOwnProps(src, dest) { @@ -908,22 +861,6 @@ function copyOwnProps(src, dest) { } -// Copies over certain methods with the same names as Object.prototype methods. Overcomes an IE<=8 bug: -// https://developer.mozilla.org/en-US/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug -function copyNativeMethods(src, dest) { - var names = [ 'constructor', 'toString', 'valueOf' ]; - var i, name; - - for (i = 0; i < names.length; i++) { - name = names[i]; - - if (src[name] !== Object.prototype[name]) { - dest[name] = src[name]; - } - } -} - - function hasOwnProp(obj, name) { return hasOwnPropMethod.call(obj, name); } @@ -989,6 +926,21 @@ function cssToStr(cssProps) { } +// Given an object hash of HTML attribute names to values, +// generates a string that can be injected between < > in HTML +function attrsToStr(attrs) { + var parts = []; + + $.each(attrs, function(name, val) { + if (val != null) { + parts.push(name + '="' + htmlEscape(val) + '"'); + } + }); + + return parts.join(' '); +} + + function capitaliseFirstLetter(str) { return str.charAt(0).toUpperCase() + str.slice(1); } @@ -1056,14 +1008,24 @@ function debounce(func, wait, immediate) { ;; +/* +GENERAL NOTE on moments throughout the *entire rest* of the codebase: +All moments are assumed to be ambiguously-zoned unless otherwise noted, +with the NOTABLE EXCEOPTION of start/end dates that live on *Event Objects*. +Ambiguously-TIMED moments are assumed to be ambiguously-zoned by nature. +*/ + var ambigDateOfMonthRegex = /^\s*\d{4}-\d\d$/; var ambigTimeOrZoneRegex = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?)?$/; var newMomentProto = moment.fn; // where we will attach our new methods var oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods -var allowValueOptimization; -var setUTCValues; // function defined below -var setLocalValues; // function defined below + +// tell momentjs to transfer these properties upon clone +var momentProperties = moment.momentProperties; +momentProperties.push('_fullCalendar'); +momentProperties.push('_ambigTime'); +momentProperties.push('_ambigZone'); // Creating @@ -1109,12 +1071,8 @@ function makeMoment(args, parseAsUTC, parseZone) { var ambigMatch; var mom; - if (moment.isMoment(input)) { - mom = moment.apply(null, args); // clone it - transferAmbigs(input, mom); // the ambig flags weren't transfered with the clone - } - else if (isNativeDate(input) || input === undefined) { - mom = moment.apply(null, args); // will be local + if (moment.isMoment(input) || isNativeDate(input) || input === undefined) { + mom = moment.apply(null, args); } else { // "parsing" is required isAmbigTime = false; @@ -1155,12 +1113,7 @@ function makeMoment(args, parseAsUTC, parseZone) { mom._ambigZone = true; } else if (isSingleString) { - if (mom.utcOffset) { - mom.utcOffset(input); // if not a valid zone, will assign UTC - } - else { - mom.zone(input); // for moment-pre-2.9 - } + mom.utcOffset(input); // if not a valid zone, will assign UTC } } } @@ -1171,21 +1124,6 @@ function makeMoment(args, parseAsUTC, parseZone) { } -// A clone method that works with the flags related to our enhanced functionality. -// In the future, use moment.momentProperties -newMomentProto.clone = function() { - var mom = oldMomentProto.clone.apply(this, arguments); - - // these flags weren't transfered with the clone - transferAmbigs(this, mom); - if (this._fullCalendar) { - mom._fullCalendar = true; - } - - return mom; -}; - - // Week Number // ------------------------------------------------------------------------------------------------- @@ -1193,8 +1131,7 @@ newMomentProto.clone = function() { // Returns the week number, considering the locale's custom week number calcuation // `weeks` is an alias for `week` newMomentProto.week = newMomentProto.weeks = function(input) { - var weekCalc = (this._locale || this._lang) // works pre-moment-2.8 - ._fullCalendar_weekCalc; + var weekCalc = this._locale._fullCalendar_weekCalc; if (input == null && typeof weekCalc === 'function') { // custom function only works for getter return weekCalc(this); @@ -1261,19 +1198,21 @@ newMomentProto.time = function(time) { // but preserving its YMD. A moment with a stripped time will display no time // nor timezone offset when .format() is called. newMomentProto.stripTime = function() { - var a; if (!this._ambigTime) { - // get the values before any conversion happens - a = this.toArray(); // array of y/m/d/h/m/s/ms + this.utc(true); // keepLocalTime=true (for keeping *date* value) - // TODO: use keepLocalTime in the future - this.utc(); // set the internal UTC flag (will clear the ambig flags) - setUTCValues(this, a.slice(0, 3)); // set the year/month/date. time will be zero + // set time to zero + this.set({ + hours: 0, + minutes: 0, + seconds: 0, + ms: 0 + }); // Mark the time as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(), - // which clears all ambig flags. Same with setUTCValues with moment-timezone. + // which clears all ambig flags. this._ambigTime = true; this._ambigZone = true; // if ambiguous time, also ambiguous timezone offset } @@ -1293,24 +1232,20 @@ newMomentProto.hasTime = function() { // Converts the moment to UTC, stripping out its timezone offset, but preserving its // YMD and time-of-day. A moment with a stripped timezone offset will display no // timezone offset when .format() is called. -// TODO: look into Moment's keepLocalTime functionality newMomentProto.stripZone = function() { - var a, wasAmbigTime; + var wasAmbigTime; if (!this._ambigZone) { - // get the values before any conversion happens - a = this.toArray(); // array of y/m/d/h/m/s/ms wasAmbigTime = this._ambigTime; - this.utc(); // set the internal UTC flag (might clear the ambig flags, depending on Moment internals) - setUTCValues(this, a); // will set the year/month/date/hours/minutes/seconds/ms + this.utc(true); // keepLocalTime=true (for keeping date and time values) // the above call to .utc()/.utcOffset() unfortunately might clear the ambig flags, so restore this._ambigTime = wasAmbigTime || false; // Mark the zone as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(), - // which clears the ambig flags. Same with setUTCValues with moment-timezone. + // which clears the ambig flags. this._ambigZone = true; } @@ -1323,32 +1258,26 @@ newMomentProto.hasZone = function() { }; -// this method implicitly marks a zone -newMomentProto.local = function() { - var a = this.toArray(); // year,month,date,hours,minutes,seconds,ms as an array - var wasAmbigZone = this._ambigZone; +// implicitly marks a zone +newMomentProto.local = function(keepLocalTime) { - oldMomentProto.local.apply(this, arguments); + // for when converting from ambiguously-zoned to local, + // keep the time values when converting from UTC -> local + oldMomentProto.local.call(this, this._ambigZone || keepLocalTime); // ensure non-ambiguous // this probably already happened via local() -> utcOffset(), but don't rely on Moment's internals this._ambigTime = false; this._ambigZone = false; - if (wasAmbigZone) { - // If the moment was ambiguously zoned, the date fields were stored as UTC. - // We want to preserve these, but in local time. - // TODO: look into Moment's keepLocalTime functionality - setLocalValues(this, a); - } - return this; // for chaining }; // implicitly marks a zone -newMomentProto.utc = function() { - oldMomentProto.utc.apply(this, arguments); +newMomentProto.utc = function(keepLocalTime) { + + oldMomentProto.utc.call(this, keepLocalTime); // ensure non-ambiguous // this probably already happened via utc() -> utcOffset(), but don't rely on Moment's internals @@ -1359,28 +1288,18 @@ newMomentProto.utc = function() { }; -// methods for arbitrarily manipulating timezone offset. -// should clear time/zone ambiguity when called. -$.each([ - 'zone', // only in moment-pre-2.9. deprecated afterwards - 'utcOffset' -], function(i, name) { - if (oldMomentProto[name]) { // original method exists? - - // this method implicitly marks a zone (will probably get called upon .utc() and .local()) - newMomentProto[name] = function(tzo) { - - if (tzo != null) { // setter - // these assignments needs to happen before the original zone method is called. - // I forget why, something to do with a browser crash. - this._ambigTime = false; - this._ambigZone = false; - } +// implicitly marks a zone (will probably get called upon .utc() and .local()) +newMomentProto.utcOffset = function(tzo) { - return oldMomentProto[name].apply(this, arguments); - }; + if (tzo != null) { // setter + // these assignments needs to happen before the original zone method is called. + // I forget why, something to do with a browser crash. + this._ambigTime = false; + this._ambigZone = false; } -}); + + return oldMomentProto.utcOffset.apply(this, arguments); +}; // Formatting @@ -1409,156 +1328,6 @@ newMomentProto.toISOString = function() { return oldMomentProto.toISOString.apply(this, arguments); }; - -// Querying -// ------------------------------------------------------------------------------------------------- - -// Is the moment within the specified range? `end` is exclusive. -// FYI, this method is not a standard Moment method, so always do our enhanced logic. -newMomentProto.isWithin = function(start, end) { - var a = commonlyAmbiguate([ this, start, end ]); - return a[0] >= a[1] && a[0] < a[2]; -}; - -// When isSame is called with units, timezone ambiguity is normalized before the comparison happens. -// If no units specified, the two moments must be identically the same, with matching ambig flags. -newMomentProto.isSame = function(input, units) { - var a; - - // only do custom logic if this is an enhanced moment - if (!this._fullCalendar) { - return oldMomentProto.isSame.apply(this, arguments); - } - - if (units) { - a = commonlyAmbiguate([ this, input ], true); // normalize timezones but don't erase times - return oldMomentProto.isSame.call(a[0], a[1], units); - } - else { - input = FC.moment.parseZone(input); // normalize input - return oldMomentProto.isSame.call(this, input) && - Boolean(this._ambigTime) === Boolean(input._ambigTime) && - Boolean(this._ambigZone) === Boolean(input._ambigZone); - } -}; - -// Make these query methods work with ambiguous moments -$.each([ - 'isBefore', - 'isAfter' -], function(i, methodName) { - newMomentProto[methodName] = function(input, units) { - var a; - - // only do custom logic if this is an enhanced moment - if (!this._fullCalendar) { - return oldMomentProto[methodName].apply(this, arguments); - } - - a = commonlyAmbiguate([ this, input ]); - return oldMomentProto[methodName].call(a[0], a[1], units); - }; -}); - - -// Misc Internals -// ------------------------------------------------------------------------------------------------- - -// given an array of moment-like inputs, return a parallel array w/ moments similarly ambiguated. -// for example, of one moment has ambig time, but not others, all moments will have their time stripped. -// set `preserveTime` to `true` to keep times, but only normalize zone ambiguity. -// returns the original moments if no modifications are necessary. -function commonlyAmbiguate(inputs, preserveTime) { - var anyAmbigTime = false; - var anyAmbigZone = false; - var len = inputs.length; - var moms = []; - var i, mom; - - // parse inputs into real moments and query their ambig flags - for (i = 0; i < len; i++) { - mom = inputs[i]; - if (!moment.isMoment(mom)) { - mom = FC.moment.parseZone(mom); - } - anyAmbigTime = anyAmbigTime || mom._ambigTime; - anyAmbigZone = anyAmbigZone || mom._ambigZone; - moms.push(mom); - } - - // strip each moment down to lowest common ambiguity - // use clones to avoid modifying the original moments - for (i = 0; i < len; i++) { - mom = moms[i]; - if (!preserveTime && anyAmbigTime && !mom._ambigTime) { - moms[i] = mom.clone().stripTime(); - } - else if (anyAmbigZone && !mom._ambigZone) { - moms[i] = mom.clone().stripZone(); - } - } - - return moms; -} - -// Transfers all the flags related to ambiguous time/zone from the `src` moment to the `dest` moment -// TODO: look into moment.momentProperties for this. -function transferAmbigs(src, dest) { - if (src._ambigTime) { - dest._ambigTime = true; - } - else if (dest._ambigTime) { - dest._ambigTime = false; - } - - if (src._ambigZone) { - dest._ambigZone = true; - } - else if (dest._ambigZone) { - dest._ambigZone = false; - } -} - - -// Sets the year/month/date/etc values of the moment from the given array. -// Inefficient because it calls each individual setter. -function setMomentValues(mom, a) { - mom.year(a[0] || 0) - .month(a[1] || 0) - .date(a[2] || 0) - .hours(a[3] || 0) - .minutes(a[4] || 0) - .seconds(a[5] || 0) - .milliseconds(a[6] || 0); -} - -// Can we set the moment's internal date directly? -allowValueOptimization = '_d' in moment() && 'updateOffset' in moment; - -// Utility function. Accepts a moment and an array of the UTC year/month/date/etc values to set. -// Assumes the given moment is already in UTC mode. -setUTCValues = allowValueOptimization ? function(mom, a) { - // simlate what moment's accessors do - mom._d.setTime(Date.UTC.apply(Date, a)); - moment.updateOffset(mom, false); // keepTime=false -} : setMomentValues; - -// Utility function. Accepts a moment and an array of the local year/month/date/etc values to set. -// Assumes the given moment is already in local mode. -setLocalValues = allowValueOptimization ? function(mom, a) { - // simlate what moment's accessors do - mom._d.setTime(+new Date( // FYI, there is now way to apply an array of args to a constructor - a[0] || 0, - a[1] || 0, - a[2] || 0, - a[3] || 0, - a[4] || 0, - a[5] || 0, - a[6] || 0 - )); - moment.updateOffset(mom, false); // keepTime=false -} : setMomentValues; - ;; // Single Date Formatting @@ -1639,7 +1408,7 @@ function formatRange(date1, date2, formatStr, separator, isRTL) { date1 = FC.moment.parseZone(date1); date2 = FC.moment.parseZone(date2); - localeData = (date1.localeData || date1.lang).call(date1); // works with moment-pre-2.8 + localeData = date1.localeData(); // Expand localized format strings, like "LL" -> "MMMM D YYYY" formatStr = localeData.longDateFormat(formatStr) || formatStr; @@ -1793,6 +1562,49 @@ function chunkFormatString(formatStr) { return chunks; } + +// Misc Utils +// ------------------------------------------------------------------------------------------------- + + +// granularity only goes up until day +// TODO: unify with similarUnitMap +var tokenGranularities = { + Y: { value: 1, unit: 'year' }, + M: { value: 2, unit: 'month' }, + W: { value: 3, unit: 'week' }, + w: { value: 3, unit: 'week' }, + D: { value: 4, unit: 'day' }, // day of month + d: { value: 4, unit: 'day' } // day of week +}; + +// returns a unit string, either 'year', 'month', 'day', or null +// for the most granular formatting token in the string. +FC.queryMostGranularFormatUnit = function(formatStr) { + var chunks = getFormatStringChunks(formatStr); + var i, chunk; + var candidate; + var best; + + for (i = 0; i < chunks.length; i++) { + chunk = chunks[i]; + if (chunk.token) { + candidate = tokenGranularities[chunk.token.charAt(0)]; + if (candidate) { + if (!best || candidate.value > best.value) { + best = candidate; + } + } + } + } + + if (best) { + return best.unit; + } + + return null; +}; + ;; FC.Class = Class; // export @@ -1844,7 +1656,6 @@ function extendClass(superClass, members) { // copy each member variable/method onto the the subclass's prototype copyOwnProps(members, subClass.prototype); - copyNativeMethods(members, subClass.prototype); // hack for IE8 // copy over all class variables/methods to the subclass, such as `extend` and `mixin` copyOwnProps(superClass, subClass); @@ -1854,10 +1665,205 @@ function extendClass(superClass, members) { function mixIntoClass(theClass, members) { - copyOwnProps(members, theClass.prototype); // TODO: copyNativeMethods? + copyOwnProps(members, theClass.prototype); } ;; +/* +Wrap jQuery's Deferred Promise object to be slightly more Promise/A+ compliant. +With the added non-standard feature of synchronously executing handlers on resolved promises, +which doesn't always happen otherwise (esp with nested .then handlers!?), +so, this makes things a lot easier, esp because jQuery 3 changed the synchronicity for Deferred objects. + +TODO: write tests and more comments +*/ + +function Promise(executor) { + var deferred = $.Deferred(); + var promise = deferred.promise(); + + if (typeof executor === 'function') { + executor( + function(value) { // resolve + if (Promise.immediate) { + promise._value = value; + } + deferred.resolve(value); + }, + function() { // reject + deferred.reject(); + } + ); + } + + if (Promise.immediate) { + var origThen = promise.then; + + promise.then = function(onFulfilled, onRejected) { + var state = promise.state(); + + if (state === 'resolved') { + if (typeof onFulfilled === 'function') { + return Promise.resolve(onFulfilled(promise._value)); + } + } + else if (state === 'rejected') { + if (typeof onRejected === 'function') { + onRejected(); + return promise; // already rejected + } + } + + return origThen.call(promise, onFulfilled, onRejected); + }; + } + + return promise; // instanceof Promise will break :( TODO: make Promise a real class +} + +FC.Promise = Promise; + +Promise.immediate = true; + + +Promise.resolve = function(value) { + if (value && typeof value.resolve === 'function') { + return value.promise(); + } + if (value && typeof value.then === 'function') { + return value; + } + else { + var deferred = $.Deferred().resolve(value); + var promise = deferred.promise(); + + if (Promise.immediate) { + var origThen = promise.then; + + promise._value = value; + + promise.then = function(onFulfilled, onRejected) { + if (typeof onFulfilled === 'function') { + return Promise.resolve(onFulfilled(value)); + } + return origThen.call(promise, onFulfilled, onRejected); + }; + } + + return promise; + } +}; + + +Promise.reject = function() { + return $.Deferred().reject().promise(); +}; + + +Promise.all = function(inputs) { + var hasAllValues = false; + var values; + var i, input; + + if (Promise.immediate) { + hasAllValues = true; + values = []; + + for (i = 0; i < inputs.length; i++) { + input = inputs[i]; + + if (input && typeof input.state === 'function' && input.state() === 'resolved' && ('_value' in input)) { + values.push(input._value); + } + else if (input && typeof input.then === 'function') { + hasAllValues = false; + break; + } + else { + values.push(input); + } + } + } + + if (hasAllValues) { + return Promise.resolve(values); + } + else { + return $.when.apply($.when, inputs).then(function() { + return $.when($.makeArray(arguments)); + }); + } +}; + +;; + +// TODO: write tests and clean up code + +function TaskQueue(debounceWait) { + var q = []; // array of runFuncs + + function addTask(taskFunc) { + return new Promise(function(resolve) { + + // should run this function when it's taskFunc's turn to run. + // responsible for popping itself off the queue. + var runFunc = function() { + Promise.resolve(taskFunc()) // result might be async, coerce to promise + .then(resolve) // resolve TaskQueue::push's promise, for the caller. will receive result of taskFunc. + .then(function() { + q.shift(); // pop itself off + + // run the next task, if any + if (q.length) { + q[0](); + } + }); + }; + + // always put the task at the end of the queue, BEFORE running the task + q.push(runFunc); + + // if it's the only task in the queue, run immediately + if (q.length === 1) { + runFunc(); + } + }); + } + + this.add = // potentially debounce, for the public method + typeof debounceWait === 'number' ? + debounce(addTask, debounceWait) : + addTask; // if not a number (null/undefined/false), no debounce at all + + this.addQuickly = addTask; // guaranteed no debounce +} + +FC.TaskQueue = TaskQueue; + +/* +q = new TaskQueue(); + +function work(i) { + return q.push(function() { + trigger(); + console.log('work' + i); + }); +} + +var cnt = 0; + +function trigger() { + if (cnt < 5) { + cnt++; + work(cnt); + } +} + +work(9); +*/ + +;; + var EmitterMixin = FC.EmitterMixin = { // jQuery-ification via $(this) allows a non-DOM object to have @@ -1865,7 +1871,18 @@ var EmitterMixin = FC.EmitterMixin = { on: function(types, handler) { + $(this).on(types, this._prepareIntercept(handler)); + return this; // for chaining + }, + + + one: function(types, handler) { + $(this).one(types, this._prepareIntercept(handler)); + return this; // for chaining + }, + + _prepareIntercept: function(handler) { // handlers are always called with an "event" object as their first param. // sneak the `this` context and arguments into the extra parameter object // and forward them on to the original handler. @@ -1885,9 +1902,7 @@ var EmitterMixin = FC.EmitterMixin = { } intercept.guid = handler.guid; - $(this).on(types, intercept); - - return this; // for chaining + return intercept; }, @@ -2216,9 +2231,15 @@ var CoordCache = FC.CoordCache = Class.extend({ // Queries the els for coordinates and stores them. // Call this method before using and of the get* methods below. build: function() { - var offsetParentEl = this.forcedOffsetParentEl || this.els.eq(0).offsetParent(); + var offsetParentEl = this.forcedOffsetParentEl; + if (!offsetParentEl && this.els.length > 0) { + offsetParentEl = this.els.eq(0).offsetParent(); + } + + this.origin = offsetParentEl ? + offsetParentEl.offset() : + null; - this.origin = offsetParentEl.offset(); this.boundingRect = this.queryBoundingRect(); if (this.isHorizontal) { @@ -2249,17 +2270,6 @@ var CoordCache = FC.CoordCache = Class.extend({ }, - // Compute and return what the elements' bounding rectangle is, from the user's perspective. - // Right now, only returns a rectangle if constrained by an overflow:scroll element. - queryBoundingRect: function() { - var scrollParentEl = getScrollParent(this.els.eq(0)); - - if (!scrollParentEl.is(document)) { - return getClientRect(scrollParentEl); - } - }, - - // Populates the left/right internal coordinate arrays buildElHorizontals: function() { var lefts = []; @@ -2299,42 +2309,36 @@ var CoordCache = FC.CoordCache = Class.extend({ // Given a left offset (from document left), returns the index of the el that it horizontally intersects. - // If no intersection is made, or outside of the boundingRect, returns undefined. + // If no intersection is made, returns undefined. getHorizontalIndex: function(leftOffset) { this.ensureBuilt(); - var boundingRect = this.boundingRect; var lefts = this.lefts; var rights = this.rights; var len = lefts.length; var i; - if (!boundingRect || (leftOffset >= boundingRect.left && leftOffset < boundingRect.right)) { - for (i = 0; i < len; i++) { - if (leftOffset >= lefts[i] && leftOffset < rights[i]) { - return i; - } + for (i = 0; i < len; i++) { + if (leftOffset >= lefts[i] && leftOffset < rights[i]) { + return i; } } }, // Given a top offset (from document top), returns the index of the el that it vertically intersects. - // If no intersection is made, or outside of the boundingRect, returns undefined. + // If no intersection is made, returns undefined. getVerticalIndex: function(topOffset) { this.ensureBuilt(); - var boundingRect = this.boundingRect; var tops = this.tops; var bottoms = this.bottoms; var len = tops.length; var i; - if (!boundingRect || (topOffset >= boundingRect.top && topOffset < boundingRect.bottom)) { - for (i = 0; i < len; i++) { - if (topOffset >= tops[i] && topOffset < bottoms[i]) { - return i; - } + for (i = 0; i < len; i++) { + if (topOffset >= tops[i] && topOffset < bottoms[i]) { + return i; } } }, @@ -2410,23 +2414,53 @@ var CoordCache = FC.CoordCache = Class.extend({ getHeight: function(topIndex) { this.ensureBuilt(); return this.bottoms[topIndex] - this.tops[topIndex]; - } + }, -}); -;; + // Bounding Rect + // TODO: decouple this from CoordCache -/* Tracks a drag's mouse movement, firing various handlers -----------------------------------------------------------------------------------------------------------------------*/ -// TODO: use Emitter + // Compute and return what the elements' bounding rectangle is, from the user's perspective. + // Right now, only returns a rectangle if constrained by an overflow:scroll element. + // Returns null if there are no elements + queryBoundingRect: function() { + var scrollParentEl; -var DragListener = FC.DragListener = Class.extend(ListenerMixin, MouseIgnorerMixin, { + if (this.els.length > 0) { + scrollParentEl = getScrollParent(this.els.eq(0)); - options: null, + if (!scrollParentEl.is(document)) { + return getClientRect(scrollParentEl); + } + } - // for IE8 bug-fighting behavior - subjectEl: null, - subjectHref: null, + return null; + }, + + isPointInBounds: function(leftOffset, topOffset) { + return this.isLeftInBounds(leftOffset) && this.isTopInBounds(topOffset); + }, + + isLeftInBounds: function(leftOffset) { + return !this.boundingRect || (leftOffset >= this.boundingRect.left && leftOffset < this.boundingRect.right); + }, + + isTopInBounds: function(topOffset) { + return !this.boundingRect || (topOffset >= this.boundingRect.top && topOffset < this.boundingRect.bottom); + } + +}); + +;; + +/* Tracks a drag's mouse movement, firing various handlers +----------------------------------------------------------------------------------------------------------------------*/ +// TODO: use Emitter + +var DragListener = FC.DragListener = Class.extend(ListenerMixin, MouseIgnorerMixin, { + + options: null, + subjectEl: null, // coordinates of the initial mousedown originX: null, @@ -2617,7 +2651,6 @@ var DragListener = FC.DragListener = Class.extend(ListenerMixin, MouseIgnorerMix handleDragStart: function(ev) { this.trigger('dragStart', ev); - this.initHrefHack(); }, @@ -2657,7 +2690,6 @@ var DragListener = FC.DragListener = Class.extend(ListenerMixin, MouseIgnorerMix handleDragEnd: function(ev) { this.trigger('dragEnd', ev); - this.destroyHrefHack(); }, @@ -2733,33 +2765,6 @@ var DragListener = FC.DragListener = Class.extend(ListenerMixin, MouseIgnorerMix }, - // HREF Hack - // ----------------------------------------------------------------------------------------------------------------- - - - initHrefHack: function() { - var subjectEl = this.subjectEl; - - // remove a mousedown'd 's href so it is not visited (IE8 bug) - if ((this.subjectHref = subjectEl ? subjectEl.attr('href') : null)) { - subjectEl.removeAttr('href'); - } - }, - - - destroyHrefHack: function() { - var subjectEl = this.subjectEl; - var subjectHref = this.subjectHref; - - // restore a mousedown'd 's href (for IE8 bug) - setTimeout(function() { // must be outside of the click's execution - if (subjectHref) { - subjectEl.attr('href', subjectHref); - } - }, 0); - }, - - // Utils // ----------------------------------------------------------------------------------------------------------------- @@ -3245,11 +3250,11 @@ var MouseFollower = Class.extend(ListenerMixin, { var _this = this; var revertDuration = this.options.revertDuration; - function complete() { - this.isAnimating = false; + function complete() { // might be called by .animate(), which might change `this` context + _this.isAnimating = false; _this.removeElement(); - this.top0 = this.left0 = null; // reset state for future updatePosition calls + _this.top0 = _this.left0 = null; // reset state for future updatePosition calls if (callback) { callback(); @@ -3283,7 +3288,6 @@ var MouseFollower = Class.extend(ListenerMixin, { var el = this.el; if (!el) { - this.sourceEl.width(); // hack to force IE8 to compute correct bounding box el = this.el = this.sourceEl.clone() .addClass(this.options.additionalClass || '') .css({ @@ -3328,7 +3332,6 @@ var MouseFollower = Class.extend(ListenerMixin, { // make sure origin info was computed if (this.top0 === null) { - this.sourceEl.width(); // hack to force IE8 to compute correct bounding box sourceOffset = this.sourceEl.offset(); origin = this.el.offsetParent().offset(); this.top0 = sourceOffset.top - origin.top; @@ -3382,6 +3385,9 @@ var MouseFollower = Class.extend(ListenerMixin, { var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, { + // self-config, overridable by subclasses + hasDayInteractions: true, // can user click/select ranges of time? + view: null, // a View object isRTL: null, // shortcut to the view's isRTL option @@ -3549,10 +3555,13 @@ var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, { // Does other DOM-related initializations. setElement: function(el) { this.el = el; - preventSelection(el); - this.bindDayHandler('touchstart', this.dayTouchStart); - this.bindDayHandler('mousedown', this.dayMousedown); + if (this.hasDayInteractions) { + preventSelection(el); + + this.bindDayHandler('touchstart', this.dayTouchStart); + this.bindDayHandler('mousedown', this.dayMousedown); + } // attach event-element-related handlers. in Grid.events // same garbage collection note as above. @@ -3569,8 +3578,12 @@ var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, { // jQuery will take care of unregistering them when removeElement gets called. this.el.on(name, function(ev) { if ( - !$(ev.target).is('.fc-event-container *, .fc-more') && // not an an event element, or "more.." link - !$(ev.target).closest('.fc-popover').length // not on a popover (like the "more.." events one) + !$(ev.target).is( + _this.segSelector + ',' + // directly on an event element + _this.segSelector + ' *,' + // within an event element + '.fc-more,' + // a "more.." link + 'a[data-goto]' // a clickable nav link + ) ) { return handler.call(_this, ev); } @@ -3640,6 +3653,7 @@ var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, { dayTouchStart: function(ev) { var view = this.view; + var selectLongPressDelay = view.opt('selectLongPressDelay'); // HACK to prevent a user's clickaway for unselecting a range or an event // from causing a dayClick. @@ -3647,8 +3661,12 @@ var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, { this.tempIgnoreMouse(); } + if (selectLongPressDelay == null) { + selectLongPressDelay = view.opt('longPressDelay'); // fallback + } + this.dayDragListener.startInteraction(ev, { - delay: this.view.opt('longPressDelay') + delay: selectLongPressDelay }); }, @@ -3669,6 +3687,7 @@ var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, { scroll: view.opt('dragScroll'), interactionStart: function() { dayClickHit = dragListener.origHit; // for dayClick, where no dragging happens + selectionSpan = null; }, dragStart: function() { view.unselect(); // since we could be rendering a new selection, we want to clear any old one @@ -3695,10 +3714,12 @@ var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, { } } }, - hitOut: function() { + hitOut: function() { // called before mouse moves to a different hit OR moved out of all hits dayClickHit = null; selectionSpan = null; _this.unrenderSelection(); + }, + hitDone: function() { // called after a hitOut OR before a dragEnd enableCursor(); }, interactionEnd: function(ev, isCancelled) { @@ -3717,7 +3738,6 @@ var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, { // the selection will already have been rendered. just report it view.reportSelection(selectionSpan, ev); } - enableCursor(); } } }); @@ -3960,7 +3980,7 @@ var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, { fillSegTag: 'div', // subclasses can override - // Builds the HTML needed for one fill segment. Generic enought o work with different types. + // Builds the HTML needed for one fill segment. Generic enough to work with different types. fillSegHtml: function(type, seg) { // custom hooks per-type @@ -3983,7 +4003,7 @@ var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, { // Computes HTML classNames for a single-day element - getDayClasses: function(date) { + getDayClasses: function(date, noThemeHighlight) { var view = this.view; var today = view.calendar.getNow(); var classes = [ 'fc-' + dayIDs[date.day()] ]; @@ -3996,10 +4016,11 @@ var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, { } if (date.isSame(today, 'day')) { - classes.push( - 'fc-today', - view.highlightStateClass - ); + classes.push('fc-today'); + + if (noThemeHighlight !== true) { + classes.push(view.highlightStateClass); + } } else if (date < today) { classes.push('fc-past'); @@ -4020,6 +4041,9 @@ var Grid = FC.Grid = Class.extend(ListenerMixin, MouseIgnorerMixin, { Grid.mixin({ + // self-config, overridable by subclasses + segSelector: '.fc-event-container > *', // what constitutes an event element? + mousedOverSeg: null, // the segment object the user's mouse is over. null if over nothing isDraggingSeg: false, // is a segment being dragged? boolean isResizingSeg: false, // is a segment being resized? boolean @@ -4158,7 +4182,7 @@ Grid.mixin({ // Generates an array of classNames to be used for the default rendering of a background event. - // Called by the fill system. + // Called by fillSegHtml. bgEventSegClasses: function(seg) { var event = seg.event; var source = event.source || {}; @@ -4171,7 +4195,7 @@ Grid.mixin({ // Generates a semicolon-separated CSS string to be used for the default rendering of a background event. - // Called by the fill system. + // Called by fillSegHtml. bgEventSegCss: function(seg) { return { 'background-color': this.getSegSkinCss(seg)['background-color'] @@ -4180,32 +4204,85 @@ Grid.mixin({ // Generates an array of classNames to be used for the rendering business hours overlay. Called by the fill system. + // Called by fillSegHtml. businessHoursSegClasses: function(seg) { return [ 'fc-nonbusiness', 'fc-bgevent' ]; }, + /* Business Hours + ------------------------------------------------------------------------------------------------------------------*/ + + + // Compute business hour segs for the grid's current date range. + // Caller must ask if whole-day business hours are needed. + // If no `businessHours` configuration value is specified, assumes the calendar default. + buildBusinessHourSegs: function(wholeDay, businessHours) { + return this.eventsToSegs( + this.buildBusinessHourEvents(wholeDay, businessHours) + ); + }, + + + // Compute business hour *events* for the grid's current date range. + // Caller must ask if whole-day business hours are needed. + // If no `businessHours` configuration value is specified, assumes the calendar default. + buildBusinessHourEvents: function(wholeDay, businessHours) { + var calendar = this.view.calendar; + var events; + + if (businessHours == null) { + // fallback + // access from calendawr. don't access from view. doesn't update with dynamic options. + businessHours = calendar.options.businessHours; + } + + events = calendar.computeBusinessHourEvents(wholeDay, businessHours); + + // HACK. Eventually refactor business hours "events" system. + // If no events are given, but businessHours is activated, this means the entire visible range should be + // marked as *not* business-hours, via inverse-background rendering. + if (!events.length && businessHours) { + events = [ + $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, { + start: this.view.end, // guaranteed out-of-range + end: this.view.end, // " + dow: null + }) + ]; + } + + return events; + }, + + /* Handlers ------------------------------------------------------------------------------------------------------------------*/ - // Attaches event-element-related handlers to the container element and leverage bubbling + // Attaches event-element-related handlers for *all* rendered event segments of the view. bindSegHandlers: function() { - this.bindSegHandler('touchstart', this.handleSegTouchStart); - this.bindSegHandler('touchend', this.handleSegTouchEnd); - this.bindSegHandler('mouseenter', this.handleSegMouseover); - this.bindSegHandler('mouseleave', this.handleSegMouseout); - this.bindSegHandler('mousedown', this.handleSegMousedown); - this.bindSegHandler('click', this.handleSegClick); + this.bindSegHandlersToEl(this.el); + }, + + + // Attaches event-element-related handlers to an arbitrary container element. leverages bubbling. + bindSegHandlersToEl: function(el) { + this.bindSegHandlerToEl(el, 'touchstart', this.handleSegTouchStart); + this.bindSegHandlerToEl(el, 'touchend', this.handleSegTouchEnd); + this.bindSegHandlerToEl(el, 'mouseenter', this.handleSegMouseover); + this.bindSegHandlerToEl(el, 'mouseleave', this.handleSegMouseout); + this.bindSegHandlerToEl(el, 'mousedown', this.handleSegMousedown); + this.bindSegHandlerToEl(el, 'click', this.handleSegClick); }, // Executes a handler for any a user-interaction on a segment. // Handler gets called with (seg, ev), and with the `this` context of the Grid - bindSegHandler: function(name, handler) { + bindSegHandlerToEl: function(el, name, handler) { var _this = this; - this.el.on(name, '.fc-event-container > *', function(ev) { + el.on(name, this.segSelector, function(ev) { var seg = $(this).data('fc-seg'); // grab segment data. put there by View::renderEvents // only call the handlers if there is not a drag/resize in progress @@ -4217,7 +4294,10 @@ Grid.mixin({ handleSegClick: function(seg, ev) { - return this.view.trigger('eventClick', seg.el[0], seg.event, ev); // can return `false` to cancel + var res = this.view.publiclyTrigger('eventClick', seg.el[0], seg.event, ev); // can return `false` to cancel + if (res === false) { + ev.preventDefault(); + } }, @@ -4228,8 +4308,10 @@ Grid.mixin({ !this.mousedOverSeg ) { this.mousedOverSeg = seg; - seg.el.addClass('fc-allow-mouse-resize'); - this.view.trigger('eventMouseover', seg.el[0], seg.event, ev); + if (this.view.isEventResizable(seg.event)) { + seg.el.addClass('fc-allow-mouse-resize'); + } + this.view.publiclyTrigger('eventMouseover', seg.el[0], seg.event, ev); } }, @@ -4242,8 +4324,10 @@ Grid.mixin({ if (this.mousedOverSeg) { seg = seg || this.mousedOverSeg; // if given no args, use the currently moused-over segment this.mousedOverSeg = null; - seg.el.removeClass('fc-allow-mouse-resize'); - this.view.trigger('eventMouseout', seg.el[0], seg.event, ev); + if (this.view.isEventResizable(seg.event)) { + seg.el.removeClass('fc-allow-mouse-resize'); + } + this.view.publiclyTrigger('eventMouseout', seg.el[0], seg.event, ev); } }, @@ -4268,6 +4352,7 @@ Grid.mixin({ var isResizable = view.isEventResizable(event); var isResizing = false; var dragListener; + var eventLongPressDelay; if (isSelected && isResizable) { // only allow resizing of the event is selected @@ -4276,12 +4361,17 @@ Grid.mixin({ if (!isResizing && (isDraggable || isResizable)) { // allowed to be selected? + eventLongPressDelay = view.opt('eventLongPressDelay'); + if (eventLongPressDelay == null) { + eventLongPressDelay = view.opt('longPressDelay'); // fallback + } + dragListener = isDraggable ? this.buildSegDragListener(seg) : this.buildSegSelectListener(seg); // seg isn't draggable, but still needs to be selected dragListener.startInteraction(ev, { // won't start if already started - delay: isSelected ? 0 : this.view.opt('longPressDelay') // do delay if not already selected + delay: isSelected ? 0 : eventLongPressDelay // do delay if not already selected }); } @@ -4339,6 +4429,7 @@ Grid.mixin({ subjectEl: el, subjectCenter: true, interactionStart: function(ev) { + seg.component = _this; // for renderDrag isDragging = false; mouseFollower = new MouseFollower(seg.el, { additionalClass: 'fc-dragging', @@ -4407,15 +4498,21 @@ Grid.mixin({ enableCursor(); }, interactionEnd: function(ev) { + delete seg.component; // prevent side effects + // do revert animation if hasn't changed. calls a callback when finished (whether animation or not) mouseFollower.stop(!dropLocation, function() { if (isDragging) { view.unrenderDrag(); - view.showEvent(event); _this.segDragStop(seg, ev); } + if (dropLocation) { - view.reportEventDrop(event, dropLocation, this.largeUnit, el, ev); + // no need to re-show original, will rerender all anyways. esp important if eventRenderWait + view.reportEventDrop(event, dropLocation, _this.largeUnit, el, ev); + } + else { + view.showEvent(event); } }); _this.segDragListener = null; @@ -4457,14 +4554,14 @@ Grid.mixin({ // Called before event segment dragging starts segDragStart: function(seg, ev) { this.isDraggingSeg = true; - this.view.trigger('eventDragStart', seg.el[0], seg.event, ev, {}); // last argument is jqui dummy + this.view.publiclyTrigger('eventDragStart', seg.el[0], seg.event, ev, {}); // last argument is jqui dummy }, // Called after event segment dragging stops segDragStop: function(seg, ev) { this.isDraggingSeg = false; - this.view.trigger('eventDragStop', seg.el[0], seg.event, ev, {}); // last argument is jqui dummy + this.view.publiclyTrigger('eventDragStop', seg.el[0], seg.event, ev, {}); // last argument is jqui dummy }, @@ -4494,11 +4591,7 @@ Grid.mixin({ } // othewise, work off existing values else { - dropLocation = { - start: event.start.clone(), - end: event.end ? event.end.clone() : null, - allDay: event.allDay // keep it the same - }; + dropLocation = pluckEventDateProps(event); } dropLocation.start.add(delta); @@ -4524,11 +4617,7 @@ Grid.mixin({ var opacity = this.view.opt('dragOpacity'); if (opacity != null) { - els.each(function(i, node) { - // Don't use jQuery (will set an IE filter), do it the old fashioned way. - // In IE8, a helper element will disappears if there's a filter. - node.style.opacity = opacity; - }); + els.css('opacity', opacity); } }, @@ -4694,8 +4783,11 @@ Grid.mixin({ disableCursor(); resizeLocation = null; } - // no change? (TODO: how does this work with timezones?) - else if (resizeLocation.start.isSame(event.start) && resizeLocation.end.isSame(eventEnd)) { + // no change? (FYI, event dates might have zones) + else if ( + resizeLocation.start.isSame(event.start.clone().stripZone()) && + resizeLocation.end.isSame(eventEnd.clone().stripZone()) + ) { resizeLocation = null; } } @@ -4707,18 +4799,23 @@ Grid.mixin({ }, hitOut: function() { // called before mouse moves to a different hit OR moved out of all hits resizeLocation = null; + view.showEvent(event); // for when out-of-bounds. show original }, hitDone: function() { // resets the rendering to show the original event _this.unrenderEventResize(); - view.showEvent(event); enableCursor(); }, interactionEnd: function(ev) { if (isDragging) { _this.segResizeStop(seg, ev); } + if (resizeLocation) { // valid date to resize to? - view.reportEventResize(event, resizeLocation, this.largeUnit, el, ev); + // no need to re-show original, will rerender all anyways. esp important if eventRenderWait + view.reportEventResize(event, resizeLocation, _this.largeUnit, el, ev); + } + else { + view.showEvent(event); } _this.segResizeListener = null; } @@ -4731,14 +4828,14 @@ Grid.mixin({ // Called before event segment resizing starts segResizeStart: function(seg, ev) { this.isResizingSeg = true; - this.view.trigger('eventResizeStart', seg.el[0], seg.event, ev, {}); // last argument is jqui dummy + this.view.publiclyTrigger('eventResizeStart', seg.el[0], seg.event, ev, {}); // last argument is jqui dummy }, // Called after event segment resizing stops segResizeStop: function(seg, ev) { this.isResizingSeg = false; - this.view.trigger('eventResizeStop', seg.el[0], seg.event, ev, {}); // last argument is jqui dummy + this.view.publiclyTrigger('eventResizeStop', seg.el[0], seg.event, ev, {}); // last argument is jqui dummy }, @@ -4848,15 +4945,11 @@ Grid.mixin({ // Generic utility for generating the HTML classNames for an event segment's element getSegClasses: function(seg, isDraggable, isResizable) { var view = this.view; - var event = seg.event; var classes = [ 'fc-event', seg.isStart ? 'fc-start' : 'fc-not-start', seg.isEnd ? 'fc-end' : 'fc-not-end' - ].concat( - event.className, - event.source ? event.source.className : [] - ); + ].concat(this.getSegCustomClasses(seg)); if (isDraggable) { classes.push('fc-draggable'); @@ -4866,7 +4959,7 @@ Grid.mixin({ } // event is currently selected? attach a className. - if (view.isEventSelected(event)) { + if (view.isEventSelected(seg.event)) { classes.push('fc-selected'); } @@ -4874,38 +4967,78 @@ Grid.mixin({ }, - // Utility for generating event skin-related CSS properties - getSegSkinCss: function(seg) { + // List of classes that were defined by the caller of the API in some way + getSegCustomClasses: function(seg) { var event = seg.event; - var view = this.view; - var source = event.source || {}; - var eventColor = event.color; - var sourceColor = source.color; - var optionColor = view.opt('eventColor'); + return [].concat( + event.className, // guaranteed to be an array + event.source ? event.source.className : [] + ); + }, + + + // Utility for generating event skin-related CSS properties + getSegSkinCss: function(seg) { return { - 'background-color': - event.backgroundColor || - eventColor || - source.backgroundColor || - sourceColor || - view.opt('eventBackgroundColor') || - optionColor, - 'border-color': - event.borderColor || - eventColor || - source.borderColor || - sourceColor || - view.opt('eventBorderColor') || - optionColor, - color: - event.textColor || - source.textColor || - view.opt('eventTextColor') + 'background-color': this.getSegBackgroundColor(seg), + 'border-color': this.getSegBorderColor(seg), + color: this.getSegTextColor(seg) }; }, + // Queries for caller-specified color, then falls back to default + getSegBackgroundColor: function(seg) { + return seg.event.backgroundColor || + seg.event.color || + this.getSegDefaultBackgroundColor(seg); + }, + + + getSegDefaultBackgroundColor: function(seg) { + var source = seg.event.source || {}; + + return source.backgroundColor || + source.color || + this.view.opt('eventBackgroundColor') || + this.view.opt('eventColor'); + }, + + + // Queries for caller-specified color, then falls back to default + getSegBorderColor: function(seg) { + return seg.event.borderColor || + seg.event.color || + this.getSegDefaultBorderColor(seg); + }, + + + getSegDefaultBorderColor: function(seg) { + var source = seg.event.source || {}; + + return source.borderColor || + source.color || + this.view.opt('eventBorderColor') || + this.view.opt('eventColor'); + }, + + + // Queries for caller-specified color, then falls back to default + getSegTextColor: function(seg) { + return seg.event.textColor || + this.getSegDefaultTextColor(seg); + }, + + + getSegDefaultTextColor: function(seg) { + var source = seg.event.source || {}; + + return source.textColor || + this.view.opt('eventTextColor'); + }, + + /* Converting events -> eventRange -> eventSpan -> eventSegs ------------------------------------------------------------------------------------------------------------------*/ @@ -4973,20 +5106,25 @@ Grid.mixin({ // Generates the unzoned start/end dates an event appears to occupy // Can accept an event "location" as well (which only has start/end and no allDay) eventToRange: function(event) { - return { - start: event.start.clone().stripZone(), - end: ( + var calendar = this.view.calendar; + var start = event.start.clone().stripZone(); + var end = ( event.end ? event.end.clone() : // derive the end from the start and allDay. compute allDay if necessary - this.view.calendar.getDefaultEventEnd( + calendar.getDefaultEventEnd( event.allDay != null ? event.allDay : !event.start.hasTime(), event.start ) - ).stripZone() - }; + ).stripZone(); + + // hack: dynamic locale change forgets to upate stored event localed + calendar.localizeMoment(start); + calendar.localizeMoment(end); + + return { start: start, end: end }; }, @@ -5089,6 +5227,16 @@ Grid.mixin({ ----------------------------------------------------------------------------------------------------------------------*/ +function pluckEventDateProps(event) { + return { + start: event.start.clone(), + end: event.end ? event.end.clone() : null, + allDay: event.allDay // keep it the same + }; +} +FC.pluckEventDateProps = pluckEventDateProps; + + function isBgEvent(event) { // returns true if background OR inverse-background var rendering = getEventRendering(event); return rendering === 'background' || rendering === 'inverse-background'; @@ -5238,7 +5386,7 @@ var DayTableMixin = FC.DayTableMixin = { this.dayIndices = dayIndices; this.daysPerRow = daysPerRow; this.rowCnt = rowCnt; - + this.updateDayTableCols(); }, @@ -5476,10 +5624,26 @@ var DayTableMixin = FC.DayTableMixin = { // (colspan should be no different) renderHeadDateCellHtml: function(date, colspan, otherAttrs) { var view = this.view; + var classNames = [ + 'fc-day-header', + view.widgetHeaderClass + ]; + + // if only one row of days, the classNames on the header can represent the specific days beneath + if (this.rowCnt === 1) { + classNames = classNames.concat( + // includes the day-of-week class + // noThemeHighlight=true (don't highlight the header) + this.getDayClasses(date, true) + ); + } + else { + classNames.push('fc-' + dayIDs[date.day()]); // only add the day-of-week class + } return '' + - ' 1 ? @@ -5488,8 +5652,12 @@ var DayTableMixin = FC.DayTableMixin = { (otherAttrs ? ' ' + otherAttrs : '') + - '>' + - htmlEscape(date.format(this.colHeadFormat)) + + '>' + + // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff) + view.buildGotoAnchorHtml( + { date: date, forceOff: this.rowCnt > 1 || this.colCnt === 1 }, + htmlEscape(date.format(this.colHeadFormat)) // inner HTML + ) + ''; }, @@ -5625,7 +5793,7 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, { // trigger dayRender with each cell's element for (row = 0; row < rowCnt; row++) { for (col = 0; col < colCnt; col++) { - view.trigger( + view.publiclyTrigger( 'dayRender', null, this.getCellDate(row, col), @@ -5642,13 +5810,16 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, { renderBusinessHours: function() { - var events = this.view.calendar.getBusinessHoursEvents(true); // wholeDay=true - var segs = this.eventsToSegs(events); - + var segs = this.buildBusinessHourSegs(true); // wholeDay=true this.renderFill('businessHours', segs, 'bgevent'); }, + unrenderBusinessHours: function() { + this.unrenderFill('businessHours'); + }, + + // Generates the HTML for a single row, which is a div that wraps a table. // `row` is the row number. renderDayRowHtml: function(row, isRigid) { @@ -5715,19 +5886,53 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, { // Generates the HTML for the s of the "number" row in the DayGrid's content skeleton. // The number row will only exist if either day numbers or week numbers are turned on. renderNumberCellHtml: function(date) { + var html = ''; var classes; + var weekCalcFirstDoW; - if (!this.view.dayNumbersVisible) { // if there are week numbers but not day numbers + if (!this.view.dayNumbersVisible && !this.view.cellWeekNumbersVisible) { + // no numbers in day cell (week number must be along the side) return ''; // will create an empty space above events :( } classes = this.getDayClasses(date); - classes.unshift('fc-day-number'); + classes.unshift('fc-day-top'); - return '' + - '' + - date.date() + - ''; + if (this.view.cellWeekNumbersVisible) { + // To determine the day of week number change under ISO, we cannot + // rely on moment.js methods such as firstDayOfWeek() or weekday(), + // because they rely on the locale's dow (possibly overridden by + // our firstDay option), which may not be Monday. We cannot change + // dow, because that would affect the calendar start day as well. + if (date._locale._fullCalendar_weekCalc === 'ISO') { + weekCalcFirstDoW = 1; // Monday by ISO 8601 definition + } + else { + weekCalcFirstDoW = date._locale.firstDayOfWeek(); + } + } + + html += ''; + + if (this.view.cellWeekNumbersVisible && (date.day() == weekCalcFirstDoW)) { + html += this.view.buildGotoAnchorHtml( + { date: date, type: 'week' }, + { 'class': 'fc-week-number' }, + date.format('w') // inner HTML + ); + } + + if (this.view.dayNumbersVisible) { + html += this.view.buildGotoAnchorHtml( + date, + { 'class': 'fc-day-number' }, + date.date() // inner HTML + ); + } + + html += ''; + + return html; }, @@ -5795,11 +6000,13 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, { queryHit: function(leftOffset, topOffset) { - var col = this.colCoordCache.getHorizontalIndex(leftOffset); - var row = this.rowCoordCache.getVerticalIndex(topOffset); + if (this.colCoordCache.isLeftInBounds(leftOffset) && this.rowCoordCache.isTopInBounds(topOffset)) { + var col = this.colCoordCache.getHorizontalIndex(leftOffset); + var row = this.rowCoordCache.getVerticalIndex(topOffset); - if (row != null && col != null) { - return this.getCellHit(row, col); + if (row != null && col != null) { + return this.getCellHit(row, col); + } } }, @@ -5850,8 +6057,7 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, { this.renderHighlight(this.eventToSpan(eventLocation)); // if a segment from the same calendar but another component is being dragged, render a helper event - if (seg && !seg.el.closest(this.el).length) { - + if (seg && seg.component !== this) { return this.renderEventLocationHelper(eventLocation, seg); // returns mock event elements } }, @@ -6522,7 +6728,7 @@ DayGrid.mixin({ if (typeof clickOption === 'function') { // the returned value can be an atomic option - clickOption = view.trigger('eventLimitClick', null, { + clickOption = view.publiclyTrigger('eventLimitClick', null, { date: date, dayEl: dayEl, moreEl: moreEl, @@ -6559,12 +6765,20 @@ DayGrid.mixin({ options = { className: 'fc-more-popover', content: this.renderSegPopoverContent(row, col, segs), - parentEl: this.el, + parentEl: this.view.el, // attach to root of view. guarantees outside of scrollbars. top: topEl.offset().top, autoHide: true, // when the user clicks elsewhere, hide the popover viewportConstrain: view.opt('popoverViewportConstrain'), hide: function() { // kill everything when the popover is hidden + // notify events to be removed + if (_this.popoverSegs) { + var seg; + for (var i = 0; i < _this.popoverSegs.length; ++i) { + seg = _this.popoverSegs[i]; + view.publiclyTrigger('eventDestroy', seg.event, seg.event, seg.el); + } + } _this.segPopover.removeElement(); _this.segPopover = null; _this.popoverSegs = null; @@ -6582,6 +6796,10 @@ DayGrid.mixin({ this.segPopover = new Popover(options); this.segPopover.show(); + + // the popover doesn't live within the grid's container element, and thus won't get the event + // delegated-handlers for free. attach event-related handlers to the popover. + this.bindSegHandlersToEl(this.segPopover.el); }, @@ -6830,7 +7048,6 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, { this.labelFormat = input || - view.opt('axisFormat') || // deprecated view.opt('smallTimeFormat'); // the computed default input = view.opt('slotLabelInterval'); @@ -6891,27 +7108,30 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, { var snapsPerSlot = this.snapsPerSlot; var colCoordCache = this.colCoordCache; var slatCoordCache = this.slatCoordCache; - var colIndex = colCoordCache.getHorizontalIndex(leftOffset); - var slatIndex = slatCoordCache.getVerticalIndex(topOffset); - - if (colIndex != null && slatIndex != null) { - var slatTop = slatCoordCache.getTopOffset(slatIndex); - var slatHeight = slatCoordCache.getHeight(slatIndex); - var partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1 - var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat - var snapIndex = slatIndex * snapsPerSlot + localSnapIndex; - var snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight; - var snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight; - - return { - col: colIndex, - snap: snapIndex, - component: this, // needed unfortunately :( - left: colCoordCache.getLeftOffset(colIndex), - right: colCoordCache.getRightOffset(colIndex), - top: snapTop, - bottom: snapBottom - }; + + if (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) { + var colIndex = colCoordCache.getHorizontalIndex(leftOffset); + var slatIndex = slatCoordCache.getVerticalIndex(topOffset); + + if (colIndex != null && slatIndex != null) { + var slatTop = slatCoordCache.getTopOffset(slatIndex); + var slatHeight = slatCoordCache.getHeight(slatIndex); + var partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1 + var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat + var snapIndex = slatIndex * snapsPerSlot + localSnapIndex; + var snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight; + var snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight; + + return { + col: colIndex, + snap: snapIndex, + component: this, // needed unfortunately :( + left: colCoordCache.getLeftOffset(colIndex), + right: colCoordCache.getRightOffset(colIndex), + top: snapTop, + bottom: snapBottom + }; + } } }, @@ -7114,10 +7334,9 @@ var TimeGrid = FC.TimeGrid = Grid.extend(DayTableMixin, { renderBusinessHours: function() { - var events = this.view.calendar.getBusinessHoursEvents(); - var segs = this.eventsToSegs(events); - - this.renderBusinessSegs(segs); + this.renderBusinessSegs( + this.buildBusinessHourSegs() + ); }, @@ -7837,9 +8056,14 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { options: null, // hash containing all options. already merged with view-specific-options el: null, // the view's containing element. set by Calendar - displaying: null, // a promise representing the state of rendering. null if no render requested - isSkeletonRendered: false, + isDateSet: false, + isDateRendered: false, + dateRenderQueue: null, + + isEventsBound: false, + isEventsSet: false, isEventsRendered: false, + eventRenderQueue: null, // range the view is actually displaying (moments) start: null, @@ -7889,6 +8113,9 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { this.eventOrderSpecs = parseFieldSpecs(this.opt('eventOrder')); + this.dateRenderQueue = new TaskQueue(); + this.eventRenderQueue = new TaskQueue(this.opt('eventRenderWait')); + this.initialize(); }, @@ -7906,10 +8133,10 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { // Triggers handlers that are view-related. Modifies args before passing to calendar. - trigger: function(name, thisObj) { // arguments beyond thisObj are passed along + publiclyTrigger: function(name, thisObj) { // arguments beyond thisObj are passed along var calendar = this.calendar; - return calendar.trigger.apply( + return calendar.publiclyTrigger.apply( calendar, [name, thisObj || this].concat( Array.prototype.slice.call(arguments, 2), // arguments beyond thisObj @@ -7919,16 +8146,33 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { }, - /* Dates - ------------------------------------------------------------------------------------------------------------------*/ + // Returns a proxy of the given promise that will be rejected if the given event fires + // before the promise resolves. + rejectOn: function(eventName, promise) { + var _this = this; + return new Promise(function(resolve, reject) { + _this.one(eventName, reject); - // Updates all internal dates to center around the given current unzoned date. - setDate: function(date) { - this.setRange(this.computeRange(date)); + function cleanup() { + _this.off(eventName, reject); + } + + promise.then(function(res) { // success + cleanup(); + resolve(res); + }, function() { // failure + cleanup(); + reject(); + }); + }); }, + /* Date Computation + ------------------------------------------------------------------------------------------------------------------*/ + + // Updates all internal dates for displaying the given unzoned range. setRange: function(range) { $.extend(this, range); // assigns every property to this object's member variables @@ -8011,6 +8255,7 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { // Sets the view's title property to the most updated computed value updateTitle: function() { this.title = this.computeTitle(); + this.calendar.setToolbarsTitle(this.title); }, @@ -8060,155 +8305,275 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { }, - /* Rendering + getAllDayHtml: function() { + return this.opt('allDayHtml') || htmlEscape(this.opt('allDayText')); + }, + + + /* Navigation ------------------------------------------------------------------------------------------------------------------*/ - // Sets the container element that the view should render inside of. - // Does other DOM-related initializations. + // Generates HTML for an anchor to another view into the calendar. + // Will either generate an tag or a non-clickable tag, depending on enabled settings. + // `gotoOptions` can either be a moment input, or an object with the form: + // { date, type, forceOff } + // `type` is a view-type like "day" or "week". default value is "day". + // `attrs` and `innerHtml` are use to generate the rest of the HTML tag. + buildGotoAnchorHtml: function(gotoOptions, attrs, innerHtml) { + var date, type, forceOff; + var finalOptions; + + if ($.isPlainObject(gotoOptions)) { + date = gotoOptions.date; + type = gotoOptions.type; + forceOff = gotoOptions.forceOff; + } + else { + date = gotoOptions; // a single moment input + } + date = FC.moment(date); // if a string, parse it + + finalOptions = { // for serialization into the link + date: date.format('YYYY-MM-DD'), + type: type || 'day' + }; + + if (typeof attrs === 'string') { + innerHtml = attrs; + attrs = null; + } + + attrs = attrs ? ' ' + attrsToStr(attrs) : ''; // will have a leading space + innerHtml = innerHtml || ''; + + if (!forceOff && this.opt('navLinks')) { + return '' + + innerHtml + + ''; + } + else { + return '' + + innerHtml + + ''; + } + }, + + + // Rendering Non-date-related Content + // ----------------------------------------------------------------------------------------------------------------- + + + // Sets the container element that the view should render inside of, does global DOM-related initializations, + // and renders all the non-date-related content inside. setElement: function(el) { this.el = el; this.bindGlobalHandlers(); + this.renderSkeleton(); }, // Removes the view's container element from the DOM, clearing any content beforehand. // Undoes any other DOM-related attachments. removeElement: function() { - this.clear(); // clears all content - - // clean up the skeleton - if (this.isSkeletonRendered) { - this.unrenderSkeleton(); - this.isSkeletonRendered = false; - } + this.unsetDate(); + this.unrenderSkeleton(); this.unbindGlobalHandlers(); this.el.remove(); - // NOTE: don't null-out this.el in case the View was destroyed within an API callback. // We don't null-out the View's other jQuery element references upon destroy, // so we shouldn't kill this.el either. }, - // Does everything necessary to display the view centered around the given unzoned date. - // Does every type of rendering EXCEPT rendering events. - // Is asychronous and returns a promise. - display: function(date) { - var _this = this; - var scrollState = null; - - if (this.displaying) { - scrollState = this.queryScroll(); - } + // Renders the basic structure of the view before any content is rendered + renderSkeleton: function() { + // subclasses should implement + }, - this.calendar.freezeContentHeight(); - return this.clear().then(function() { // clear the content first (async) - return ( - _this.displaying = - $.when(_this.displayView(date)) // displayView might return a promise - .then(function() { - _this.forceScroll(_this.computeInitialScroll(scrollState)); - _this.calendar.unfreezeContentHeight(); - _this.triggerRender(); - }) - ); - }); + // Unrenders the basic structure of the view + unrenderSkeleton: function() { + // subclasses should implement }, - // Does everything necessary to clear the content of the view. - // Clears dates and events. Does not clear the skeleton. - // Is asychronous and returns a promise. - clear: function() { - var _this = this; - var displaying = this.displaying; + // Date Setting/Unsetting + // ----------------------------------------------------------------------------------------------------------------- - if (displaying) { // previously displayed, or in the process of being displayed? - return displaying.then(function() { // wait for the display to finish - _this.displaying = null; - _this.clearEvents(); - return _this.clearView(); // might return a promise. chain it - }); - } - else { - return $.when(); // an immediately-resolved promise - } - }, + setDate: function(date) { + var isReset = this.isDateSet; - // Displays the view's non-event content, such as date-related content or anything required by events. - // Renders the view's non-content skeleton if necessary. - // Can be asynchronous and return a promise. - displayView: function(date) { - if (!this.isSkeletonRendered) { - this.renderSkeleton(); - this.isSkeletonRendered = true; - } - if (date) { - this.setDate(date); - } - if (this.render) { - this.render(); // TODO: deprecate - } - this.renderDates(); - this.updateSize(); - this.renderBusinessHours(); // might need coordinates, so should go after updateSize() - this.startNowIndicator(); + this.isDateSet = true; + this.handleDate(date, isReset); + this.trigger(isReset ? 'dateReset' : 'dateSet', date); }, - // Unrenders the view content that was rendered in displayView. - // Can be asynchronous and return a promise. - clearView: function() { - this.unselect(); - this.stopNowIndicator(); - this.triggerUnrender(); - this.unrenderBusinessHours(); - this.unrenderDates(); - if (this.destroy) { - this.destroy(); // TODO: deprecate + unsetDate: function() { + if (this.isDateSet) { + this.isDateSet = false; + this.handleDateUnset(); + this.trigger('dateUnset'); } }, - // Renders the basic structure of the view before any content is rendered - renderSkeleton: function() { - // subclasses should implement - }, + // Date Handling + // ----------------------------------------------------------------------------------------------------------------- - // Unrenders the basic structure of the view - unrenderSkeleton: function() { - // subclasses should implement + handleDate: function(date, isReset) { + var _this = this; + + this.unbindEvents(); // will do nothing if not already bound + this.requestDateRender(date).then(function() { + // wish we could start earlier, but setRange/computeRange needs to execute first + _this.bindEvents(); // will request events + }); }, - // Renders the view's date-related content. - // Assumes setRange has already been called and the skeleton has already been rendered. + handleDateUnset: function() { + this.unbindEvents(); + this.requestDateUnrender(); + }, + + + // Date Render Queuing + // ----------------------------------------------------------------------------------------------------------------- + + + // if date not specified, uses current + requestDateRender: function(date) { + var _this = this; + + return this.dateRenderQueue.add(function() { + return _this.executeDateRender(date); + }); + }, + + + requestDateUnrender: function() { + var _this = this; + + return this.dateRenderQueue.add(function() { + return _this.executeDateUnrender(); + }); + }, + + + // Date High-level Rendering + // ----------------------------------------------------------------------------------------------------------------- + + + // if date not specified, uses current + executeDateRender: function(date) { + var _this = this; + + // if rendering a new date, reset scroll to initial state (scrollTime) + if (date) { + this.captureInitialScroll(); + } + else { + this.captureScroll(); // a rerender of the current date + } + + this.freezeHeight(); + + return this.executeDateUnrender().then(function() { + + if (date) { + _this.setRange(_this.computeRange(date)); + } + + if (_this.render) { + _this.render(); // TODO: deprecate + } + + _this.renderDates(); + _this.updateSize(); + _this.renderBusinessHours(); // might need coordinates, so should go after updateSize() + _this.startNowIndicator(); + + _this.thawHeight(); + _this.releaseScroll(); + + _this.isDateRendered = true; + _this.onDateRender(); + _this.trigger('dateRender'); + }); + }, + + + executeDateUnrender: function() { + var _this = this; + + if (_this.isDateRendered) { + return this.requestEventsUnrender().then(function() { + + _this.unselect(); + _this.stopNowIndicator(); + _this.triggerUnrender(); + _this.unrenderBusinessHours(); + _this.unrenderDates(); + + if (_this.destroy) { + _this.destroy(); // TODO: deprecate + } + + _this.isDateRendered = false; + _this.trigger('dateUnrender'); + }); + } + else { + return Promise.resolve(); + } + }, + + + // Date Rendering Triggers + // ----------------------------------------------------------------------------------------------------------------- + + + onDateRender: function() { + this.triggerRender(); + }, + + + // Date Low-level Rendering + // ----------------------------------------------------------------------------------------------------------------- + + + // date-cell content only renderDates: function() { // subclasses should implement }, - // Unrenders the view's date-related content + // date-cell content only unrenderDates: function() { // subclasses should override }, + // Misc view rendering utils + // ------------------------- + + // Signals that the view's content has been rendered triggerRender: function() { - this.trigger('viewRender', this, this, this.el); + this.publiclyTrigger('viewRender', this, this, this.el); }, // Signals that the view's content is about to be unrendered triggerUnrender: function() { - this.trigger('viewDestroy', this, this, this.el); + this.publiclyTrigger('viewDestroy', this, this, this.el); }, @@ -8345,10 +8710,9 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { // Refreshes anything dependant upon sizing of the container element of the grid updateSize: function(isResize) { - var scrollState; if (isResize) { - scrollState = this.queryScroll(); + this.captureScroll(); } this.updateHeight(isResize); @@ -8356,7 +8720,7 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { this.updateNowIndicator(); if (isResize) { - this.setScroll(scrollState); + this.releaseScroll(); } }, @@ -8389,72 +8753,294 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { ------------------------------------------------------------------------------------------------------------------*/ - // Computes the initial pre-configured scroll state prior to allowing the user to change it. - // Given the scroll state from the previous rendering. If first time rendering, given null. - computeInitialScroll: function(previousScrollState) { - return 0; + capturedScroll: null, + capturedScrollDepth: 0, + + + captureScroll: function() { + if (!(this.capturedScrollDepth++)) { + this.capturedScroll = this.isDateRendered ? this.queryScroll() : {}; // require a render first + return true; // root? + } + return false; }, - // Retrieves the view's current natural scroll state. Can return an arbitrary format. - queryScroll: function() { - // subclasses must implement + captureInitialScroll: function(forcedScroll) { + if (this.captureScroll()) { // root? + this.capturedScroll.isInitial = true; + + if (forcedScroll) { + $.extend(this.capturedScroll, forcedScroll); + } + else { + this.capturedScroll.isComputed = true; + } + } }, - // Sets the view's scroll state. Will accept the same format computeInitialScroll and queryScroll produce. - setScroll: function(scrollState) { - // subclasses must implement + releaseScroll: function() { + var scroll = this.capturedScroll; + var isRoot = this.discardScroll(); + + if (scroll.isComputed) { + if (isRoot) { + // only compute initial scroll if it will actually be used (is the root capture) + $.extend(scroll, this.computeInitialScroll()); + } + else { + scroll = null; // scroll couldn't be computed. don't apply it to the DOM + } + } + + if (scroll) { + // we act immediately on a releaseScroll operation, as opposed to captureScroll. + // if capture/release wraps a render operation that screws up the scroll, + // we still want to restore it a good state after, regardless of depth. + + if (scroll.isInitial) { + this.hardSetScroll(scroll); // outsmart how browsers set scroll on initial DOM + } + else { + this.setScroll(scroll); + } + } + }, + + + discardScroll: function() { + if (!(--this.capturedScrollDepth)) { + this.capturedScroll = null; + return true; // root? + } + return false; + }, + + + computeInitialScroll: function() { + return {}; + }, + + + queryScroll: function() { + return {}; }, - // Sets the scroll state, making sure to overcome any predefined scroll value the browser has in mind - forceScroll: function(scrollState) { + hardSetScroll: function(scroll) { var _this = this; + var exec = function() { _this.setScroll(scroll); }; + exec(); + setTimeout(exec, 0); // to surely clear the browser's initial scroll for the DOM + }, - this.setScroll(scrollState); - setTimeout(function() { - _this.setScroll(scrollState); - }, 0); + + setScroll: function(scroll) { }, - /* Event Elements / Segments + /* Height Freezing ------------------------------------------------------------------------------------------------------------------*/ - // Does everything necessary to display the given events onto the current view - displayEvents: function(events) { - var scrollState = this.queryScroll(); + freezeHeight: function() { + this.calendar.freezeContentHeight(); + }, + + + thawHeight: function() { + this.calendar.thawContentHeight(); + }, + + + // Event Binding/Unbinding + // ----------------------------------------------------------------------------------------------------------------- + + + bindEvents: function() { + var _this = this; + + if (!this.isEventsBound) { + this.isEventsBound = true; + this.rejectOn('eventsUnbind', this.requestEvents()).then(function(events) { // TODO: test rejection + _this.listenTo(_this.calendar, 'eventsReset', _this.setEvents); + _this.setEvents(events); + }); + } + }, + + + unbindEvents: function() { + if (this.isEventsBound) { + this.isEventsBound = false; + this.stopListeningTo(this.calendar, 'eventsReset'); + this.unsetEvents(); + this.trigger('eventsUnbind'); + } + }, + + + // Event Setting/Unsetting + // ----------------------------------------------------------------------------------------------------------------- + + + setEvents: function(events) { + var isReset = this.isEventSet; + + this.isEventsSet = true; + this.handleEvents(events, isReset); + this.trigger(isReset ? 'eventsReset' : 'eventsSet', events); + }, + + + unsetEvents: function() { + if (this.isEventsSet) { + this.isEventsSet = false; + this.handleEventsUnset(); + this.trigger('eventsUnset'); + } + }, + + + whenEventsSet: function() { + var _this = this; + + if (this.isEventsSet) { + return Promise.resolve(this.getCurrentEvents()); + } + else { + return new Promise(function(resolve) { + _this.one('eventsSet', resolve); + }); + } + }, + + + // Event Handling + // ----------------------------------------------------------------------------------------------------------------- + + + handleEvents: function(events, isReset) { + this.requestEventsRender(events); + }, + + + handleEventsUnset: function() { + this.requestEventsUnrender(); + }, + + + // Event Render Queuing + // ----------------------------------------------------------------------------------------------------------------- + + + // assumes any previous event renders have been cleared already + requestEventsRender: function(events) { + var _this = this; + + return this.eventRenderQueue.add(function() { // might not return a promise if debounced!? bad + return _this.executeEventsRender(events); + }); + }, + + + requestEventsUnrender: function() { + var _this = this; + + if (this.isEventsRendered) { + return this.eventRenderQueue.addQuickly(function() { + return _this.executeEventsUnrender(); + }); + } + else { + return Promise.resolve(); + } + }, + - this.clearEvents(); - this.renderEvents(events); - this.isEventsRendered = true; - this.setScroll(scrollState); - this.triggerEventRender(); + requestCurrentEventsRender: function() { + if (this.isEventsSet) { + this.requestEventsRender(this.getCurrentEvents()); + } + else { + return Promise.reject(); + } }, - // Does everything necessary to clear the view's currently-rendered events - clearEvents: function() { - var scrollState; + // Event High-level Rendering + // ----------------------------------------------------------------------------------------------------------------- + + + executeEventsRender: function(events) { + var _this = this; + + this.captureScroll(); + this.freezeHeight(); + + return this.executeEventsUnrender().then(function() { + _this.renderEvents(events); + + _this.thawHeight(); + _this.releaseScroll(); + + _this.isEventsRendered = true; + _this.onEventsRender(); + _this.trigger('eventsRender'); + }); + }, + + executeEventsUnrender: function() { if (this.isEventsRendered) { + this.onBeforeEventsUnrender(); - // TODO: optimize: if we know this is part of a displayEvents call, don't queryScroll/setScroll - scrollState = this.queryScroll(); + this.captureScroll(); + this.freezeHeight(); - this.triggerEventUnrender(); if (this.destroyEvents) { this.destroyEvents(); // TODO: deprecate } + this.unrenderEvents(); - this.setScroll(scrollState); + + this.thawHeight(); + this.releaseScroll(); + this.isEventsRendered = false; + this.trigger('eventsUnrender'); } + + return Promise.resolve(); // always synchronous + }, + + + // Event Rendering Triggers + // ----------------------------------------------------------------------------------------------------------------- + + + // Signals that all events have been rendered + onEventsRender: function() { + this.renderedEventSegEach(function(seg) { + this.publiclyTrigger('eventAfterRender', seg.event, seg.event, seg.el); + }); + this.publiclyTrigger('eventAfterAllRender'); + }, + + + // Signals that all event elements are about to be removed + onBeforeEventsUnrender: function() { + this.renderedEventSegEach(function(seg) { + this.publiclyTrigger('eventDestroy', seg.event, seg.event, seg.el); + }); }, + // Event Low-level Rendering + // ----------------------------------------------------------------------------------------------------------------- + + // Renders the events onto the view. renderEvents: function(events) { // subclasses should implement @@ -8467,27 +9053,28 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { }, - // Signals that all events have been rendered - triggerEventRender: function() { - this.renderedEventSegEach(function(seg) { - this.trigger('eventAfterRender', seg.event, seg.event, seg.el); - }); - this.trigger('eventAfterAllRender'); + // Event Data Access + // ----------------------------------------------------------------------------------------------------------------- + + + requestEvents: function() { + return this.calendar.requestEvents(this.start, this.end); }, - // Signals that all event elements are about to be removed - triggerEventUnrender: function() { - this.renderedEventSegEach(function(seg) { - this.trigger('eventDestroy', seg.event, seg.event, seg.el); - }); + getCurrentEvents: function() { + return this.calendar.getPrunedEventCache(); }, + // Event Rendering Utils + // ----------------------------------------------------------------------------------------------------------------- + + // Given an event and the default element used for rendering, returns the element that should actually be used. // Basically runs events and elements through the eventRender hook. resolveEventEl: function(event, el) { - var custom = this.trigger('eventRender', event, event, el); + var custom = this.publiclyTrigger('eventRender', event, event, el); if (custom === false) { // means don't render at all el = null; @@ -8546,14 +9133,24 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { // Computes if the given event is allowed to be dragged by the user isEventDraggable: function(event) { - var source = event.source || {}; + return this.isEventStartEditable(event); + }, + + isEventStartEditable: function(event) { return firstDefined( event.startEditable, - source.startEditable, + (event.source || {}).startEditable, this.opt('eventStartEditable'), + this.isEventGenerallyEditable(event) + ); + }, + + + isEventGenerallyEditable: function(event) { + return firstDefined( event.editable, - source.editable, + (event.source || {}).editable, this.opt('editable') ); }, @@ -8576,7 +9173,7 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { // Triggers event-drop handlers that have subscribed via the API triggerEventDrop: function(event, dateDelta, undoFunc, el, ev) { - this.trigger('eventDrop', el[0], event, dateDelta, undoFunc, ev, {}); // {} = jqui dummy + this.publiclyTrigger('eventDrop', el[0], event, dateDelta, undoFunc, ev, {}); // {} = jqui dummy }, @@ -8606,10 +9203,10 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { triggerExternalDrop: function(event, dropLocation, el, ev, ui) { // trigger 'drop' regardless of whether element represents an event - this.trigger('drop', el[0], dropLocation.start, ev, ui); + this.publiclyTrigger('drop', el[0], dropLocation.start, ev, ui); if (event) { - this.trigger('eventReceive', null, event); // signal an external event landed + this.publiclyTrigger('eventReceive', null, event); // signal an external event landed } }, @@ -8679,7 +9276,7 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { // Triggers event-resize handlers that have subscribed via the API triggerEventResize: function(event, durationDelta, undoFunc, el, ev) { - this.trigger('eventResize', el[0], event, durationDelta, undoFunc, ev, {}); // {} = jqui dummy + this.publiclyTrigger('eventResize', el[0], event, durationDelta, undoFunc, ev, {}); // {} = jqui dummy }, @@ -8711,7 +9308,7 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { // Triggers handlers to 'select' triggerSelect: function(span, ev) { - this.trigger( + this.publiclyTrigger( 'select', null, this.calendar.applyTimezone(span.start), // convert to calendar's tz for external API @@ -8730,7 +9327,7 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { this.destroySelection(); // TODO: deprecate } this.unrenderSelection(); - this.trigger('unselect', null, ev); + this.publiclyTrigger('unselect', null, ev); } }, @@ -8822,7 +9419,7 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, { // Triggers handlers to 'dayClick' // Span has start/end of the clicked area. Only the start is useful. triggerDayClick: function(span, dayEl, ev) { - this.trigger( + this.publiclyTrigger( 'dayClick', dayEl, this.calendar.applyTimezone(span.start), // convert to calendar's timezone for external API @@ -9049,64 +9646,354 @@ var Scroller = FC.Scroller = Class.extend({ }); ;; - -var Calendar = FC.Calendar = Class.extend({ - - dirDefaults: null, // option defaults related to LTR or RTL - langDefaults: null, // option defaults related to current locale - overrides: null, // option overrides given to the fullCalendar constructor - options: null, // all defaults combined with overrides - viewSpecCache: null, // cache of view definitions - view: null, // current View object - header: null, - loadingLevel: 0, // number of simultaneous loading tasks +function Iterator(items) { + this.items = items || []; +} - // a lot of this class' OOP logic is scoped within this constructor function, - // but in the future, write individual methods on the prototype. - constructor: Calendar_constructor, +/* Calls a method on every item passing the arguments through */ +Iterator.prototype.proxyCall = function(methodName) { + var args = Array.prototype.slice.call(arguments, 1); + var results = []; + this.items.forEach(function(item) { + results.push(item[methodName].apply(item, args)); + }); - // Subclasses can override this for initialization logic after the constructor has been called - initialize: function() { - }, + return results; +}; +;; - // Initializes `this.options` and other important options-related objects - initOptions: function(overrides) { - var lang, langDefaults; - var isRTL, dirDefaults; +/* Toolbar with buttons and title +----------------------------------------------------------------------------------------------------------------------*/ - // converts legacy options into non-legacy ones. - // in the future, when this is removed, don't use `overrides` reference. make a copy. - overrides = massageOverrides(overrides); +function Toolbar(calendar, toolbarOptions) { + var t = this; - lang = overrides.lang; - langDefaults = langOptionHash[lang]; - if (!langDefaults) { - lang = Calendar.defaults.lang; - langDefaults = langOptionHash[lang] || {}; - } + // exports + t.setToolbarOptions = setToolbarOptions; + t.render = render; + t.removeElement = removeElement; + t.updateTitle = updateTitle; + t.activateButton = activateButton; + t.deactivateButton = deactivateButton; + t.disableButton = disableButton; + t.enableButton = enableButton; + t.getViewsWithButtons = getViewsWithButtons; + t.el = null; // mirrors local `el` + + // locals + var el; + var viewsWithButtons = []; + var tm; + + // method to update toolbar-specific options, not calendar-wide options + function setToolbarOptions(newToolbarOptions) { + toolbarOptions = newToolbarOptions; + } + + // can be called repeatedly and will rerender + function render() { + var sections = toolbarOptions.layout; + + tm = calendar.options.theme ? 'ui' : 'fc'; + + if (sections) { + if (!el) { + el = this.el = $("
    "); + } + else { + el.empty(); + } + el.append(renderSection('left')) + .append(renderSection('right')) + .append(renderSection('center')) + .append('
    '); + } + else { + removeElement(); + } + } + + + function removeElement() { + if (el) { + el.remove(); + el = t.el = null; + } + } + + + function renderSection(position) { + var sectionEl = $('
    '); + var buttonStr = toolbarOptions.layout[position]; + + if (buttonStr) { + $.each(buttonStr.split(' '), function(i) { + var groupChildren = $(); + var isOnlyButtons = true; + var groupEl; + + $.each(this.split(','), function(j, buttonName) { + var customButtonProps; + var viewSpec; + var buttonClick; + var overrideText; // text explicitly set by calendar's constructor options. overcomes icons + var defaultText; + var themeIcon; + var normalIcon; + var innerHtml; + var classes; + var button; // the element + + if (buttonName == 'title') { + groupChildren = groupChildren.add($('

     

    ')); // we always want it to take up height + isOnlyButtons = false; + } + else { + if ((customButtonProps = (calendar.options.customButtons || {})[buttonName])) { + buttonClick = function(ev) { + if (customButtonProps.click) { + customButtonProps.click.call(button[0], ev); + } + }; + overrideText = ''; // icons will override text + defaultText = customButtonProps.text; + } + else if ((viewSpec = calendar.getViewSpec(buttonName))) { + buttonClick = function() { + calendar.changeView(buttonName); + }; + viewsWithButtons.push(buttonName); + overrideText = viewSpec.buttonTextOverride; + defaultText = viewSpec.buttonTextDefault; + } + else if (calendar[buttonName]) { // a calendar method + buttonClick = function() { + calendar[buttonName](); + }; + overrideText = (calendar.overrides.buttonText || {})[buttonName]; + defaultText = calendar.options.buttonText[buttonName]; // everything else is considered default + } + + if (buttonClick) { + + themeIcon = + customButtonProps ? + customButtonProps.themeIcon : + calendar.options.themeButtonIcons[buttonName]; + + normalIcon = + customButtonProps ? + customButtonProps.icon : + calendar.options.buttonIcons[buttonName]; + + if (overrideText) { + innerHtml = htmlEscape(overrideText); + } + else if (themeIcon && calendar.options.theme) { + innerHtml = ""; + } + else if (normalIcon && !calendar.options.theme) { + innerHtml = ""; + } + else { + innerHtml = htmlEscape(defaultText); + } + + classes = [ + 'fc-' + buttonName + '-button', + tm + '-button', + tm + '-state-default' + ]; + + button = $( // type="button" so that it doesn't submit a form + '' + ) + .click(function(ev) { + // don't process clicks for disabled buttons + if (!button.hasClass(tm + '-state-disabled')) { + + buttonClick(ev); + + // after the click action, if the button becomes the "active" tab, or disabled, + // it should never have a hover class, so remove it now. + if ( + button.hasClass(tm + '-state-active') || + button.hasClass(tm + '-state-disabled') + ) { + button.removeClass(tm + '-state-hover'); + } + } + }) + .mousedown(function() { + // the *down* effect (mouse pressed in). + // only on buttons that are not the "active" tab, or disabled + button + .not('.' + tm + '-state-active') + .not('.' + tm + '-state-disabled') + .addClass(tm + '-state-down'); + }) + .mouseup(function() { + // undo the *down* effect + button.removeClass(tm + '-state-down'); + }) + .hover( + function() { + // the *hover* effect. + // only on buttons that are not the "active" tab, or disabled + button + .not('.' + tm + '-state-active') + .not('.' + tm + '-state-disabled') + .addClass(tm + '-state-hover'); + }, + function() { + // undo the *hover* effect + button + .removeClass(tm + '-state-hover') + .removeClass(tm + '-state-down'); // if mouseleave happens before mouseup + } + ); + + groupChildren = groupChildren.add(button); + } + } + }); + + if (isOnlyButtons) { + groupChildren + .first().addClass(tm + '-corner-left').end() + .last().addClass(tm + '-corner-right').end(); + } + + if (groupChildren.length > 1) { + groupEl = $('
    '); + if (isOnlyButtons) { + groupEl.addClass('fc-button-group'); + } + groupEl.append(groupChildren); + sectionEl.append(groupEl); + } + else { + sectionEl.append(groupChildren); // 1 or 0 children + } + }); + } + + return sectionEl; + } + + + function updateTitle(text) { + if (el) { + el.find('h2').text(text); + } + } + + + function activateButton(buttonName) { + if (el) { + el.find('.fc-' + buttonName + '-button') + .addClass(tm + '-state-active'); + } + } + + + function deactivateButton(buttonName) { + if (el) { + el.find('.fc-' + buttonName + '-button') + .removeClass(tm + '-state-active'); + } + } + + + function disableButton(buttonName) { + if (el) { + el.find('.fc-' + buttonName + '-button') + .prop('disabled', true) + .addClass(tm + '-state-disabled'); + } + } + + + function enableButton(buttonName) { + if (el) { + el.find('.fc-' + buttonName + '-button') + .prop('disabled', false) + .removeClass(tm + '-state-disabled'); + } + } + + + function getViewsWithButtons() { + return viewsWithButtons; + } + +} + +;; + +var Calendar = FC.Calendar = Class.extend({ + + dirDefaults: null, // option defaults related to LTR or RTL + localeDefaults: null, // option defaults related to current locale + overrides: null, // option overrides given to the fullCalendar constructor + dynamicOverrides: null, // options set with dynamic setter method. higher precedence than view overrides. + options: null, // all defaults combined with overrides + viewSpecCache: null, // cache of view definitions + view: null, // current View object + header: null, + footer: null, + loadingLevel: 0, // number of simultaneous loading tasks + + + // a lot of this class' OOP logic is scoped within this constructor function, + // but in the future, write individual methods on the prototype. + constructor: Calendar_constructor, + + + // Subclasses can override this for initialization logic after the constructor has been called + initialize: function() { + }, - isRTL = firstDefined( - overrides.isRTL, - langDefaults.isRTL, + + // Computes the flattened options hash for the calendar and assigns to `this.options`. + // Assumes this.overrides and this.dynamicOverrides have already been initialized. + populateOptionsHash: function() { + var locale, localeDefaults; + var isRTL, dirDefaults; + + locale = firstDefined( // explicit locale option given? + this.dynamicOverrides.locale, + this.overrides.locale + ); + localeDefaults = localeOptionHash[locale]; + if (!localeDefaults) { // explicit locale option not given or invalid? + locale = Calendar.defaults.locale; + localeDefaults = localeOptionHash[locale] || {}; + } + + isRTL = firstDefined( // based on options computed so far, is direction RTL? + this.dynamicOverrides.isRTL, + this.overrides.isRTL, + localeDefaults.isRTL, Calendar.defaults.isRTL ); dirDefaults = isRTL ? Calendar.rtlDefaults : {}; this.dirDefaults = dirDefaults; - this.langDefaults = langDefaults; - this.overrides = overrides; + this.localeDefaults = localeDefaults; this.options = mergeOptions([ // merge defaults and overrides. lowest to highest precedence Calendar.defaults, // global defaults dirDefaults, - langDefaults, - overrides + localeDefaults, + this.overrides, + this.dynamicOverrides ]); - populateInstanceComputableOptions(this.options); - - this.viewSpecCache = {}; // somewhat unrelated + populateInstanceComputableOptions(this.options); // fill in gaps with computed options }, @@ -9128,7 +10015,7 @@ var Calendar = FC.Calendar = Class.extend({ if ($.inArray(unit, intervalUnits) != -1) { // put views that have buttons first. there will be duplicates, but oh well - viewTypes = this.header.getViewsWithButtons(); + viewTypes = this.header.getViewsWithButtons(); // TODO: include footer as well? $.each(FC.views, function(viewType) { // all views viewTypes.push(viewType); }); @@ -9218,9 +10105,10 @@ var Calendar = FC.Calendar = Class.extend({ Calendar.defaults, // global defaults spec.defaults, // view's defaults (from ViewSubclass.defaults) this.dirDefaults, - this.langDefaults, // locale and dir take precedence over view's defaults! + this.localeDefaults, // locale and dir take precedence over view's defaults! this.overrides, // calendar's overrides (options given to constructor) - spec.overrides // view's overrides (view-specific options) + spec.overrides, // view's overrides (view-specific options) + this.dynamicOverrides // dynamically set via setter. highest precedence ]); populateInstanceComputableOptions(spec.options); }, @@ -9234,17 +10122,21 @@ var Calendar = FC.Calendar = Class.extend({ function queryButtonText(options) { var buttonText = options.buttonText || {}; return buttonText[requestedViewType] || + // view can decide to look up a certain key + (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) || + // a key like "month" (spec.singleUnit ? buttonText[spec.singleUnit] : null); } // highest to lowest priority spec.buttonTextOverride = + queryButtonText(this.dynamicOverrides) || queryButtonText(this.overrides) || // constructor-specified buttonText lookup hash takes precedence spec.overrides.buttonText; // `buttonText` for view-specific options is a string // highest to lowest priority. mirrors buildViewSpecOptions spec.buttonTextDefault = - queryButtonText(this.langDefaults) || + queryButtonText(this.localeDefaults) || queryButtonText(this.dirDefaults) || spec.defaults.buttonText || // a single string. from ViewSubclass.defaults queryButtonText(Calendar.defaults) || @@ -9270,7 +10162,7 @@ var Calendar = FC.Calendar = Class.extend({ // Should be called when any type of async data fetching begins pushLoading: function() { if (!(this.loadingLevel++)) { - this.trigger('loading', null, true, this.view); + this.publiclyTrigger('loading', null, true, this.view); } }, @@ -9278,7 +10170,7 @@ var Calendar = FC.Calendar = Class.extend({ // Should be called when any type of async data fetching completes popLoading: function() { if (!(--this.loadingLevel)) { - this.trigger('loading', null, false, this.view); + this.publiclyTrigger('loading', null, false, this.view); } }, @@ -9311,19 +10203,12 @@ function Calendar_constructor(element, overrides) { var t = this; - t.initOptions(overrides || {}); - var options = this.options; - - // Exports // ----------------------------------------------------------------------------------- t.render = render; t.destroy = destroy; - t.refetchEvents = refetchEvents; - t.reportEvents = reportEvents; - t.reportEventChange = reportEventChange; - t.rerenderEvents = renderEvents; // `renderEvents` serves as a rerender. an API method + t.rerenderEvents = rerenderEvents; t.changeView = renderView; // `renderView` will switch to another view t.select = select; t.unselect = unselect; @@ -9338,67 +10223,95 @@ function Calendar_constructor(element, overrides) { t.getDate = getDate; t.getCalendar = getCalendar; t.getView = getView; - t.option = option; - t.trigger = trigger; + t.option = option; // getter/setter method + t.publiclyTrigger = publiclyTrigger; + + + // Options + // ----------------------------------------------------------------------------------- + + t.dynamicOverrides = {}; + t.viewSpecCache = {}; + t.optionHandlers = {}; // for Calendar.options.js + t.overrides = $.extend({}, overrides); // make a copy + t.populateOptionsHash(); // sets this.options - // Language-data Internals + + // Locale-data Internals // ----------------------------------------------------------------------------------- - // Apply overrides to the current language's data + // Apply overrides to the current locale's data + var localeData; - var localeData = createObject( // make a cheap copy - getMomentLocaleData(options.lang) // will fall back to en - ); + // Called immediately, and when any of the options change. + // Happens before any internal objects rebuild or rerender, because this is very core. + t.bindOptions([ + 'locale', 'monthNames', 'monthNamesShort', 'dayNames', 'dayNamesShort', 'firstDay', 'weekNumberCalculation' + ], function(locale, monthNames, monthNamesShort, dayNames, dayNamesShort, firstDay, weekNumberCalculation) { - if (options.monthNames) { - localeData._months = options.monthNames; - } - if (options.monthNamesShort) { - localeData._monthsShort = options.monthNamesShort; - } - if (options.dayNames) { - localeData._weekdays = options.dayNames; - } - if (options.dayNamesShort) { - localeData._weekdaysShort = options.dayNamesShort; - } - if (options.firstDay != null) { - var _week = createObject(localeData._week); // _week: { dow: # } - _week.dow = options.firstDay; - localeData._week = _week; - } + // normalize + if (weekNumberCalculation === 'iso') { + weekNumberCalculation = 'ISO'; // normalize + } + + localeData = createObject( // make a cheap copy + getMomentLocaleData(locale) // will fall back to en + ); + + if (monthNames) { + localeData._months = monthNames; + } + if (monthNamesShort) { + localeData._monthsShort = monthNamesShort; + } + if (dayNames) { + localeData._weekdays = dayNames; + } + if (dayNamesShort) { + localeData._weekdaysShort = dayNamesShort; + } - // assign a normalized value, to be used by our .week() moment extension - localeData._fullCalendar_weekCalc = (function(weekCalc) { - if (typeof weekCalc === 'function') { - return weekCalc; + if (firstDay == null && weekNumberCalculation === 'ISO') { + firstDay = 1; } - else if (weekCalc === 'local') { - return weekCalc; + if (firstDay != null) { + var _week = createObject(localeData._week); // _week: { dow: # } + _week.dow = firstDay; + localeData._week = _week; } - else if (weekCalc === 'iso' || weekCalc === 'ISO') { - return 'ISO'; + + if ( // whitelist certain kinds of input + weekNumberCalculation === 'ISO' || + weekNumberCalculation === 'local' || + typeof weekNumberCalculation === 'function' + ) { + localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it } - })(options.weekNumberCalculation); + // If the internal current date object already exists, move to new locale. + // We do NOT need to do this technique for event dates, because this happens when converting to "segments". + if (date) { + localizeMoment(date); // sets to localeData + } + }); // Calendar-specific Date Utilities // ----------------------------------------------------------------------------------- - t.defaultAllDayEventDuration = moment.duration(options.defaultAllDayEventDuration); - t.defaultTimedEventDuration = moment.duration(options.defaultTimedEventDuration); + t.defaultAllDayEventDuration = moment.duration(t.options.defaultAllDayEventDuration); + t.defaultTimedEventDuration = moment.duration(t.options.defaultTimedEventDuration); - // Builds a moment using the settings of the current calendar: timezone and language. + // Builds a moment using the settings of the current calendar: timezone and locale. // Accepts anything the vanilla moment() constructor accepts. t.moment = function() { var mom; - if (options.timezone === 'local') { + if (t.options.timezone === 'local') { mom = FC.moment.apply(null, arguments); // Force the moment to be local, because FC.moment doesn't guarantee it. @@ -9406,28 +10319,30 @@ function Calendar_constructor(element, overrides) { mom.local(); } } - else if (options.timezone === 'UTC') { + else if (t.options.timezone === 'UTC') { mom = FC.moment.utc.apply(null, arguments); // process as UTC } else { mom = FC.moment.parseZone.apply(null, arguments); // let the input decide the zone } - if ('_locale' in mom) { // moment 2.8 and above - mom._locale = localeData; - } - else { // pre-moment-2.8 - mom._lang = localeData; - } + localizeMoment(mom); return mom; }; + // Updates the given moment's locale settings to the current calendar locale settings. + function localizeMoment(mom) { + mom._locale = localeData; + } + t.localizeMoment = localizeMoment; + + // Returns a boolean about whether or not the calendar knows how to calculate // the timezone offset of arbitrary dates in the current timezone. t.getIsAmbigTimezone = function() { - return options.timezone !== 'local' && options.timezone !== 'UTC'; + return t.options.timezone !== 'local' && t.options.timezone !== 'UTC'; }; @@ -9456,7 +10371,7 @@ function Calendar_constructor(element, overrides) { // Returns a moment for the current date, as defined by the client's computer or from the `now` option. // Will return an moment with an ambiguous timezone. t.getNow = function() { - var now = options.now; + var now = t.options.now; if (typeof now === 'function') { now = now(); } @@ -9498,19 +10413,16 @@ function Calendar_constructor(element, overrides) { // Produces a human-readable string for the given duration. // Side-effect: changes the locale of the given duration. t.humanizeDuration = function(duration) { - return (duration.locale || duration.lang).call(duration, options.lang) // works moment-pre-2.8 - .humanize(); + return duration.locale(t.options.locale).humanize(); }; - + // Imports // ----------------------------------------------------------------------------------- - EventManager.call(t, options); - var isFetchNeeded = t.isFetchNeeded; - var fetchEvents = t.fetchEvents; + EventManager.call(t); @@ -9519,8 +10431,9 @@ function Calendar_constructor(element, overrides) { var _element = element[0]; + var toolbarsManager; var header; - var headerElement; + var footer; var content; var tm; // for making theme classes var currentView; // NOTE: keep this in sync with this.view @@ -9528,24 +10441,23 @@ function Calendar_constructor(element, overrides) { var suggestedViewHeight; var windowResizeProxy; // wraps the windowResize function var ignoreWindowResize = 0; - var events = []; var date; // unzoned - - - + + + // Main Rendering // ----------------------------------------------------------------------------------- // compute the initial ambig-timezone date - if (options.defaultDate != null) { - date = t.moment(options.defaultDate).stripZone(); + if (t.options.defaultDate != null) { + date = t.moment(t.options.defaultDate).stripZone(); } else { date = t.getNow(); // getNow already returns unzoned } - - + + function render() { if (!content) { initialRender(); @@ -9556,43 +10468,65 @@ function Calendar_constructor(element, overrides) { renderView(); } } - - + + function initialRender() { - tm = options.theme ? 'ui' : 'fc'; element.addClass('fc'); - if (options.isRTL) { - element.addClass('fc-rtl'); - } - else { - element.addClass('fc-ltr'); - } + // event delegation for nav links + element.on('click.fc', 'a[data-goto]', function(ev) { + var anchorEl = $(this); + var gotoOptions = anchorEl.data('goto'); // will automatically parse JSON + var date = t.moment(gotoOptions.date); + var viewType = gotoOptions.type; - if (options.theme) { - element.addClass('ui-widget'); - } - else { - element.addClass('fc-unthemed'); - } + // property like "navLinkDayClick". might be a string or a function + var customAction = currentView.opt('navLink' + capitaliseFirstLetter(viewType) + 'Click'); + + if (typeof customAction === 'function') { + customAction(date, ev); + } + else { + if (typeof customAction === 'string') { + viewType = customAction; + } + zoomTo(date, viewType); + } + }); + + // called immediately, and upon option change + t.bindOption('theme', function(theme) { + tm = theme ? 'ui' : 'fc'; // affects a larger scope + element.toggleClass('ui-widget', theme); + element.toggleClass('fc-unthemed', !theme); + }); + + // called immediately, and upon option change. + // HACK: locale often affects isRTL, so we explicitly listen to that too. + t.bindOptions([ 'isRTL', 'locale' ], function(isRTL) { + element.toggleClass('fc-ltr', !isRTL); + element.toggleClass('fc-rtl', isRTL); + }); content = $("
    ").prependTo(element); - header = t.header = new Header(t, options); - headerElement = header.render(); - if (headerElement) { - element.prepend(headerElement); - } + var toolbars = buildToolbars(); + toolbarsManager = new Iterator(toolbars); - renderView(options.defaultView); + header = t.header = toolbars[0]; + footer = t.footer = toolbars[1]; - if (options.handleWindowResize) { - windowResizeProxy = debounce(windowResize, options.windowResizeDelay); // prevents rapid calls + renderHeader(); + renderFooter(); + renderView(t.options.defaultView); + + if (t.options.handleWindowResize) { + windowResizeProxy = debounce(windowResize, t.options.windowResizeDelay); // prevents rapid calls $(window).resize(windowResizeProxy); } } - - + + function destroy() { if (currentView) { @@ -9602,21 +10536,23 @@ function Calendar_constructor(element, overrides) { // It is still the "current" view, just not rendered. } - header.removeElement(); + toolbarsManager.proxyCall('removeElement'); content.remove(); element.removeClass('fc fc-ltr fc-rtl fc-unthemed ui-widget'); + element.off('.fc'); // unbind nav link handlers + if (windowResizeProxy) { $(window).unbind('resize', windowResizeProxy); } } - - + + function elementVisible() { return element.is(':visible'); } - - + + // View Rendering // ----------------------------------------------------------------------------------- @@ -9624,15 +10560,16 @@ function Calendar_constructor(element, overrides) { // Renders a view because of a date change, view-type change, or for the first time. // If not given a viewType, keep the current view but render different dates. - function renderView(viewType) { + // Accepts an optional scroll state to restore to. + function renderView(viewType, forcedScroll) { ignoreWindowResize++; + var needsClearView = currentView && viewType && currentView.type !== viewType; + // if viewType is changing, remove the old view's rendering - if (currentView && viewType && currentView.type !== viewType) { - header.deactivateButton(currentView.type); + if (needsClearView) { freezeContentHeight(); // prevent a scroll jump when view element is removed - currentView.removeElement(); - currentView = t.view = null; + clearView(); } // if viewType changed, or the view was never created, create a fresh view @@ -9644,7 +10581,7 @@ function Calendar_constructor(element, overrides) { currentView.setElement( $("
    ").appendTo(content) ); - header.activateButton(viewType); + toolbarsManager.proxyCall('activateButton', viewType); } if (currentView) { @@ -9654,28 +10591,66 @@ function Calendar_constructor(element, overrides) { // render or rerender the view if ( - !currentView.displaying || - !date.isWithin(currentView.intervalStart, currentView.intervalEnd) // implicit date window change + !currentView.isDateSet || + !( // NOT within interval range signals an implicit date window change + date >= currentView.intervalStart && + date < currentView.intervalEnd + ) ) { if (elementVisible()) { - currentView.display(date); // will call freezeContentHeight - unfreezeContentHeight(); // immediately unfreeze regardless of whether display is async + if (forcedScroll) { + currentView.captureInitialScroll(forcedScroll); + } - // need to do this after View::render, so dates are calculated - updateHeaderTitle(); - updateTodayButton(); + currentView.setDate(date, forcedScroll); - getAndRenderEvents(); + if (forcedScroll) { + currentView.releaseScroll(); + } + + // need to do this after View::render, so dates are calculated + // NOTE: view updates title text proactively + updateToolbarsTodayButton(); } } } - unfreezeContentHeight(); // undo any lone freezeContentHeight calls + if (needsClearView) { + thawContentHeight(); + } + ignoreWindowResize--; } - + + // Unrenders the current view and reflects this change in the Header. + // Unregsiters the `currentView`, but does not remove from viewByType hash. + function clearView() { + toolbarsManager.proxyCall('deactivateButton', currentView.type); + currentView.removeElement(); + currentView = t.view = null; + } + + + // Destroys the view, including the view object. Then, re-instantiates it and renders it. + // Maintains the same scroll state. + // TODO: maintain any other user-manipulated state. + function reinitView() { + ignoreWindowResize++; + freezeContentHeight(); + + var viewType = currentView.type; + var scrollState = currentView.queryScroll(); + clearView(); + calcSize(); + renderView(viewType, scrollState); + + thawContentHeight(); + ignoreWindowResize--; + } + + // Resizing // ----------------------------------------------------------------------------------- @@ -9690,10 +10665,10 @@ function Calendar_constructor(element, overrides) { t.isHeightAuto = function() { - return options.contentHeight === 'auto' || options.height === 'auto'; + return t.options.contentHeight === 'auto' || t.options.height === 'auto'; }; - - + + function updateSize(shouldRecalc) { if (elementVisible()) { @@ -9715,21 +10690,41 @@ function Calendar_constructor(element, overrides) { _calcSize(); } } - - + + function _calcSize() { // assumes elementVisible - if (typeof options.contentHeight === 'number') { // exists and not 'auto' - suggestedViewHeight = options.contentHeight; + var contentHeightInput = t.options.contentHeight; + var heightInput = t.options.height; + + if (typeof contentHeightInput === 'number') { // exists and not 'auto' + suggestedViewHeight = contentHeightInput; + } + else if (typeof contentHeightInput === 'function') { // exists and is a function + suggestedViewHeight = contentHeightInput(); + } + else if (typeof heightInput === 'number') { // exists and not 'auto' + suggestedViewHeight = heightInput - queryToolbarsHeight(); + } + else if (typeof heightInput === 'function') { // exists and is a function + suggestedViewHeight = heightInput() - queryToolbarsHeight(); } - else if (typeof options.height === 'number') { // exists and not 'auto' - suggestedViewHeight = options.height - (headerElement ? headerElement.outerHeight(true) : 0); + else if (heightInput === 'parent') { // set to height of parent element + suggestedViewHeight = element.parent().height() - queryToolbarsHeight(); } else { - suggestedViewHeight = Math.round(content.width() / Math.max(options.aspectRatio, .5)); + suggestedViewHeight = Math.round(content.width() / Math.max(t.options.aspectRatio, .5)); } } - - + + + function queryToolbarsHeight() { + return toolbarsManager.items.reduce(function(accumulator, toolbar) { + var toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin + return accumulator + toolbarHeight; + }, 0); + } + + function windowResize(ev) { if ( !ignoreWindowResize && @@ -9737,95 +10732,93 @@ function Calendar_constructor(element, overrides) { currentView.start // view has already been rendered ) { if (updateSize(true)) { - currentView.trigger('windowResize', _element); + currentView.publiclyTrigger('windowResize', _element); } } } - - - - /* Event Fetching/Rendering - -----------------------------------------------------------------------------*/ - // TODO: going forward, most of this stuff should be directly handled by the view - function refetchEvents() { // can be called as an API method - destroyEvents(); // so that events are cleared before user starts waiting for AJAX - fetchAndRenderEvents(); - } + + /* Event Rendering + -----------------------------------------------------------------------------*/ - function renderEvents() { // destroys old events if previously rendered + function rerenderEvents() { // API method. destroys old events if previously rendered. if (elementVisible()) { - freezeContentHeight(); - currentView.displayEvents(events); - unfreezeContentHeight(); + t.reportEventChange(); // will re-trasmit events to the view, causing a rerender } } - function destroyEvents() { - freezeContentHeight(); - currentView.clearEvents(); - unfreezeContentHeight(); - } - - function getAndRenderEvents() { - if (!options.lazyFetching || isFetchNeeded(currentView.start, currentView.end)) { - fetchAndRenderEvents(); - } - else { - renderEvents(); - } - } + /* Toolbars + -----------------------------------------------------------------------------*/ - function fetchAndRenderEvents() { - fetchEvents(currentView.start, currentView.end); - // ... will call reportEvents - // ... which will call renderEvents + function buildToolbars() { + return [ + new Toolbar(t, computeHeaderOptions()), + new Toolbar(t, computeFooterOptions()) + ]; } - - // called when event data arrives - function reportEvents(_events) { - events = _events; - renderEvents(); + + function computeHeaderOptions() { + return { + extraClasses: 'fc-header-toolbar', + layout: t.options.header + }; } - // called when a single event's data has been changed - function reportEventChange() { - renderEvents(); + function computeFooterOptions() { + return { + extraClasses: 'fc-footer-toolbar', + layout: t.options.footer + }; } - - /* Header Updating - -----------------------------------------------------------------------------*/ + // can be called repeatedly and Header will rerender + function renderHeader() { + header.setToolbarOptions(computeHeaderOptions()); + header.render(); + if (header.el) { + element.prepend(header.el); + } + } - function updateHeaderTitle() { - header.updateTitle(currentView.title); + // can be called repeatedly and Footer will rerender + function renderFooter() { + footer.setToolbarOptions(computeFooterOptions()); + footer.render(); + if (footer.el) { + element.append(footer.el); + } } - function updateTodayButton() { + t.setToolbarsTitle = function(title) { + toolbarsManager.proxyCall('updateTitle', title); + }; + + + function updateToolbarsTodayButton() { var now = t.getNow(); - if (now.isWithin(currentView.intervalStart, currentView.intervalEnd)) { - header.disableButton('today'); + if (now >= currentView.intervalStart && now < currentView.intervalEnd) { + toolbarsManager.proxyCall('disableButton', 'today'); } else { - header.enableButton('today'); + toolbarsManager.proxyCall('enableButton', 'today'); } } - + /* Selection -----------------------------------------------------------------------------*/ - + // this public method receives start/end dates in any format, with any timezone function select(zonedStartInput, zonedEndInput) { @@ -9833,56 +10826,56 @@ function Calendar_constructor(element, overrides) { t.buildSelectSpan.apply(t, arguments) ); } - + function unselect() { // safe to be called before renderView if (currentView) { currentView.unselect(); } } - - - + + + /* Date -----------------------------------------------------------------------------*/ - - + + function prev() { date = currentView.computePrevDate(date); renderView(); } - - + + function next() { date = currentView.computeNextDate(date); renderView(); } - - + + function prevYear() { date.add(-1, 'years'); renderView(); } - - + + function nextYear() { date.add(1, 'years'); renderView(); } - - + + function today() { date = t.getNow(); renderView(); } - - + + function gotoDate(zonedDateInput) { date = t.moment(zonedDateInput).stripZone(); renderView(); } - - + + function incrementDate(delta) { date.add(moment.duration(delta)); renderView(); @@ -9900,8 +10893,8 @@ function Calendar_constructor(element, overrides) { date = newDate.clone(); renderView(spec ? spec.type : null); } - - + + // for external API function getDate() { return t.applyTimezone(date); // infuse the calendar's timezone @@ -9911,76 +10904,203 @@ function Calendar_constructor(element, overrides) { /* Height "Freezing" -----------------------------------------------------------------------------*/ - // TODO: move this into the view + t.freezeContentHeight = freezeContentHeight; - t.unfreezeContentHeight = unfreezeContentHeight; + t.thawContentHeight = thawContentHeight; + + var freezeContentHeightDepth = 0; function freezeContentHeight() { - content.css({ - width: '100%', - height: content.height(), - overflow: 'hidden' - }); + if (!(freezeContentHeightDepth++)) { + content.css({ + width: '100%', + height: content.height(), + overflow: 'hidden' + }); + } } - function unfreezeContentHeight() { - content.css({ - width: '', - height: '', - overflow: '' - }); + function thawContentHeight() { + if (!(--freezeContentHeightDepth)) { + content.css({ + width: '', + height: '', + overflow: '' + }); + } } - - - + + + /* Misc -----------------------------------------------------------------------------*/ - + function getCalendar() { return t; } - + function getView() { return currentView; } - - + + function option(name, value) { - if (value === undefined) { - return options[name]; + var newOptionHash; + + if (typeof name === 'string') { + if (value === undefined) { // getter + return t.options[name]; + } + else { // setter for individual option + newOptionHash = {}; + newOptionHash[name] = value; + setOptions(newOptionHash); + } } - if (name == 'height' || name == 'contentHeight' || name == 'aspectRatio') { - options[name] = value; - updateSize(true); // true = allow recalculation of height + else if (typeof name === 'object') { // compound setter with object input + setOptions(name); } } - - - function trigger(name, thisObj) { // overrides the Emitter's trigger method :( + + + function setOptions(newOptionHash) { + var optionCnt = 0; + var optionName; + + for (optionName in newOptionHash) { + t.dynamicOverrides[optionName] = newOptionHash[optionName]; + } + + t.viewSpecCache = {}; // the dynamic override invalidates the options in this cache, so just clear it + t.populateOptionsHash(); // this.options needs to be recomputed after the dynamic override + + // trigger handlers after this.options has been updated + for (optionName in newOptionHash) { + t.triggerOptionHandlers(optionName); // recall bindOption/bindOptions + optionCnt++; + } + + // special-case handling of single option change. + // if only one option change, `optionName` will be its name. + if (optionCnt === 1) { + if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') { + updateSize(true); // true = allow recalculation of height + return; + } + else if (optionName === 'defaultDate') { + return; // can't change date this way. use gotoDate instead + } + else if (optionName === 'businessHours') { + if (currentView) { + currentView.unrenderBusinessHours(); + currentView.renderBusinessHours(); + } + return; + } + else if (optionName === 'timezone') { + t.rezoneArrayEventSources(); + t.refetchEvents(); + return; + } + } + + // catch-all. rerender the header and footer and rebuild/rerender the current view + renderHeader(); + renderFooter(); + viewsByType = {}; // even non-current views will be affected by this option change. do before rerender + reinitView(); + } + + + function publiclyTrigger(name, thisObj) { var args = Array.prototype.slice.call(arguments, 2); thisObj = thisObj || _element; this.triggerWith(name, thisObj, args); // Emitter's method - if (options[name]) { - return options[name].apply(thisObj, args); + if (t.options[name]) { + return t.options[name].apply(thisObj, args); } } t.initialize(); } +;; +/* +Options binding/triggering system. +*/ +Calendar.mixin({ + + // A map of option names to arrays of handler objects. Initialized to {} in Calendar. + // Format for a handler object: + // { + // func // callback function to be called upon change + // names // option names whose values should be given to func + // } + optionHandlers: null, + + // Calls handlerFunc immediately, and when the given option has changed. + // handlerFunc will be given the option value. + bindOption: function(optionName, handlerFunc) { + this.bindOptions([ optionName ], handlerFunc); + }, + + // Calls handlerFunc immediately, and when any of the given options change. + // handlerFunc will be given each option value as ordered function arguments. + bindOptions: function(optionNames, handlerFunc) { + var handlerObj = { func: handlerFunc, names: optionNames }; + var i; + + for (i = 0; i < optionNames.length; i++) { + this.registerOptionHandlerObj(optionNames[i], handlerObj); + } + + this.triggerOptionHandlerObj(handlerObj); + }, + + // Puts the given handler object into the internal hash + registerOptionHandlerObj: function(optionName, handlerObj) { + (this.optionHandlers[optionName] || (this.optionHandlers[optionName] = [])) + .push(handlerObj); + }, + + // Reports that the given option has changed, and calls all appropriate handlers. + triggerOptionHandlers: function(optionName) { + var handlerObjs = this.optionHandlers[optionName] || []; + var i; + + for (i = 0; i < handlerObjs.length; i++) { + this.triggerOptionHandlerObj(handlerObjs[i]); + } + }, + + // Calls the callback for a specific handler object, passing in the appropriate arguments. + triggerOptionHandlerObj: function(handlerObj) { + var optionNames = handlerObj.names; + var optionValues = []; + var i; + + for (i = 0; i < optionNames.length; i++) { + optionValues.push(this.options[optionNames[i]]); + } + + handlerObj.func.apply(this, optionValues); // maintain the Calendar's `this` context + } + +}); + ;; Calendar.defaults = { - titleRangeSeparator: ' \u2014 ', // emphasized dash - monthYearFormat: 'MMMM YYYY', // required for en. other languages rely on datepicker computable option + titleRangeSeparator: ' \u2013 ', // en dash + monthYearFormat: 'MMMM YYYY', // required for en. other locales rely on datepicker computable option defaultTimedEventDuration: '02:00:00', defaultAllDayEventDuration: { days: 1 }, @@ -10037,6 +11157,8 @@ Calendar.defaults = { prevYear: 'left-double-arrow', nextYear: 'right-double-arrow' }, + + allDayText: 'all-day', // jquery-ui theming theme: false, @@ -10058,6 +11180,7 @@ Calendar.defaults = { dropAccept: '*', eventOrder: 'title', + //eventRenderWait: null, eventLimit: false, eventLimitText: 'more', @@ -10065,14 +11188,14 @@ Calendar.defaults = { dayPopoverFormat: 'LL', handleWindowResize: true, - windowResizeDelay: 200, // milliseconds before an updateSize happens + windowResizeDelay: 100, // milliseconds before an updateSize happens longPressDelay: 1000 }; -Calendar.englishDefaults = { // used by lang.js +Calendar.englishDefaults = { // used by locale.js dayPopoverFormat: 'dddd, MMMM D' }; @@ -10099,19 +11222,18 @@ Calendar.rtlDefaults = { // right-to-left defaults ;; -var langOptionHash = FC.langs = {}; // initialize and expose +var localeOptionHash = FC.locales = {}; // initialize and expose -// TODO: document the structure and ordering of a FullCalendar lang file -// TODO: rename everything "lang" to "locale", like what the moment project did +// TODO: document the structure and ordering of a FullCalendar locale file // Initialize jQuery UI datepicker translations while using some of the translations -// Will set this as the default language for datepicker. -FC.datepickerLang = function(langCode, dpLangCode, dpOptions) { +// Will set this as the default locales for datepicker. +FC.datepickerLocale = function(localeCode, dpLocaleCode, dpOptions) { - // get the FullCalendar internal option hash for this language. create if necessary - var fcOptions = langOptionHash[langCode] || (langOptionHash[langCode] = {}); + // get the FullCalendar internal option hash for this locale. create if necessary + var fcOptions = localeOptionHash[localeCode] || (localeOptionHash[localeCode] = {}); // transfer some simple options from datepicker to fc fcOptions.isRTL = dpOptions.isRTL; @@ -10125,15 +11247,15 @@ FC.datepickerLang = function(langCode, dpLangCode, dpOptions) { // is jQuery UI Datepicker is on the page? if ($.datepicker) { - // Register the language data. - // FullCalendar and MomentJS use language codes like "pt-br" but Datepicker - // does it like "pt-BR" or if it doesn't have the language, maybe just "pt". - // Make an alias so the language can be referenced either way. - $.datepicker.regional[dpLangCode] = - $.datepicker.regional[langCode] = // alias + // Register the locale data. + // FullCalendar and MomentJS use locale codes like "pt-br" but Datepicker + // does it like "pt-BR" or if it doesn't have the locale, maybe just "pt". + // Make an alias so the locale can be referenced either way. + $.datepicker.regional[dpLocaleCode] = + $.datepicker.regional[localeCode] = // alias dpOptions; - // Alias 'en' to the default language data. Do this every time. + // Alias 'en' to the default locale data. Do this every time. $.datepicker.regional.en = $.datepicker.regional['']; // Set as Datepicker's global defaults. @@ -10142,410 +11264,160 @@ FC.datepickerLang = function(langCode, dpLangCode, dpOptions) { }; -// Sets FullCalendar-specific translations. Will set the language as the global default. -FC.lang = function(langCode, newFcOptions) { +// Sets FullCalendar-specific translations. Will set the locales as the global default. +FC.locale = function(localeCode, newFcOptions) { var fcOptions; var momOptions; - // get the FullCalendar internal option hash for this language. create if necessary - fcOptions = langOptionHash[langCode] || (langOptionHash[langCode] = {}); + // get the FullCalendar internal option hash for this locale. create if necessary + fcOptions = localeOptionHash[localeCode] || (localeOptionHash[localeCode] = {}); - // provided new options for this language? merge them in + // provided new options for this locales? merge them in if (newFcOptions) { - fcOptions = langOptionHash[langCode] = mergeOptions([ fcOptions, newFcOptions ]); + fcOptions = localeOptionHash[localeCode] = mergeOptions([ fcOptions, newFcOptions ]); } - // compute language options that weren't defined. + // compute locale options that weren't defined. // always do this. newFcOptions can be undefined when initializing from i18n file, // so no way to tell if this is an initialization or a default-setting. - momOptions = getMomentLocaleData(langCode); // will fall back to en + momOptions = getMomentLocaleData(localeCode); // will fall back to en $.each(momComputableOptions, function(name, func) { if (fcOptions[name] == null) { fcOptions[name] = func(momOptions, fcOptions); } }); - // set it as the default language for FullCalendar - Calendar.defaults.lang = langCode; + // set it as the default locale for FullCalendar + Calendar.defaults.locale = localeCode; }; -// NOTE: can't guarantee any of these computations will run because not every language has datepicker +// NOTE: can't guarantee any of these computations will run because not every locale has datepicker // configs, so make sure there are English fallbacks for these in the defaults file. var dpComputableOptions = { buttonText: function(dpOptions) { return { // the translations sometimes wrongly contain HTML entities - prev: stripHtmlEntities(dpOptions.prevText), - next: stripHtmlEntities(dpOptions.nextText), - today: stripHtmlEntities(dpOptions.currentText) - }; - }, - - // Produces format strings like "MMMM YYYY" -> "September 2014" - monthYearFormat: function(dpOptions) { - return dpOptions.showMonthAfterYear ? - 'YYYY[' + dpOptions.yearSuffix + '] MMMM' : - 'MMMM YYYY[' + dpOptions.yearSuffix + ']'; - } - -}; - -var momComputableOptions = { - - // Produces format strings like "ddd M/D" -> "Fri 9/15" - dayOfMonthFormat: function(momOptions, fcOptions) { - var format = momOptions.longDateFormat('l'); // for the format like "M/D/YYYY" - - // strip the year off the edge, as well as other misc non-whitespace chars - format = format.replace(/^Y+[^\w\s]*|[^\w\s]*Y+$/g, ''); - - if (fcOptions.isRTL) { - format += ' ddd'; // for RTL, add day-of-week to end - } - else { - format = 'ddd ' + format; // for LTR, add day-of-week to beginning - } - return format; - }, - - // Produces format strings like "h:mma" -> "6:00pm" - mediumTimeFormat: function(momOptions) { // can't be called `timeFormat` because collides with option - return momOptions.longDateFormat('LT') - .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand - }, - - // Produces format strings like "h(:mm)a" -> "6pm" / "6:30pm" - smallTimeFormat: function(momOptions) { - return momOptions.longDateFormat('LT') - .replace(':mm', '(:mm)') - .replace(/(\Wmm)$/, '($1)') // like above, but for foreign langs - .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand - }, - - // Produces format strings like "h(:mm)t" -> "6p" / "6:30p" - extraSmallTimeFormat: function(momOptions) { - return momOptions.longDateFormat('LT') - .replace(':mm', '(:mm)') - .replace(/(\Wmm)$/, '($1)') // like above, but for foreign langs - .replace(/\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand - }, - - // Produces format strings like "ha" / "H" -> "6pm" / "18" - hourFormat: function(momOptions) { - return momOptions.longDateFormat('LT') - .replace(':mm', '') - .replace(/(\Wmm)$/, '') // like above, but for foreign langs - .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand - }, - - // Produces format strings like "h:mm" -> "6:30" (with no AM/PM) - noMeridiemTimeFormat: function(momOptions) { - return momOptions.longDateFormat('LT') - .replace(/\s*a$/i, ''); // remove trailing AM/PM - } - -}; - - -// options that should be computed off live calendar options (considers override options) -// TODO: best place for this? related to lang? -// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it -var instanceComputableOptions = { - - // Produces format strings for results like "Mo 16" - smallDayDateFormat: function(options) { - return options.isRTL ? - 'D dd' : - 'dd D'; - }, - - // Produces format strings for results like "Wk 5" - weekFormat: function(options) { - return options.isRTL ? - 'w[ ' + options.weekNumberTitle + ']' : - '[' + options.weekNumberTitle + ' ]w'; - }, - - // Produces format strings for results like "Wk5" - smallWeekFormat: function(options) { - return options.isRTL ? - 'w[' + options.weekNumberTitle + ']' : - '[' + options.weekNumberTitle + ']w'; - } - -}; - -function populateInstanceComputableOptions(options) { - $.each(instanceComputableOptions, function(name, func) { - if (options[name] == null) { - options[name] = func(options); - } - }); -} - - -// Returns moment's internal locale data. If doesn't exist, returns English. -// Works with moment-pre-2.8 -function getMomentLocaleData(langCode) { - var func = moment.localeData || moment.langData; - return func.call(moment, langCode) || - func.call(moment, 'en'); // the newer localData could return null, so fall back to en -} - - -// Initialize English by forcing computation of moment-derived options. -// Also, sets it as the default. -FC.lang('en', Calendar.englishDefaults); - -;; - -/* Top toolbar area with buttons and title -----------------------------------------------------------------------------------------------------------------------*/ -// TODO: rename all header-related things to "toolbar" - -function Header(calendar, options) { - var t = this; - - // exports - t.render = render; - t.removeElement = removeElement; - t.updateTitle = updateTitle; - t.activateButton = activateButton; - t.deactivateButton = deactivateButton; - t.disableButton = disableButton; - t.enableButton = enableButton; - t.getViewsWithButtons = getViewsWithButtons; - - // locals - var el = $(); - var viewsWithButtons = []; - var tm; - - - function render() { - var sections = options.header; - - tm = options.theme ? 'ui' : 'fc'; - - if (sections) { - el = $("
    ") - .append(renderSection('left')) - .append(renderSection('right')) - .append(renderSection('center')) - .append('
    '); - - return el; - } - } - - - function removeElement() { - el.remove(); - el = $(); - } - - - function renderSection(position) { - var sectionEl = $('
    '); - var buttonStr = options.header[position]; - - if (buttonStr) { - $.each(buttonStr.split(' '), function(i) { - var groupChildren = $(); - var isOnlyButtons = true; - var groupEl; - - $.each(this.split(','), function(j, buttonName) { - var customButtonProps; - var viewSpec; - var buttonClick; - var overrideText; // text explicitly set by calendar's constructor options. overcomes icons - var defaultText; - var themeIcon; - var normalIcon; - var innerHtml; - var classes; - var button; // the element - - if (buttonName == 'title') { - groupChildren = groupChildren.add($('

     

    ')); // we always want it to take up height - isOnlyButtons = false; - } - else { - if ((customButtonProps = (calendar.options.customButtons || {})[buttonName])) { - buttonClick = function(ev) { - if (customButtonProps.click) { - customButtonProps.click.call(button[0], ev); - } - }; - overrideText = ''; // icons will override text - defaultText = customButtonProps.text; - } - else if ((viewSpec = calendar.getViewSpec(buttonName))) { - buttonClick = function() { - calendar.changeView(buttonName); - }; - viewsWithButtons.push(buttonName); - overrideText = viewSpec.buttonTextOverride; - defaultText = viewSpec.buttonTextDefault; - } - else if (calendar[buttonName]) { // a calendar method - buttonClick = function() { - calendar[buttonName](); - }; - overrideText = (calendar.overrides.buttonText || {})[buttonName]; - defaultText = options.buttonText[buttonName]; // everything else is considered default - } - - if (buttonClick) { + prev: stripHtmlEntities(dpOptions.prevText), + next: stripHtmlEntities(dpOptions.nextText), + today: stripHtmlEntities(dpOptions.currentText) + }; + }, - themeIcon = - customButtonProps ? - customButtonProps.themeIcon : - options.themeButtonIcons[buttonName]; + // Produces format strings like "MMMM YYYY" -> "September 2014" + monthYearFormat: function(dpOptions) { + return dpOptions.showMonthAfterYear ? + 'YYYY[' + dpOptions.yearSuffix + '] MMMM' : + 'MMMM YYYY[' + dpOptions.yearSuffix + ']'; + } - normalIcon = - customButtonProps ? - customButtonProps.icon : - options.buttonIcons[buttonName]; +}; - if (overrideText) { - innerHtml = htmlEscape(overrideText); - } - else if (themeIcon && options.theme) { - innerHtml = ""; - } - else if (normalIcon && !options.theme) { - innerHtml = ""; - } - else { - innerHtml = htmlEscape(defaultText); - } +var momComputableOptions = { - classes = [ - 'fc-' + buttonName + '-button', - tm + '-button', - tm + '-state-default' - ]; + // Produces format strings like "ddd M/D" -> "Fri 9/15" + dayOfMonthFormat: function(momOptions, fcOptions) { + var format = momOptions.longDateFormat('l'); // for the format like "M/D/YYYY" - button = $( // type="button" so that it doesn't submit a form - '' - ) - .click(function(ev) { - // don't process clicks for disabled buttons - if (!button.hasClass(tm + '-state-disabled')) { + // strip the year off the edge, as well as other misc non-whitespace chars + format = format.replace(/^Y+[^\w\s]*|[^\w\s]*Y+$/g, ''); - buttonClick(ev); + if (fcOptions.isRTL) { + format += ' ddd'; // for RTL, add day-of-week to end + } + else { + format = 'ddd ' + format; // for LTR, add day-of-week to beginning + } + return format; + }, - // after the click action, if the button becomes the "active" tab, or disabled, - // it should never have a hover class, so remove it now. - if ( - button.hasClass(tm + '-state-active') || - button.hasClass(tm + '-state-disabled') - ) { - button.removeClass(tm + '-state-hover'); - } - } - }) - .mousedown(function() { - // the *down* effect (mouse pressed in). - // only on buttons that are not the "active" tab, or disabled - button - .not('.' + tm + '-state-active') - .not('.' + tm + '-state-disabled') - .addClass(tm + '-state-down'); - }) - .mouseup(function() { - // undo the *down* effect - button.removeClass(tm + '-state-down'); - }) - .hover( - function() { - // the *hover* effect. - // only on buttons that are not the "active" tab, or disabled - button - .not('.' + tm + '-state-active') - .not('.' + tm + '-state-disabled') - .addClass(tm + '-state-hover'); - }, - function() { - // undo the *hover* effect - button - .removeClass(tm + '-state-hover') - .removeClass(tm + '-state-down'); // if mouseleave happens before mouseup - } - ); + // Produces format strings like "h:mma" -> "6:00pm" + mediumTimeFormat: function(momOptions) { // can't be called `timeFormat` because collides with option + return momOptions.longDateFormat('LT') + .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand + }, - groupChildren = groupChildren.add(button); - } - } - }); + // Produces format strings like "h(:mm)a" -> "6pm" / "6:30pm" + smallTimeFormat: function(momOptions) { + return momOptions.longDateFormat('LT') + .replace(':mm', '(:mm)') + .replace(/(\Wmm)$/, '($1)') // like above, but for foreign locales + .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand + }, - if (isOnlyButtons) { - groupChildren - .first().addClass(tm + '-corner-left').end() - .last().addClass(tm + '-corner-right').end(); - } + // Produces format strings like "h(:mm)t" -> "6p" / "6:30p" + extraSmallTimeFormat: function(momOptions) { + return momOptions.longDateFormat('LT') + .replace(':mm', '(:mm)') + .replace(/(\Wmm)$/, '($1)') // like above, but for foreign locales + .replace(/\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand + }, - if (groupChildren.length > 1) { - groupEl = $('
    '); - if (isOnlyButtons) { - groupEl.addClass('fc-button-group'); - } - groupEl.append(groupChildren); - sectionEl.append(groupEl); - } - else { - sectionEl.append(groupChildren); // 1 or 0 children - } - }); - } + // Produces format strings like "ha" / "H" -> "6pm" / "18" + hourFormat: function(momOptions) { + return momOptions.longDateFormat('LT') + .replace(':mm', '') + .replace(/(\Wmm)$/, '') // like above, but for foreign locales + .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand + }, - return sectionEl; - } - - - function updateTitle(text) { - el.find('h2').text(text); - } - - - function activateButton(buttonName) { - el.find('.fc-' + buttonName + '-button') - .addClass(tm + '-state-active'); - } - - - function deactivateButton(buttonName) { - el.find('.fc-' + buttonName + '-button') - .removeClass(tm + '-state-active'); - } - - - function disableButton(buttonName) { - el.find('.fc-' + buttonName + '-button') - .attr('disabled', 'disabled') - .addClass(tm + '-state-disabled'); - } - - - function enableButton(buttonName) { - el.find('.fc-' + buttonName + '-button') - .removeAttr('disabled') - .removeClass(tm + '-state-disabled'); + // Produces format strings like "h:mm" -> "6:30" (with no AM/PM) + noMeridiemTimeFormat: function(momOptions) { + return momOptions.longDateFormat('LT') + .replace(/\s*a$/i, ''); // remove trailing AM/PM } +}; - function getViewsWithButtons() { - return viewsWithButtons; + +// options that should be computed off live calendar options (considers override options) +// TODO: best place for this? related to locale? +// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it +var instanceComputableOptions = { + + // Produces format strings for results like "Mo 16" + smallDayDateFormat: function(options) { + return options.isRTL ? + 'D dd' : + 'dd D'; + }, + + // Produces format strings for results like "Wk 5" + weekFormat: function(options) { + return options.isRTL ? + 'w[ ' + options.weekNumberTitle + ']' : + '[' + options.weekNumberTitle + ' ]w'; + }, + + // Produces format strings for results like "Wk5" + smallWeekFormat: function(options) { + return options.isRTL ? + 'w[' + options.weekNumberTitle + ']' : + '[' + options.weekNumberTitle + ']w'; } +}; + +function populateInstanceComputableOptions(options) { + $.each(instanceComputableOptions, function(name, func) { + if (options[name] == null) { + options[name] = func(options); + } + }); +} + + +// Returns moment's internal locale data. If doesn't exist, returns English. +function getMomentLocaleData(localeCode) { + return moment.localeData(localeCode) || moment.localeData('en'); } + +// Initialize English by forcing computation of moment-derived options. +// Also, sets it as the default. +FC.locale('en', Calendar.englishDefaults); + ;; FC.sourceNormalizers = []; @@ -10559,39 +11431,45 @@ var ajaxDefaults = { var eventGUID = 1; -function EventManager(options) { // assumed to be a calendar +function EventManager() { // assumed to be a calendar var t = this; - - + + // exports + t.requestEvents = requestEvents; + t.reportEventChange = reportEventChange; t.isFetchNeeded = isFetchNeeded; t.fetchEvents = fetchEvents; + t.fetchEventSources = fetchEventSources; + t.refetchEvents = refetchEvents; + t.refetchEventSources = refetchEventSources; + t.getEventSources = getEventSources; + t.getEventSourceById = getEventSourceById; t.addEventSource = addEventSource; t.removeEventSource = removeEventSource; + t.removeEventSources = removeEventSources; t.updateEvent = updateEvent; + t.updateEvents = updateEvents; t.renderEvent = renderEvent; + t.renderEvents = renderEvents; t.removeEvents = removeEvents; t.clientEvents = clientEvents; t.mutateEvent = mutateEvent; t.normalizeEventDates = normalizeEventDates; t.normalizeEventTimes = normalizeEventTimes; - - - // imports - var reportEvents = t.reportEvents; - - + + // locals var stickySource = { events: [] }; var sources = [ stickySource ]; var rangeStart, rangeEnd; - var currentFetchID = 0; - var pendingSourceCnt = 0; + var pendingSourceCnt = 0; // outstanding fetch requests, max one per source var cache = []; // holds events that have already been expanded + var prunedCache; // like cache, but only events that intersect with rangeStart/rangeEnd $.each( - (options.events ? [ options.events ] : []).concat(options.eventSources || []), + (t.options.events ? [ t.options.events ] : []).concat(t.options.eventSources || []), function(i, sourceInput) { var source = buildEventSource(sourceInput); if (source) { @@ -10599,9 +11477,55 @@ function EventManager(options) { // assumed to be a calendar } } ); - - - + + + + function requestEvents(start, end) { + if (!t.options.lazyFetching || isFetchNeeded(start, end)) { + return fetchEvents(start, end); + } + else { + return Promise.resolve(prunedCache); + } + } + + + function reportEventChange() { + prunedCache = filterEventsWithinRange(cache); + t.trigger('eventsReset', prunedCache); + } + + + function filterEventsWithinRange(events) { + var filteredEvents = []; + var i, event; + + for (i = 0; i < events.length; i++) { + event = events[i]; + + if ( + event.start.clone().stripZone() < rangeEnd && + t.getEventEnd(event).stripZone() > rangeStart + ) { + filteredEvents.push(event); + } + } + + return filteredEvents; + } + + + t.getEventCache = function() { + return cache; + }; + + + t.getPrunedEventCache = function() { + return prunedCache; + }; + + + /* Fetching -----------------------------------------------------------------------------*/ @@ -10611,28 +11535,83 @@ function EventManager(options) { // assumed to be a calendar return !rangeStart || // nothing has been fetched yet? start < rangeStart || end > rangeEnd; // is part of the new range outside of the old range? } - - + + function fetchEvents(start, end) { rangeStart = start; rangeEnd = end; - cache = []; - var fetchID = ++currentFetchID; - var len = sources.length; - pendingSourceCnt = len; - for (var i=0; i= eventStart && innerSpan.end <= eventEnd; +}; - if (eventInput) { - // if a whole-day series is requested, clear the start/end times - if (wholeDay) { - eventInput.start = null; - eventInput.end = null; - } +// Returns a list of events that the given event should be compared against when being considered for a move to +// the specified span. Attached to the Calendar's prototype because EventManager is a mixin for a Calendar. +Calendar.prototype.getPeerEvents = function(span, event) { + var cache = this.getEventCache(); + var peerEvents = []; + var i, otherEvent; - return expandEvent( - buildEventFromInput(eventInput), - view.start, - view.end - ); + for (i = 0; i < cache.length; i++) { + otherEvent = cache[i]; + if ( + !event || + event._id !== otherEvent._id // don't compare the event to itself or other related [repeating] events + ) { + peerEvents.push(otherEvent); } - - return []; } + return peerEvents; +}; - /* Overlapping / Constraining - -----------------------------------------------------------------------------------------*/ - t.isEventSpanAllowed = isEventSpanAllowed; - t.isExternalSpanAllowed = isExternalSpanAllowed; - t.isSelectionSpanAllowed = isSelectionSpanAllowed; +// updates the "backup" properties, which are preserved in order to compute diffs later on. +function backupEventDates(event) { + event._allDay = event.allDay; + event._start = event.start.clone(); + event._end = event.end ? event.end.clone() : null; +} - // Determines if the given event can be relocated to the given span (unzoned start/end with other misc data) - function isEventSpanAllowed(span, event) { - var source = event.source || {}; - var constraint = firstDefined( - event.constraint, - source.constraint, - options.eventConstraint - ); - var overlap = firstDefined( - event.overlap, - source.overlap, - options.eventOverlap - ); - return isSpanAllowed(span, constraint, overlap, event); - } +/* Overlapping / Constraining +-----------------------------------------------------------------------------------------*/ - // Determines if an external event can be relocated to the given span (unzoned start/end with other misc data) - function isExternalSpanAllowed(eventSpan, eventLocation, eventProps) { - var eventInput; - var event; +// Determines if the given event can be relocated to the given span (unzoned start/end with other misc data) +Calendar.prototype.isEventSpanAllowed = function(span, event) { + var source = event.source || {}; - // note: very similar logic is in View's reportExternalDrop - if (eventProps) { - eventInput = $.extend({}, eventProps, eventLocation); - event = expandEvent(buildEventFromInput(eventInput))[0]; - } + var constraint = firstDefined( + event.constraint, + source.constraint, + this.options.eventConstraint + ); - if (event) { - return isEventSpanAllowed(eventSpan, event); - } - else { // treat it as a selection + var overlap = firstDefined( + event.overlap, + source.overlap, + this.options.eventOverlap + ); - return isSelectionSpanAllowed(eventSpan); - } + return this.isSpanAllowed(span, constraint, overlap, event) && + (!this.options.eventAllow || this.options.eventAllow(span, event) !== false); +}; + + +// Determines if an external event can be relocated to the given span (unzoned start/end with other misc data) +Calendar.prototype.isExternalSpanAllowed = function(eventSpan, eventLocation, eventProps) { + var eventInput; + var event; + + // note: very similar logic is in View's reportExternalDrop + if (eventProps) { + eventInput = $.extend({}, eventProps, eventLocation); + event = this.expandEvent( + this.buildEventFromInput(eventInput) + )[0]; } + if (event) { + return this.isEventSpanAllowed(eventSpan, event); + } + else { // treat it as a selection - // Determines the given span (unzoned start/end with other misc data) can be selected. - function isSelectionSpanAllowed(span) { - return isSpanAllowed(span, options.selectConstraint, options.selectOverlap); + return this.isSelectionSpanAllowed(eventSpan); } +}; + + +// Determines the given span (unzoned start/end with other misc data) can be selected. +Calendar.prototype.isSelectionSpanAllowed = function(span) { + return this.isSpanAllowed(span, this.options.selectConstraint, this.options.selectOverlap) && + (!this.options.selectAllow || this.options.selectAllow(span) !== false); +}; - // Returns true if the given span (caused by an event drop/resize or a selection) is allowed to exist - // according to the constraint/overlap settings. - // `event` is not required if checking a selection. - function isSpanAllowed(span, constraint, overlap, event) { - var constraintEvents; - var anyContainment; - var peerEvents; - var i, peerEvent; - var peerOverlap; +// Returns true if the given span (caused by an event drop/resize or a selection) is allowed to exist +// according to the constraint/overlap settings. +// `event` is not required if checking a selection. +Calendar.prototype.isSpanAllowed = function(span, constraint, overlap, event) { + var constraintEvents; + var anyContainment; + var peerEvents; + var i, peerEvent; + var peerOverlap; - // the range must be fully contained by at least one of produced constraint events - if (constraint != null) { + // the range must be fully contained by at least one of produced constraint events + if (constraint != null) { - // not treated as an event! intermediate data structure - // TODO: use ranges in the future - constraintEvents = constraintToEvents(constraint); + // not treated as an event! intermediate data structure + // TODO: use ranges in the future + constraintEvents = this.constraintToEvents(constraint); + if (constraintEvents) { // not invalid anyContainment = false; for (i = 0; i < constraintEvents.length; i++) { - if (eventContainsRange(constraintEvents[i], span)) { + if (this.spanContainsSpan(constraintEvents[i], span)) { anyContainment = true; break; } @@ -11514,126 +12681,150 @@ function EventManager(options) { // assumed to be a calendar return false; } } + } - peerEvents = t.getPeerEvents(span, event); + peerEvents = this.getPeerEvents(span, event); - for (i = 0; i < peerEvents.length; i++) { - peerEvent = peerEvents[i]; + for (i = 0; i < peerEvents.length; i++) { + peerEvent = peerEvents[i]; - // there needs to be an actual intersection before disallowing anything - if (eventIntersectsRange(peerEvent, span)) { + // there needs to be an actual intersection before disallowing anything + if (this.eventIntersectsRange(peerEvent, span)) { - // evaluate overlap for the given range and short-circuit if necessary - if (overlap === false) { - return false; - } - // if the event's overlap is a test function, pass the peer event in question as the first param - else if (typeof overlap === 'function' && !overlap(peerEvent, event)) { - return false; - } + // evaluate overlap for the given range and short-circuit if necessary + if (overlap === false) { + return false; + } + // if the event's overlap is a test function, pass the peer event in question as the first param + else if (typeof overlap === 'function' && !overlap(peerEvent, event)) { + return false; + } - // if we are computing if the given range is allowable for an event, consider the other event's - // EventObject-specific or Source-specific `overlap` property - if (event) { - peerOverlap = firstDefined( - peerEvent.overlap, - (peerEvent.source || {}).overlap - // we already considered the global `eventOverlap` - ); - if (peerOverlap === false) { - return false; - } - // if the peer event's overlap is a test function, pass the subject event as the first param - if (typeof peerOverlap === 'function' && !peerOverlap(event, peerEvent)) { - return false; - } + // if we are computing if the given range is allowable for an event, consider the other event's + // EventObject-specific or Source-specific `overlap` property + if (event) { + peerOverlap = firstDefined( + peerEvent.overlap, + (peerEvent.source || {}).overlap + // we already considered the global `eventOverlap` + ); + if (peerOverlap === false) { + return false; + } + // if the peer event's overlap is a test function, pass the subject event as the first param + if (typeof peerOverlap === 'function' && !peerOverlap(event, peerEvent)) { + return false; } } } - - return true; } + return true; +}; + - // Given an event input from the API, produces an array of event objects. Possible event inputs: - // 'businessHours' - // An event ID (number or string) - // An object with specific start/end dates or a recurring event (like what businessHours accepts) - function constraintToEvents(constraintInput) { +// Given an event input from the API, produces an array of event objects. Possible event inputs: +// 'businessHours' +// An event ID (number or string) +// An object with specific start/end dates or a recurring event (like what businessHours accepts) +Calendar.prototype.constraintToEvents = function(constraintInput) { - if (constraintInput === 'businessHours') { - return getBusinessHoursEvents(); - } + if (constraintInput === 'businessHours') { + return this.getCurrentBusinessHourEvents(); + } - if (typeof constraintInput === 'object') { - return expandEvent(buildEventFromInput(constraintInput)); + if (typeof constraintInput === 'object') { + if (constraintInput.start != null) { // needs to be event-like input + return this.expandEvent(this.buildEventFromInput(constraintInput)); + } + else { + return null; // invalid } - - return clientEvents(constraintInput); // probably an ID } + return this.clientEvents(constraintInput); // probably an ID +}; - // Does the event's date range fully contain the given range? - // start/end already assumed to have stripped zones :( - function eventContainsRange(event, range) { - var eventStart = event.start.clone().stripZone(); - var eventEnd = t.getEventEnd(event).stripZone(); - return range.start >= eventStart && range.end <= eventEnd; - } +// Does the event's date range intersect with the given range? +// start/end already assumed to have stripped zones :( +Calendar.prototype.eventIntersectsRange = function(event, range) { + var eventStart = event.start.clone().stripZone(); + var eventEnd = this.getEventEnd(event).stripZone(); + return range.start < eventEnd && range.end > eventStart; +}; - // Does the event's date range intersect with the given range? - // start/end already assumed to have stripped zones :( - function eventIntersectsRange(event, range) { - var eventStart = event.start.clone().stripZone(); - var eventEnd = t.getEventEnd(event).stripZone(); - return range.start < eventEnd && range.end > eventStart; - } +/* Business Hours +-----------------------------------------------------------------------------------------*/ +var BUSINESS_HOUR_EVENT_DEFAULTS = { + id: '_fcBusinessHours', // will relate events from different calls to expandEvent + start: '09:00', + end: '17:00', + dow: [ 1, 2, 3, 4, 5 ], // monday - friday + rendering: 'inverse-background' + // classNames are defined in businessHoursSegClasses +}; - t.getEventCache = function() { - return cache; - }; +// Return events objects for business hours within the current view. +// Abuse of our event system :( +Calendar.prototype.getCurrentBusinessHourEvents = function(wholeDay) { + return this.computeBusinessHourEvents(wholeDay, this.options.businessHours); +}; -} +// Given a raw input value from options, return events objects for business hours within the current view. +Calendar.prototype.computeBusinessHourEvents = function(wholeDay, input) { + if (input === true) { + return this.expandBusinessHourEvents(wholeDay, [ {} ]); + } + else if ($.isPlainObject(input)) { + return this.expandBusinessHourEvents(wholeDay, [ input ]); + } + else if ($.isArray(input)) { + return this.expandBusinessHourEvents(wholeDay, input, true); + } + else { + return []; + } +}; +// inputs expected to be an array of objects. +// if ignoreNoDow is true, will ignore entries that don't specify a day-of-week (dow) key. +Calendar.prototype.expandBusinessHourEvents = function(wholeDay, inputs, ignoreNoDow) { + var view = this.getView(); + var events = []; + var i, input; -// hook for external libs to manipulate event properties upon creation. -// should manipulate the event in-place. -Calendar.prototype.normalizeEvent = function(event) { -}; + for (i = 0; i < inputs.length; i++) { + input = inputs[i]; + if (ignoreNoDow && !input.dow) { + continue; + } -// Returns a list of events that the given event should be compared against when being considered for a move to -// the specified span. Attached to the Calendar's prototype because EventManager is a mixin for a Calendar. -Calendar.prototype.getPeerEvents = function(span, event) { - var cache = this.getEventCache(); - var peerEvents = []; - var i, otherEvent; + // give defaults. will make a copy + input = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, input); - for (i = 0; i < cache.length; i++) { - otherEvent = cache[i]; - if ( - !event || - event._id !== otherEvent._id // don't compare the event to itself or other related [repeating] events - ) { - peerEvents.push(otherEvent); + // if a whole-day series is requested, clear the start/end times + if (wholeDay) { + input.start = null; + input.end = null; } + + events.push.apply(events, // append + this.expandEvent( + this.buildEventFromInput(input), + view.start, + view.end + ) + ); } - return peerEvents; + return events; }; - -// updates the "backup" properties, which are preserved in order to compute diffs later on. -function backupEventDates(event) { - event._allDay = event.allDay; - event._start = event.start.clone(); - event._end = event.end ? event.end.clone() : null; -} - ;; /* An abstract class for the "basic" views, as well as month view. Renders one or more rows of day cells. @@ -11649,7 +12840,8 @@ var BasicView = FC.BasicView = View.extend({ dayGrid: null, // the main subcomponent that does most of the heavy lifting dayNumbersVisible: false, // display day numbers on each day cell? - weekNumbersVisible: false, // display week numbers along the side? + colWeekNumbersVisible: false, // display week numbers along the side? + cellWeekNumbersVisible: false, // display week numbers in day cell? weekNumberWidth: null, // width of all the week-number cells running down the side @@ -11710,8 +12902,18 @@ var BasicView = FC.BasicView = View.extend({ renderDates: function() { this.dayNumbersVisible = this.dayGrid.rowCnt > 1; // TODO: make grid responsible - this.weekNumbersVisible = this.opt('weekNumbers'); - this.dayGrid.numbersVisible = this.dayNumbersVisible || this.weekNumbersVisible; + if (this.opt('weekNumbers')) { + if (this.opt('weekNumbersWithinDays')) { + this.cellWeekNumbersVisible = true; + this.colWeekNumbersVisible = false; + } + else { + this.cellWeekNumbersVisible = false; + this.colWeekNumbersVisible = true; + }; + } + this.dayGrid.numbersVisible = this.dayNumbersVisible || + this.cellWeekNumbersVisible || this.colWeekNumbersVisible; this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml()); this.renderHead(); @@ -11749,6 +12951,11 @@ var BasicView = FC.BasicView = View.extend({ }, + unrenderBusinessHours: function() { + this.dayGrid.unrenderBusinessHours(); + }, + + // Builds the HTML skeleton for the view. // The day-grid component will render inside of a container defined by this HTML. renderSkeletonHtml: function() { @@ -11790,7 +12997,7 @@ var BasicView = FC.BasicView = View.extend({ // Refreshes the horizontal dimensions of the view updateWidth: function() { - if (this.weekNumbersVisible) { + if (this.colWeekNumbersVisible) { // Make sure all week number cells running down the side have the same width. // Record the width for cells created later. this.weekNumberWidth = matchCellWidths( @@ -11869,13 +13076,18 @@ var BasicView = FC.BasicView = View.extend({ ------------------------------------------------------------------------------------------------------------------*/ + computeInitialScroll: function() { + return { top: 0 }; + }, + + queryScroll: function() { - return this.scroller.getScrollTop(); + return { top: this.scroller.getScrollTop() }; }, - setScroll: function(top) { - this.scroller.setScrollTop(top); + setScroll: function(scroll) { + this.scroller.setScrollTop(scroll.top); }, @@ -11931,9 +13143,8 @@ var BasicView = FC.BasicView = View.extend({ unrenderEvents: function() { this.dayGrid.unrenderEvents(); - // we DON'T need to call updateHeight() because: - // A) a renderEvents() call always happens after this, which will eventually call updateHeight() - // B) in IE8, this causes a flash whenever events are rerendered + // we DON'T need to call updateHeight() because + // a renderEvents() call always happens after this, which will eventually call updateHeight() }, @@ -11978,7 +13189,7 @@ var basicDayGridMethods = { renderHeadIntroHtml: function() { var view = this.view; - if (view.weekNumbersVisible) { + if (view.colWeekNumbersVisible) { return '' + '' + '' + // needed for matchCellWidths @@ -11994,13 +13205,15 @@ var basicDayGridMethods = { // Generates the HTML that will go before content-skeleton cells that display the day/week numbers renderNumberIntroHtml: function(row) { var view = this.view; + var weekStart = this.getCellDate(row, 0); - if (view.weekNumbersVisible) { + if (view.colWeekNumbersVisible) { return '' + '' + - '' + // needed for matchCellWidths - this.getCellDate(row, 0).format('w') + - '' + + view.buildGotoAnchorHtml( // aside from link, important for matchCellWidths + { date: weekStart, type: 'week', forceOff: this.colCnt === 1 }, + weekStart.format('w') // inner HTML + ) + ''; } @@ -12012,7 +13225,7 @@ var basicDayGridMethods = { renderBgIntroHtml: function() { var view = this.view; - if (view.weekNumbersVisible) { + if (view.colWeekNumbersVisible) { return ''; } @@ -12026,7 +13239,7 @@ var basicDayGridMethods = { renderIntroHtml: function() { var view = this.view; - if (view.weekNumbersVisible) { + if (view.colWeekNumbersVisible) { return ''; } @@ -12060,8 +13273,6 @@ var MonthView = FC.MonthView = BasicView.extend({ // Overrides the default BasicView behavior to have special multi-week auto-height logic setGridHeight: function(height, isAuto) { - isAuto = isAuto || this.opt('weekMode') === 'variable'; // LEGACY: weekMode is deprecated - // if auto, make the height of each row the height that it would be if there were 6 weeks if (isAuto) { height *= this.rowCnt / 6; @@ -12072,11 +13283,6 @@ var MonthView = FC.MonthView = BasicView.extend({ isFixedWeeks: function() { - var weekMode = this.opt('weekMode'); // LEGACY: weekMode is deprecated - if (weekMode) { - return weekMode === 'fixed'; // if any other type of weekMode, assume NOT fixed - } - return this.opt('fixedWeekCount'); } @@ -12398,17 +13604,17 @@ var AgendaView = FC.AgendaView = View.extend({ top++; // to overcome top border that slots beyond the first have. looks better } - return top; + return { top: top }; }, queryScroll: function() { - return this.scroller.getScrollTop(); + return { top: this.scroller.getScrollTop() }; }, - setScroll: function(top) { - this.scroller.setScrollTop(top); + setScroll: function(scroll) { + this.scroller.setScrollTop(scroll.top); }, @@ -12506,9 +13712,8 @@ var AgendaView = FC.AgendaView = View.extend({ this.dayGrid.unrenderEvents(); } - // we DON'T need to call updateHeight() because: - // A) a renderEvents() call always happens after this, which will eventually call updateHeight() - // B) in IE8, this causes a flash whenever events are rerendered + // we DON'T need to call updateHeight() because + // a renderEvents() call always happens after this, which will eventually call updateHeight() }, @@ -12576,9 +13781,10 @@ var agendaTimeGridMethods = { return '' + '' + - '' + // needed for matchCellWidths - htmlEscape(weekText) + - '' + + view.buildGotoAnchorHtml( // aside from link, important for matchCellWidths + { date: this.start, type: 'week', forceOff: this.colCnt > 1 }, + htmlEscape(weekText) // inner HTML + ) + ''; } else { @@ -12617,7 +13823,7 @@ var agendaDayGridMethods = { return '' + '' + '' + // needed for matchCellWidths - (view.opt('allDayHtml') || htmlEscape(view.opt('allDayText'))) + + view.getAllDayHtml() + '' + ''; }, @@ -12651,7 +13857,6 @@ fcViews.agenda = { 'class': AgendaView, defaults: { allDaySlot: true, - allDayText: 'all-day', slotDuration: '00:30:00', minTime: '00:00:00', maxTime: '24:00:00', @@ -12670,5 +13875,332 @@ fcViews.agendaWeek = { }; ;; +/* +Responsible for the scroller, and forwarding event-related actions into the "grid" +*/ +var ListView = View.extend({ + + grid: null, + scroller: null, + + initialize: function() { + this.grid = new ListViewGrid(this); + this.scroller = new Scroller({ + overflowX: 'hidden', + overflowY: 'auto' + }); + }, + + setRange: function(range) { + View.prototype.setRange.call(this, range); // super + + this.grid.setRange(range); // needs to process range-related options + }, + + renderSkeleton: function() { + this.el.addClass( + 'fc-list-view ' + + this.widgetContentClass + ); + + this.scroller.render(); + this.scroller.el.appendTo(this.el); + + this.grid.setElement(this.scroller.scrollEl); + }, + + unrenderSkeleton: function() { + this.scroller.destroy(); // will remove the Grid too + }, + + setHeight: function(totalHeight, isAuto) { + this.scroller.setHeight(this.computeScrollerHeight(totalHeight)); + }, + + computeScrollerHeight: function(totalHeight) { + return totalHeight - + subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller + }, + + renderEvents: function(events) { + this.grid.renderEvents(events); + }, + + unrenderEvents: function() { + this.grid.unrenderEvents(); + }, + + isEventResizable: function(event) { + return false; + }, + + isEventDraggable: function(event) { + return false; + } + +}); + +/* +Responsible for event rendering and user-interaction. +Its "el" is the inner-content of the above view's scroller. +*/ +var ListViewGrid = Grid.extend({ + + segSelector: '.fc-list-item', // which elements accept event actions + hasDayInteractions: false, // no day selection or day clicking + + // slices by day + spanToSegs: function(span) { + var view = this.view; + var dayStart = view.start.clone().time(0); // timed, so segs get times! + var dayIndex = 0; + var seg; + var segs = []; + + while (dayStart < view.end) { + + seg = intersectRanges(span, { + start: dayStart, + end: dayStart.clone().add(1, 'day') + }); + + if (seg) { + seg.dayIndex = dayIndex; + segs.push(seg); + } + + dayStart.add(1, 'day'); + dayIndex++; + + // detect when span won't go fully into the next day, + // and mutate the latest seg to the be the end. + if ( + seg && !seg.isEnd && span.end.hasTime() && + span.end < dayStart.clone().add(this.view.nextDayThreshold) + ) { + seg.end = span.end.clone(); + seg.isEnd = true; + break; + } + } + + return segs; + }, + + // like "4:00am" + computeEventTimeFormat: function() { + return this.view.opt('mediumTimeFormat'); + }, + + // for events with a url, the whole should be clickable, + // but it's impossible to wrap with an tag. simulate this. + handleSegClick: function(seg, ev) { + var url; + + Grid.prototype.handleSegClick.apply(this, arguments); // super. might prevent the default action + + // not clicking on or within an with an href + if (!$(ev.target).closest('a[href]').length) { + url = seg.event.url; + if (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler + window.location.href = url; // simulate link click + } + } + }, + + // returns list of foreground segs that were actually rendered + renderFgSegs: function(segs) { + segs = this.renderFgSegEls(segs); // might filter away hidden events + + if (!segs.length) { + this.renderEmptyMessage(); + } + else { + this.renderSegList(segs); + } + + return segs; + }, + + renderEmptyMessage: function() { + this.el.html( + '
    ' + // TODO: try less wraps + '
    ' + + '
    ' + + htmlEscape(this.view.opt('noEventsMessage')) + + '
    ' + + '
    ' + + '
    ' + ); + }, + + // render the event segments in the view + renderSegList: function(allSegs) { + var segsByDay = this.groupSegsByDay(allSegs); // sparse array + var dayIndex; + var daySegs; + var i; + var tableEl = $('
    '); + var tbodyEl = tableEl.find('tbody'); + + for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) { + daySegs = segsByDay[dayIndex]; + if (daySegs) { // sparse array, so might be undefined + + // append a day header + tbodyEl.append(this.dayHeaderHtml( + this.view.start.clone().add(dayIndex, 'days') + )); + + this.sortEventSegs(daySegs); + + for (i = 0; i < daySegs.length; i++) { + tbodyEl.append(daySegs[i].el); // append event row + } + } + } + + this.el.empty().append(tableEl); + }, + + // Returns a sparse array of arrays, segs grouped by their dayIndex + groupSegsByDay: function(segs) { + var segsByDay = []; // sparse array + var i, seg; + + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = [])) + .push(seg); + } + + return segsByDay; + }, + + // generates the HTML for the day headers that live amongst the event rows + dayHeaderHtml: function(dayDate) { + var view = this.view; + var mainFormat = view.opt('listDayFormat'); + var altFormat = view.opt('listDayAltFormat'); + + return '' + + '' + + (mainFormat ? + view.buildGotoAnchorHtml( + dayDate, + { 'class': 'fc-list-heading-main' }, + htmlEscape(dayDate.format(mainFormat)) // inner HTML + ) : + '') + + (altFormat ? + view.buildGotoAnchorHtml( + dayDate, + { 'class': 'fc-list-heading-alt' }, + htmlEscape(dayDate.format(altFormat)) // inner HTML + ) : + '') + + '' + + ''; + }, + + // generates the HTML for a single event row + fgSegHtml: function(seg) { + var view = this.view; + var classes = [ 'fc-list-item' ].concat(this.getSegCustomClasses(seg)); + var bgColor = this.getSegBackgroundColor(seg); + var event = seg.event; + var url = event.url; + var timeHtml; + + if (event.allDay) { + timeHtml = view.getAllDayHtml(); + } + else if (view.isMultiDayEvent(event)) { // if the event appears to span more than one day + if (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day + timeHtml = htmlEscape(this.getEventTimeText(seg)); + } + else { // inner segment that lasts the whole day + timeHtml = view.getAllDayHtml(); + } + } + else { + // Display the normal time text for the *event's* times + timeHtml = htmlEscape(this.getEventTimeText(event)); + } + + if (url) { + classes.push('fc-has-url'); + } + + return '' + + (this.displayEventTime ? + '' + + (timeHtml || '') + + '' : + '') + + '' + + '' + + '' + + '' + + '' + + htmlEscape(seg.event.title || '') + + '
    ' + + '' + + ''; + } + +}); + +;; + +fcViews.list = { + 'class': ListView, + buttonTextKey: 'list', // what to lookup in locale files + defaults: { + buttonText: 'list', // text to display for English + listDayFormat: 'LL', // like "January 1, 2016" + noEventsMessage: 'No events to display' + } +}; + +fcViews.listDay = { + type: 'list', + duration: { days: 1 }, + defaults: { + listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header + } +}; + +fcViews.listWeek = { + type: 'list', + duration: { weeks: 1 }, + defaults: { + listDayFormat: 'dddd', // day-of-week is more important + listDayAltFormat: 'LL' + } +}; + +fcViews.listMonth = { + type: 'list', + duration: { month: 1 }, + defaults: { + listDayAltFormat: 'dddd' // day-of-week is nice-to-have + } +}; + +fcViews.listYear = { + type: 'list', + duration: { year: 1 }, + defaults: { + listDayAltFormat: 'dddd' // day-of-week is nice-to-have + } +}; + +;; + return FC; // export for Node/CommonJS }); \ No newline at end of file diff --git a/vendors/fullcalendar/dist/fullcalendar.min.css b/vendors/fullcalendar/dist/fullcalendar.min.css index 3a251eb19bf5bf6d7fd59a4692dc2418c3f68bc7..1339120b42ad800eb4aeef06a2edca7d5be921ff 100644 --- a/vendors/fullcalendar/dist/fullcalendar.min.css +++ b/vendors/fullcalendar/dist/fullcalendar.min.css @@ -1,5 +1,5 @@ /*! - * FullCalendar v2.7.3 Stylesheet + * FullCalendar v3.1.0 Stylesheet * Docs & License: http://fullcalendar.io/ * (c) 2016 Adam Shaw - */.fc-bgevent,.fc-highlight{opacity:.3;filter:alpha(opacity=30)}.fc-icon,body .fc{font-size:1em}.fc-button-group,.fc-icon{display:inline-block}.fc-bg,.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-icon,.fc-unselectable{-khtml-user-select:none;-webkit-touch-callout:none}.fc .fc-axis,.fc button,.fc-time-grid-event .fc-time,.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}.fc th,.fc-basic-view .fc-week-number,.fc-icon,.fc-toolbar{text-align:center}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed .fc-today{background:#fcf8e3}.fc-highlight{background:#bce8f1}.fc-bgevent{background:#8fdf82}.fc-nonbusiness{background:#d7d7d7}.fc-icon{height:1em;line-height:1em;overflow:hidden;font-family:"Courier New",Courier,monospace;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\02039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\0203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\000AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\000BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\000D7";font-size:200%;top:6%}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid;background-color:#f5f5f5;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-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{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}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);box-shadow:none}.fc-event.fc-draggable,.fc-event[href],.fc-popover .fc-header .fc-close{cursor:pointer}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-bg table,.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc table{width:100%;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent;border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-row.fc-rigid,.fc-time-grid-event{overflow:hidden}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad;background-color:#3a87ad;font-weight:400}.fc-event,.fc-event:hover,.ui-widget .fc-event{color:#fff;text-decoration:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25;filter:alpha(opacity=25)}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4;display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25;filter:alpha(opacity=25)}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.fc-toolbar{margin-bottom:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-top:1px;padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:0 2px}.fc-basic-view td.fc-day-number,.fc-basic-view td.fc-week-number span{padding-top:2px;padding-bottom:2px}.fc-basic-view .fc-week-number span{display:inline-block;min-width:1.25em}.fc-ltr .fc-basic-view .fc-day-number{text-align:right}.fc-rtl .fc-basic-view .fc-day-number{text-align:left}.fc-day-number.fc-other-month{opacity:.3;filter:alpha(opacity=30)}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-top:1px;padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3;position:relative}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\000A0-\000A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent} \ No newline at end of file + */.fc-icon,body .fc{font-size:1em}.fc-button-group,.fc-icon{display:inline-block}.fc-bg,.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-icon,.fc-unselectable{-khtml-user-select:none;-webkit-touch-callout:none}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}.fc th,.fc-basic-view td.fc-week-number,.fc-icon,.fc-toolbar{text-align:center}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc-icon{height:1em;line-height:1em;overflow:hidden;font-family:"Courier New",Courier,monospace;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\02039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\0203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\000AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\000BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\000D7";font-size:200%;top:6%}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid;background-color:#f5f5f5;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-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{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}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-event.fc-draggable,.fc-event[href],.fc-popover .fc-header .fc-close,a[data-goto]{cursor:pointer}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-bg table,.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}a[data-goto]:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent;border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-row.fc-rigid,.fc-time-grid-event{overflow:hidden}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad;font-weight:400}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover,.ui-widget .fc-event{color:#fff;text-decoration:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4;display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3;position:relative}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\000A0-\000A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt,.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item:hover td{background-color:#f5f5f5}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee} \ No newline at end of file diff --git a/vendors/fullcalendar/dist/fullcalendar.min.js b/vendors/fullcalendar/dist/fullcalendar.min.js index f273802293591fbe0ee95b98b16f137c254961e1..8484b7c452a5b4d3efb557157a26cd6b83ba66e1 100644 --- a/vendors/fullcalendar/dist/fullcalendar.min.js +++ b/vendors/fullcalendar/dist/fullcalendar.min.js @@ -1,9 +1,10 @@ /*! - * FullCalendar v2.7.3 + * FullCalendar v3.1.0 * Docs & License: http://fullcalendar.io/ * (c) 2016 Adam Shaw */ -!function(a){"function"==typeof define&&define.amd?define(["jquery","moment"],a):"object"==typeof exports?module.exports=a(require("jquery"),require("moment")):a(jQuery,moment)}(function(a,b){function c(a){return W(a,Xa)}function d(b){var c,d={views:b.views||{}};return a.each(b,function(b,e){"views"!=b&&(a.isPlainObject(e)&&!/(time|duration|interval)$/i.test(b)&&-1==a.inArray(b,Xa)?(c=null,a.each(e,function(a,e){/^(month|week|day|default|basic(Week|Day)?|agenda(Week|Day)?)$/.test(a)?(d.views[a]||(d.views[a]={}),d.views[a][b]=e):(c||(c={}),c[a]=e)}),c&&(d[b]=c)):d[b]=e)}),d}function e(a,b){b.left&&a.css({"border-left-width":1,"margin-left":b.left-1}),b.right&&a.css({"border-right-width":1,"margin-right":b.right-1})}function f(a){a.css({"margin-left":"","margin-right":"","border-left-width":"","border-right-width":""})}function g(){a("body").addClass("fc-not-allowed")}function h(){a("body").removeClass("fc-not-allowed")}function i(b,c,d){var e=Math.floor(c/b.length),f=Math.floor(c-e*(b.length-1)),g=[],h=[],i=[],k=0;j(b),b.each(function(c,d){var j=c===b.length-1?f:e,l=a(d).outerHeight(!0);j>l?(g.push(d),h.push(l),i.push(a(d).height())):k+=l}),d&&(c-=k,e=Math.floor(c/g.length),f=Math.floor(c-e*(g.length-1))),a(g).each(function(b,c){var d=b===g.length-1?f:e,j=h[b],k=i[b],l=d-(j-k);d>j&&a(c).height(l)})}function j(a){a.height("")}function k(b){var c=0;return b.find("> span").each(function(b,d){var e=a(d).outerWidth();e>c&&(c=e)}),c++,b.width(c),c}function l(a,b){var c,d=a.add(b);return d.css({position:"relative",left:-1}),c=a.outerHeight()-b.outerHeight(),d.css({position:"",left:""}),c}function m(b){var c=b.css("position"),d=b.parents().filter(function(){var b=a(this);return/(auto|scroll)/.test(b.css("overflow")+b.css("overflow-y")+b.css("overflow-x"))}).eq(0);return"fixed"!==c&&d.length?d:a(b[0].ownerDocument||document)}function n(a,b){var c=a.offset(),d=c.left-(b?b.left:0),e=c.top-(b?b.top:0);return{left:d,right:d+a.outerWidth(),top:e,bottom:e+a.outerHeight()}}function o(a,b){var c=a.offset(),d=q(a),e=c.left+t(a,"border-left-width")+d.left-(b?b.left:0),f=c.top+t(a,"border-top-width")+d.top-(b?b.top:0);return{left:e,right:e+a[0].clientWidth,top:f,bottom:f+a[0].clientHeight}}function p(a,b){var c=a.offset(),d=c.left+t(a,"border-left-width")+t(a,"padding-left")-(b?b.left:0),e=c.top+t(a,"border-top-width")+t(a,"padding-top")-(b?b.top:0);return{left:d,right:d+a.width(),top:e,bottom:e+a.height()}}function q(a){var b=a.innerWidth()-a[0].clientWidth,c={left:0,right:0,top:0,bottom:a.innerHeight()-a[0].clientHeight};return r()&&"rtl"==a.css("direction")?c.left=b:c.right=b,c}function r(){return null===Ya&&(Ya=s()),Ya}function s(){var b=a("
    ").css({position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}).appendTo("body"),c=b.children(),d=c.offset().left>b.offset().left;return b.remove(),d}function t(a,b){return parseFloat(a.css(b))||0}function u(a){return 1==a.which&&!a.ctrlKey}function v(a){if(void 0!==a.pageX)return a.pageX;var b=a.originalEvent.touches;return b?b[0].pageX:void 0}function w(a){if(void 0!==a.pageY)return a.pageY;var b=a.originalEvent.touches;return b?b[0].pageY:void 0}function x(a){return/^touch/.test(a.type)}function y(a){a.addClass("fc-unselectable").on("selectstart",z)}function z(a){a.preventDefault()}function A(a){return window.addEventListener?(window.addEventListener("scroll",a,!0),!0):!1}function B(a){return window.removeEventListener?(window.removeEventListener("scroll",a,!0),!0):!1}function C(a,b){var c={left:Math.max(a.left,b.left),right:Math.min(a.right,b.right),top:Math.max(a.top,b.top),bottom:Math.min(a.bottom,b.bottom)};return c.lefti&&j>g?(g>=i?(c=g.clone(),e=!0):(c=i.clone(),e=!1),j>=h?(d=h.clone(),f=!0):(d=j.clone(),f=!1),{start:c,end:d,isStart:e,isEnd:f}):void 0}function L(a,c){return b.duration({days:a.clone().stripTime().diff(c.clone().stripTime(),"days"),ms:a.time()-c.time()})}function M(a,c){return b.duration({days:a.clone().stripTime().diff(c.clone().stripTime(),"days")})}function N(a,c,d){return b.duration(Math.round(a.diff(c,d,!0)),d)}function O(a,b){var c,d,e;for(c=0;c<$a.length&&(d=$a[c],e=P(d,a,b),!(e>=1&&ha(e)));c++);return d}function P(a,c,d){return null!=d?d.diff(c,a,!0):b.isDuration(c)?c.as(a):c.end.diff(c.start,a,!0)}function Q(a,b,c){var d;return T(c)?(b-a)/c:(d=c.asMonths(),Math.abs(d)>=1&&ha(d)?b.diff(a,"months",!0)/d:b.diff(a,"days",!0)/c.asDays())}function R(a,b){var c,d;return T(a)||T(b)?a/b:(c=a.asMonths(),d=b.asMonths(),Math.abs(c)>=1&&ha(c)&&Math.abs(d)>=1&&ha(d)?c/d:a.asDays()/b.asDays())}function S(a,c){var d;return T(a)?b.duration(a*c):(d=a.asMonths(),Math.abs(d)>=1&&ha(d)?b.duration({months:d*c}):b.duration({days:a.asDays()*c}))}function T(a){return Boolean(a.hours()||a.minutes()||a.seconds()||a.milliseconds())}function U(a){return"[object Date]"===Object.prototype.toString.call(a)||a instanceof Date}function V(a){return/^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(a)}function W(a,b){var c,d,e,f,g,h,i={};if(b)for(c=0;c=0;f--)if(g=a[f][d],"object"==typeof g)e.unshift(g);else if(void 0!==g){i[d]=g;break}e.length&&(i[d]=W(e))}for(c=a.length-1;c>=0;c--){h=a[c];for(d in h)d in i||(i[d]=h[d])}return i}function X(a){var b=function(){};return b.prototype=a,new b}function Y(a,b){for(var c in a)$(a,c)&&(b[c]=a[c])}function Z(a,b){var c,d,e=["constructor","toString","valueOf"];for(c=0;c/g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"
    ")}function da(a){return a.replace(/&.*?;/g,"")}function ea(b){var c=[];return a.each(b,function(a,b){null!=b&&c.push(a+":"+b)}),c.join(";")}function fa(a){return a.charAt(0).toUpperCase()+a.slice(1)}function ga(a,b){return a-b}function ha(a){return a%1===0}function ia(a,b){var c=a[b];return function(){return c.apply(a,arguments)}}function ja(a,b,c){var d,e,f,g,h,i=function(){var j=+new Date-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=+new Date;var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}}function ka(c,d,e){var f,g,h,i,j=c[0],k=1==c.length&&"string"==typeof j;return b.isMoment(j)?(i=b.apply(null,c),ma(j,i)):U(j)||void 0===j?i=b.apply(null,c):(f=!1,g=!1,k?db.test(j)?(j+="-01",c=[j],f=!0,g=!0):(h=eb.exec(j))&&(f=!h[5],g=!0):a.isArray(j)&&(g=!0),i=d||f?b.utc.apply(b,c):b.apply(null,c),f?(i._ambigTime=!0,i._ambigZone=!0):e&&(g?i._ambigZone=!0:k&&(i.utcOffset?i.utcOffset(j):i.zone(j)))),i._fullCalendar=!0,i}function la(a,c){var d,e,f=!1,g=!1,h=a.length,i=[];for(d=0;h>d;d++)e=a[d],b.isMoment(e)||(e=Va.moment.parseZone(e)),f=f||e._ambigTime,g=g||e._ambigZone,i.push(e);for(d=0;h>d;d++)e=i[d],c||!f||e._ambigTime?g&&!e._ambigZone&&(i[d]=e.clone().stripZone()):i[d]=e.clone().stripTime();return i}function ma(a,b){a._ambigTime?b._ambigTime=!0:b._ambigTime&&(b._ambigTime=!1),a._ambigZone?b._ambigZone=!0:b._ambigZone&&(b._ambigZone=!1)}function na(a,b){a.year(b[0]||0).month(b[1]||0).date(b[2]||0).hours(b[3]||0).minutes(b[4]||0).seconds(b[5]||0).milliseconds(b[6]||0)}function oa(a,b){return gb.format.call(a,b)}function pa(a,b){return qa(a,va(b))}function qa(a,b){var c,d="";for(c=0;cg&&(f=ua(a,b,j,k,c[h]),f!==!1);h--)m=f+m;for(i=g;h>=i;i++)n+=ra(a,c[i]),o+=ra(b,c[i]);return(n||o)&&(p=e?o+d+n:n+d+o),l+p+m}function ua(a,b,c,d,e){var f,g;return"string"==typeof e?e:(f=e.token)&&(g=ib[f.charAt(0)],g&&c.isSame(d,g))?oa(a,f):!1}function va(a){return a in jb?jb[a]:jb[a]=wa(a)}function wa(a){for(var b,c=[],d=/\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g;b=d.exec(a);)b[1]?c.push(b[1]):b[2]?c.push({maybe:wa(b[2])}):b[3]?c.push({token:b[3]}):b[5]&&c.push(b[5]);return c}function xa(){}function ya(a,b){var c;return $(b,"constructor")&&(c=b.constructor),"function"!=typeof c&&(c=b.constructor=function(){a.apply(this,arguments)}),c.prototype=X(a.prototype),Y(b,c.prototype),Z(b,c.prototype),Y(a,c),c}function za(a,b){Y(b,a.prototype)}function Aa(a,b){return a||b?a&&b?a.component===b.component&&Ba(a,b)&&Ba(b,a):!1:!0}function Ba(a,b){for(var c in a)if(!/^(component|left|right|top|bottom)$/.test(c)&&a[c]!==b[c])return!1;return!0}function Ca(a){var b=Ea(a);return"background"===b||"inverse-background"===b}function Da(a){return"inverse-background"===Ea(a)}function Ea(a){return ba((a.source||{}).rendering,a.rendering)}function Fa(a){var b,c,d={};for(b=0;b=a.leftCol)return!0;return!1}function Ja(a,b){return a.leftCol-b.leftCol}function Ka(a){var b,c,d,e=[];for(b=0;bb.top&&a.top").prependTo(c),R=N.header=new Sa(N,O),S=R.render(),S&&c.prepend(S),i(O.defaultView),O.handleWindowResize&&(Y=ja(m,O.windowResizeDelay),a(window).resize(Y))}function g(){V&&V.removeElement(),R.removeElement(),T.remove(),c.removeClass("fc fc-ltr fc-rtl fc-unthemed ui-widget"),Y&&a(window).unbind("resize",Y)}function h(){return c.is(":visible")}function i(b){ca++,V&&b&&V.type!==b&&(R.deactivateButton(V.type),H(),V.removeElement(),V=N.view=null),!V&&b&&(V=N.view=ba[b]||(ba[b]=N.instantiateView(b)),V.setElement(a("
    ").appendTo(T)),R.activateButton(b)),V&&(Z=V.massageCurrentDate(Z),V.displaying&&Z.isWithin(V.intervalStart,V.intervalEnd)||h()&&(V.display(Z),I(),u(),v(),q())),I(),ca--}function j(a){return h()?(a&&l(),ca++,V.updateSize(!0),ca--,!0):void 0}function k(){h()&&l()}function l(){W="number"==typeof O.contentHeight?O.contentHeight:"number"==typeof O.height?O.height-(S?S.outerHeight(!0):0):Math.round(T.width()/Math.max(O.aspectRatio,.5))}function m(a){!ca&&a.target===window&&V.start&&j(!0)&&V.trigger("windowResize",aa)}function n(){p(),r()}function o(){h()&&(H(),V.displayEvents(da),I())}function p(){H(),V.clearEvents(),I()}function q(){!O.lazyFetching||$(V.start,V.end)?r():o()}function r(){_(V.start,V.end)}function s(a){da=a,o()}function t(){o()}function u(){R.updateTitle(V.title)}function v(){var a=N.getNow();a.isWithin(V.intervalStart,V.intervalEnd)?R.disableButton("today"):R.enableButton("today")}function w(a,b){V.select(N.buildSelectSpan.apply(N,arguments))}function x(){V&&V.unselect()}function y(){Z=V.computePrevDate(Z),i()}function z(){Z=V.computeNextDate(Z),i()}function A(){Z.add(-1,"years"),i()}function B(){Z.add(1,"years"),i()}function C(){Z=N.getNow(),i()}function D(a){Z=N.moment(a).stripZone(),i()}function E(a){Z.add(b.duration(a)),i()}function F(a,b){var c;b=b||"day",c=N.getViewSpec(b)||N.getUnitViewSpec(b),Z=a.clone(),i(c?c.type:null)}function G(){return N.applyTimezone(Z)}function H(){T.css({width:"100%",height:T.height(),overflow:"hidden"})}function I(){T.css({width:"",height:"",overflow:""})}function J(){return N}function K(){return V}function L(a,b){return void 0===b?O[a]:void("height"!=a&&"contentHeight"!=a&&"aspectRatio"!=a||(O[a]=b,j(!0)))}function M(a,b){var c=Array.prototype.slice.call(arguments,2);return b=b||aa,this.triggerWith(a,b,c),O[a]?O[a].apply(b,c):void 0}var N=this;N.initOptions(d||{});var O=this.options;N.render=e,N.destroy=g,N.refetchEvents=n,N.reportEvents=s,N.reportEventChange=t,N.rerenderEvents=o,N.changeView=i,N.select=w,N.unselect=x,N.prev=y,N.next=z,N.prevYear=A,N.nextYear=B,N.today=C,N.gotoDate=D,N.incrementDate=E,N.zoomTo=F,N.getDate=G,N.getCalendar=J,N.getView=K,N.option=L,N.trigger=M;var P=X(Ra(O.lang));if(O.monthNames&&(P._months=O.monthNames),O.monthNamesShort&&(P._monthsShort=O.monthNamesShort),O.dayNames&&(P._weekdays=O.dayNames),O.dayNamesShort&&(P._weekdaysShort=O.dayNamesShort),null!=O.firstDay){var Q=X(P._week);Q.dow=O.firstDay,P._week=Q}P._fullCalendar_weekCalc=function(a){return"function"==typeof a?a:"local"===a?a:"iso"===a||"ISO"===a?"ISO":void 0}(O.weekNumberCalculation),N.defaultAllDayEventDuration=b.duration(O.defaultAllDayEventDuration),N.defaultTimedEventDuration=b.duration(O.defaultTimedEventDuration),N.moment=function(){var a;return"local"===O.timezone?(a=Va.moment.apply(null,arguments),a.hasTime()&&a.local()):a="UTC"===O.timezone?Va.moment.utc.apply(null,arguments):Va.moment.parseZone.apply(null,arguments),"_locale"in a?a._locale=P:a._lang=P,a},N.getIsAmbigTimezone=function(){return"local"!==O.timezone&&"UTC"!==O.timezone},N.applyTimezone=function(a){if(!a.hasTime())return a.clone();var b,c=N.moment(a.toArray()),d=a.time()-c.time();return d&&(b=c.clone().add(d),a.time()-b.time()===0&&(c=b)),c},N.getNow=function(){var a=O.now;return"function"==typeof a&&(a=a()),N.moment(a).stripZone()},N.getEventEnd=function(a){return a.end?a.end.clone():N.getDefaultEventEnd(a.allDay,a.start)},N.getDefaultEventEnd=function(a,b){var c=b.clone();return a?c.stripTime().add(N.defaultAllDayEventDuration):c.add(N.defaultTimedEventDuration),N.getIsAmbigTimezone()&&c.stripZone(),c},N.humanizeDuration=function(a){return(a.locale||a.lang).call(a,O.lang).humanize()},Ta.call(N,O);var R,S,T,U,V,W,Y,Z,$=N.isFetchNeeded,_=N.fetchEvents,aa=c[0],ba={},ca=0,da=[];Z=null!=O.defaultDate?N.moment(O.defaultDate).stripZone():N.getNow(),N.getSuggestedViewHeight=function(){return void 0===W&&k(),W},N.isHeightAuto=function(){return"auto"===O.contentHeight||"auto"===O.height},N.freezeContentHeight=H,N.unfreezeContentHeight=I,N.initialize()}function Qa(b){a.each(Cb,function(a,c){null==b[a]&&(b[a]=c(b))})}function Ra(a){var c=b.localeData||b.langData;return c.call(b,a)||c.call(b,"en")}function Sa(b,c){function d(){var b=c.header;return n=c.theme?"ui":"fc",b?o=a("
    ").append(f("left")).append(f("right")).append(f("center")).append('
    '):void 0}function e(){o.remove(),o=a()}function f(d){var e=a('
    '),f=c.header[d];return f&&a.each(f.split(" "),function(d){var f,g=a(),h=!0;a.each(this.split(","),function(d,e){var f,i,j,k,l,m,o,q,r,s;"title"==e?(g=g.add(a("

     

    ")),h=!1):((f=(b.options.customButtons||{})[e])?(j=function(a){f.click&&f.click.call(s[0],a)},k="",l=f.text):(i=b.getViewSpec(e))?(j=function(){b.changeView(e)},p.push(e),k=i.buttonTextOverride,l=i.buttonTextDefault):b[e]&&(j=function(){b[e]()},k=(b.overrides.buttonText||{})[e],l=c.buttonText[e]),j&&(m=f?f.themeIcon:c.themeButtonIcons[e],o=f?f.icon:c.buttonIcons[e],q=k?ca(k):m&&c.theme?"":o&&!c.theme?"":ca(l),r=["fc-"+e+"-button",n+"-button",n+"-state-default"],s=a('").click(function(a){s.hasClass(n+"-state-disabled")||(j(a),(s.hasClass(n+"-state-active")||s.hasClass(n+"-state-disabled"))&&s.removeClass(n+"-state-hover"))}).mousedown(function(){s.not("."+n+"-state-active").not("."+n+"-state-disabled").addClass(n+"-state-down")}).mouseup(function(){s.removeClass(n+"-state-down")}).hover(function(){s.not("."+n+"-state-active").not("."+n+"-state-disabled").addClass(n+"-state-hover")},function(){s.removeClass(n+"-state-hover").removeClass(n+"-state-down")}),g=g.add(s)))}),h&&g.first().addClass(n+"-corner-left").end().last().addClass(n+"-corner-right").end(),g.length>1?(f=a("
    "),h&&f.addClass("fc-button-group"),f.append(g),e.append(f)):e.append(g)}),e}function g(a){o.find("h2").text(a)}function h(a){o.find(".fc-"+a+"-button").addClass(n+"-state-active")}function i(a){o.find(".fc-"+a+"-button").removeClass(n+"-state-active")}function j(a){o.find(".fc-"+a+"-button").attr("disabled","disabled").addClass(n+"-state-disabled")}function k(a){o.find(".fc-"+a+"-button").removeAttr("disabled").removeClass(n+"-state-disabled")}function l(){return p}var m=this;m.render=d,m.removeElement=e,m.updateTitle=g,m.activateButton=h,m.deactivateButton=i,m.disableButton=j,m.enableButton=k,m.getViewsWithButtons=l;var n,o=a(),p=[]}function Ta(c){function d(a,b){return!I||I>a||b>J}function e(a,b){I=a,J=b,S=[];var c=++Q,d=P.length;R=d;for(var e=0;d>e;e++)f(P[e],c)}function f(b,c){g(b,function(d){var e,f,g,h=a.isArray(b.events);if(c==Q){if(d)for(e=0;e=c&&b.end<=d}function G(a,b){var c=a.start.clone().stripZone(),d=H.getEventEnd(a).stripZone();return b.startc}var H=this;H.isFetchNeeded=d,H.fetchEvents=e,H.addEventSource=h,H.removeEventSource=j,H.updateEvent=m,H.renderEvent=p,H.removeEvents=q,H.clientEvents=r,H.mutateEvent=x,H.normalizeEventDates=u,H.normalizeEventTimes=v;var I,J,K=H.reportEvents,O={events:[]},P=[O],Q=0,R=0,S=[];a.each((c.events?[c.events]:[]).concat(c.eventSources||[]),function(a,b){var c=i(b);c&&P.push(c)}),H.getBusinessHoursEvents=z,H.isEventSpanAllowed=A,H.isExternalSpanAllowed=B,H.isSelectionSpanAllowed=C,H.getEventCache=function(){return S}}function Ua(a){a._allDay=a.allDay,a._start=a.start.clone(),a._end=a.end?a.end.clone():null}var Va=a.fullCalendar={version:"2.7.3",internalApiVersion:4},Wa=Va.views={};a.fn.fullCalendar=function(b){var c=Array.prototype.slice.call(arguments,1),d=this;return this.each(function(e,f){var g,h=a(f),i=h.data("fullCalendar");"string"==typeof b?i&&a.isFunction(i[b])&&(g=i[b].apply(i,c),e||(d=g),"destroy"===b&&h.removeData("fullCalendar")):i||(i=new yb(h,b),h.data("fullCalendar",i),i.render())}),d};var Xa=["header","buttonText","buttonIcons","themeButtonIcons"];Va.intersectRanges=K,Va.applyAll=aa,Va.debounce=ja,Va.isInt=ha,Va.htmlEscape=ca,Va.cssToStr=ea,Va.proxy=ia,Va.capitaliseFirstLetter=fa,Va.getOuterRect=n,Va.getClientRect=o,Va.getContentRect=p,Va.getScrollbarWidths=q;var Ya=null;Va.preventDefault=z,Va.intersectRects=C,Va.parseFieldSpecs=G,Va.compareByFieldSpecs=H,Va.compareByFieldSpec=I,Va.flexibleCompare=J,Va.computeIntervalUnit=O,Va.divideRangeByDuration=Q,Va.divideDurationByDuration=R,Va.multiplyDuration=S,Va.durationHasTime=T;var Za=["sun","mon","tue","wed","thu","fri","sat"],$a=["year","month","week","day","hour","minute","second","millisecond"];Va.log=function(){var a=window.console;return a&&a.log?a.log.apply(a,arguments):void 0},Va.warn=function(){var a=window.console;return a&&a.warn?a.warn.apply(a,arguments):Va.log.apply(Va,arguments)};var _a,ab,bb,cb={}.hasOwnProperty,db=/^\s*\d{4}-\d\d$/,eb=/^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?)?$/,fb=b.fn,gb=a.extend({},fb);Va.moment=function(){return ka(arguments)},Va.moment.utc=function(){var a=ka(arguments,!0);return a.hasTime()&&a.utc(),a},Va.moment.parseZone=function(){return ka(arguments,!0,!0)},fb.clone=function(){var a=gb.clone.apply(this,arguments);return ma(this,a),this._fullCalendar&&(a._fullCalendar=!0),a},fb.week=fb.weeks=function(a){var b=(this._locale||this._lang)._fullCalendar_weekCalc;return null==a&&"function"==typeof b?b(this):"ISO"===b?gb.isoWeek.apply(this,arguments):gb.week.apply(this,arguments)},fb.time=function(a){if(!this._fullCalendar)return gb.time.apply(this,arguments);if(null==a)return b.duration({hours:this.hours(),minutes:this.minutes(),seconds:this.seconds(),milliseconds:this.milliseconds()});this._ambigTime=!1,b.isDuration(a)||b.isMoment(a)||(a=b.duration(a));var c=0;return b.isDuration(a)&&(c=24*Math.floor(a.asDays())),this.hours(c+a.hours()).minutes(a.minutes()).seconds(a.seconds()).milliseconds(a.milliseconds())},fb.stripTime=function(){var a;return this._ambigTime||(a=this.toArray(),this.utc(),ab(this,a.slice(0,3)),this._ambigTime=!0,this._ambigZone=!0),this},fb.hasTime=function(){return!this._ambigTime},fb.stripZone=function(){var a,b;return this._ambigZone||(a=this.toArray(),b=this._ambigTime,this.utc(),ab(this,a),this._ambigTime=b||!1,this._ambigZone=!0),this},fb.hasZone=function(){return!this._ambigZone},fb.local=function(){var a=this.toArray(),b=this._ambigZone;return gb.local.apply(this,arguments),this._ambigTime=!1,this._ambigZone=!1,b&&bb(this,a),this},fb.utc=function(){return gb.utc.apply(this,arguments),this._ambigTime=!1,this._ambigZone=!1,this},a.each(["zone","utcOffset"],function(a,b){gb[b]&&(fb[b]=function(a){return null!=a&&(this._ambigTime=!1,this._ambigZone=!1),gb[b].apply(this,arguments)})}),fb.format=function(){return this._fullCalendar&&arguments[0]?pa(this,arguments[0]):this._ambigTime?oa(this,"YYYY-MM-DD"):this._ambigZone?oa(this,"YYYY-MM-DD[T]HH:mm:ss"):gb.format.apply(this,arguments)},fb.toISOString=function(){return this._ambigTime?oa(this,"YYYY-MM-DD"):this._ambigZone?oa(this,"YYYY-MM-DD[T]HH:mm:ss"):gb.toISOString.apply(this,arguments)},fb.isWithin=function(a,b){var c=la([this,a,b]);return c[0]>=c[1]&&c[0]a;a++)b=arguments[a],c-1>a&&za(this,b);return ya(this,b||{})},xa.mixin=function(a){za(this,a)};var kb=Va.EmitterMixin={on:function(b,c){var d=function(a,b){return c.apply(b.context||this,b.args||[])};return c.guid||(c.guid=a.guid++),d.guid=c.guid,a(this).on(b,d),this},off:function(b,c){return a(this).off(b,c),this},trigger:function(b){var c=Array.prototype.slice.call(arguments,1);return a(this).triggerHandler(b,{args:c}),this},triggerWith:function(b,c,d){return a(this).triggerHandler(b,{context:c,args:d}),this}},lb=Va.ListenerMixin=function(){var b=0,c={listenerId:null,listenTo:function(b,c,d){if("object"==typeof c)for(var e in c)c.hasOwnProperty(e)&&this.listenTo(b,e,c[e]);else"string"==typeof c&&b.on(c+"."+this.getListenerNamespace(),a.proxy(d,this))},stopListeningTo:function(a,b){a.off((b||"")+"."+this.getListenerNamespace())},getListenerNamespace:function(){return null==this.listenerId&&(this.listenerId=b++),"_listener"+this.listenerId}};return c}(),mb={isIgnoringMouse:!1,delayUnignoreMouse:null,initMouseIgnoring:function(a){this.delayUnignoreMouse=ja(ia(this,"unignoreMouse"),a||1e3)},tempIgnoreMouse:function(){this.isIgnoringMouse=!0,this.delayUnignoreMouse()},unignoreMouse:function(){this.isIgnoringMouse=!1; -}},nb=xa.extend(lb,{isHidden:!0,options:null,el:null,margin:10,constructor:function(a){this.options=a||{}},show:function(){this.isHidden&&(this.el||this.render(),this.el.show(),this.position(),this.isHidden=!1,this.trigger("show"))},hide:function(){this.isHidden||(this.el.hide(),this.isHidden=!0,this.trigger("hide"))},render:function(){var b=this,c=this.options;this.el=a('
    ').addClass(c.className||"").css({top:0,left:0}).append(c.content).appendTo(c.parentEl),this.el.on("click",".fc-close",function(){b.hide()}),c.autoHide&&this.listenTo(a(document),"mousedown",this.documentMousedown)},documentMousedown:function(b){this.el&&!a(b.target).closest(this.el).length&&this.hide()},removeElement:function(){this.hide(),this.el&&(this.el.remove(),this.el=null),this.stopListeningTo(a(document),"mousedown")},position:function(){var b,c,d,e,f,g=this.options,h=this.el.offsetParent().offset(),i=this.el.outerWidth(),j=this.el.outerHeight(),k=a(window),l=m(this.el);e=g.top||0,f=void 0!==g.left?g.left:void 0!==g.right?g.right-i:0,l.is(window)||l.is(document)?(l=k,b=0,c=0):(d=l.offset(),b=d.top,c=d.left),b+=k.scrollTop(),c+=k.scrollLeft(),g.viewportConstrain!==!1&&(e=Math.min(e,b+l.outerHeight()-j-this.margin),e=Math.max(e,b+this.margin),f=Math.min(f,c+l.outerWidth()-i-this.margin),f=Math.max(f,c+this.margin)),this.el.css({top:e-h.top,left:f-h.left})},trigger:function(a){this.options[a]&&this.options[a].apply(this,Array.prototype.slice.call(arguments,1))}}),ob=Va.CoordCache=xa.extend({els:null,forcedOffsetParentEl:null,origin:null,boundingRect:null,isHorizontal:!1,isVertical:!1,lefts:null,rights:null,tops:null,bottoms:null,constructor:function(b){this.els=a(b.els),this.isHorizontal=b.isHorizontal,this.isVertical=b.isVertical,this.forcedOffsetParentEl=b.offsetParent?a(b.offsetParent):null},build:function(){var a=this.forcedOffsetParentEl||this.els.eq(0).offsetParent();this.origin=a.offset(),this.boundingRect=this.queryBoundingRect(),this.isHorizontal&&this.buildElHorizontals(),this.isVertical&&this.buildElVerticals()},clear:function(){this.origin=null,this.boundingRect=null,this.lefts=null,this.rights=null,this.tops=null,this.bottoms=null},ensureBuilt:function(){this.origin||this.build()},queryBoundingRect:function(){var a=m(this.els.eq(0));return a.is(document)?void 0:o(a)},buildElHorizontals:function(){var b=[],c=[];this.els.each(function(d,e){var f=a(e),g=f.offset().left,h=f.outerWidth();b.push(g),c.push(g+h)}),this.lefts=b,this.rights=c},buildElVerticals:function(){var b=[],c=[];this.els.each(function(d,e){var f=a(e),g=f.offset().top,h=f.outerHeight();b.push(g),c.push(g+h)}),this.tops=b,this.bottoms=c},getHorizontalIndex:function(a){this.ensureBuilt();var b,c=this.boundingRect,d=this.lefts,e=this.rights,f=d.length;if(!c||a>=c.left&&ab;b++)if(a>=d[b]&&a=c.top&&ab;b++)if(a>=d[b]&&a=e*e&&this.handleDistanceSurpassed(a)),this.isDragging&&this.handleDrag(c,d,a)},handleDrag:function(a,b,c){this.trigger("drag",a,b,c),this.updateAutoScroll(c)},endDrag:function(a){this.isDragging&&(this.isDragging=!1,this.handleDragEnd(a))},handleDragEnd:function(a){this.trigger("dragEnd",a),this.destroyHrefHack()},startDelay:function(a){var b=this;this.delay?this.delayTimeoutId=setTimeout(function(){b.handleDelayEnd(a)},this.delay):this.handleDelayEnd(a)},handleDelayEnd:function(a){this.isDelayEnded=!0,this.isDistanceSurpassed&&this.startDrag(a)},handleDistanceSurpassed:function(a){this.isDistanceSurpassed=!0,this.isDelayEnded&&this.startDrag(a)},handleTouchMove:function(a){this.isDragging&&a.preventDefault(),this.handleMove(a)},handleMouseMove:function(a){this.handleMove(a)},handleTouchScroll:function(a){this.isDragging||this.endInteraction(a,!0)},initHrefHack:function(){var a=this.subjectEl;(this.subjectHref=a?a.attr("href"):null)&&a.removeAttr("href")},destroyHrefHack:function(){var a=this.subjectEl,b=this.subjectHref;setTimeout(function(){b&&a.attr("href",b)},0)},trigger:function(a){this.options[a]&&this.options[a].apply(this,Array.prototype.slice.call(arguments,1)),this["_"+a]&&this["_"+a].apply(this,Array.prototype.slice.call(arguments,1))}});pb.mixin({isAutoScroll:!1,scrollBounds:null,scrollTopVel:null,scrollLeftVel:null,scrollIntervalId:null,scrollSensitivity:30,scrollSpeed:200,scrollIntervalMs:50,initAutoScroll:function(){var a=this.scrollEl;this.isAutoScroll=this.options.scroll&&a&&!a.is(window)&&!a.is(document),this.isAutoScroll&&this.listenTo(a,"scroll",ja(this.handleDebouncedScroll,100))},destroyAutoScroll:function(){this.endAutoScroll(),this.isAutoScroll&&this.stopListeningTo(this.scrollEl,"scroll")},computeScrollBounds:function(){this.isAutoScroll&&(this.scrollBounds=n(this.scrollEl))},updateAutoScroll:function(a){var b,c,d,e,f=this.scrollSensitivity,g=this.scrollBounds,h=0,i=0;g&&(b=(f-(w(a)-g.top))/f,c=(f-(g.bottom-w(a)))/f,d=(f-(v(a)-g.left))/f,e=(f-(g.right-v(a)))/f,b>=0&&1>=b?h=b*this.scrollSpeed*-1:c>=0&&1>=c&&(h=c*this.scrollSpeed),d>=0&&1>=d?i=d*this.scrollSpeed*-1:e>=0&&1>=e&&(i=e*this.scrollSpeed)),this.setScrollVel(h,i)},setScrollVel:function(a,b){this.scrollTopVel=a,this.scrollLeftVel=b,this.constrainScrollVel(),!this.scrollTopVel&&!this.scrollLeftVel||this.scrollIntervalId||(this.scrollIntervalId=setInterval(ia(this,"scrollIntervalFunc"),this.scrollIntervalMs))},constrainScrollVel:function(){var a=this.scrollEl;this.scrollTopVel<0?a.scrollTop()<=0&&(this.scrollTopVel=0):this.scrollTopVel>0&&a.scrollTop()+a[0].clientHeight>=a[0].scrollHeight&&(this.scrollTopVel=0),this.scrollLeftVel<0?a.scrollLeft()<=0&&(this.scrollLeftVel=0):this.scrollLeftVel>0&&a.scrollLeft()+a[0].clientWidth>=a[0].scrollWidth&&(this.scrollLeftVel=0)},scrollIntervalFunc:function(){var a=this.scrollEl,b=this.scrollIntervalMs/1e3;this.scrollTopVel&&a.scrollTop(a.scrollTop()+this.scrollTopVel*b),this.scrollLeftVel&&a.scrollLeft(a.scrollLeft()+this.scrollLeftVel*b),this.constrainScrollVel(),this.scrollTopVel||this.scrollLeftVel||this.endAutoScroll()},endAutoScroll:function(){this.scrollIntervalId&&(clearInterval(this.scrollIntervalId),this.scrollIntervalId=null,this.handleScrollEnd())},handleDebouncedScroll:function(){this.scrollIntervalId||this.handleScrollEnd()},handleScrollEnd:function(){}});var qb=pb.extend({component:null,origHit:null,hit:null,coordAdjust:null,constructor:function(a,b){pb.call(this,b),this.component=a},handleInteractionStart:function(a){var b,c,d,e=this.subjectEl;this.computeCoords(),a?(c={left:v(a),top:w(a)},d=c,e&&(b=n(e),d=D(d,b)),this.origHit=this.queryHit(d.left,d.top),e&&this.options.subjectCenter&&(this.origHit&&(b=C(this.origHit,b)||b),d=E(b)),this.coordAdjust=F(d,c)):(this.origHit=null,this.coordAdjust=null),pb.prototype.handleInteractionStart.apply(this,arguments)},computeCoords:function(){this.component.prepareHits(),this.computeScrollBounds()},handleDragStart:function(a){var b;pb.prototype.handleDragStart.apply(this,arguments),b=this.queryHit(v(a),w(a)),b&&this.handleHitOver(b)},handleDrag:function(a,b,c){var d;pb.prototype.handleDrag.apply(this,arguments),d=this.queryHit(v(c),w(c)),Aa(d,this.hit)||(this.hit&&this.handleHitOut(),d&&this.handleHitOver(d))},handleDragEnd:function(){this.handleHitDone(),pb.prototype.handleDragEnd.apply(this,arguments)},handleHitOver:function(a){var b=Aa(a,this.origHit);this.hit=a,this.trigger("hitOver",this.hit,b,this.origHit)},handleHitOut:function(){this.hit&&(this.trigger("hitOut",this.hit),this.handleHitDone(),this.hit=null)},handleHitDone:function(){this.hit&&this.trigger("hitDone",this.hit)},handleInteractionEnd:function(){pb.prototype.handleInteractionEnd.apply(this,arguments),this.origHit=null,this.hit=null,this.component.releaseHits()},handleScrollEnd:function(){pb.prototype.handleScrollEnd.apply(this,arguments),this.computeCoords()},queryHit:function(a,b){return this.coordAdjust&&(a+=this.coordAdjust.left,b+=this.coordAdjust.top),this.component.queryHit(a,b)}}),rb=xa.extend(lb,{options:null,sourceEl:null,el:null,parentEl:null,top0:null,left0:null,y0:null,x0:null,topDelta:null,leftDelta:null,isFollowing:!1,isHidden:!1,isAnimating:!1,constructor:function(b,c){this.options=c=c||{},this.sourceEl=b,this.parentEl=c.parentEl?a(c.parentEl):b.parent()},start:function(b){this.isFollowing||(this.isFollowing=!0,this.y0=w(b),this.x0=v(b),this.topDelta=0,this.leftDelta=0,this.isHidden||this.updatePosition(),x(b)?this.listenTo(a(document),"touchmove",this.handleMove):this.listenTo(a(document),"mousemove",this.handleMove))},stop:function(b,c){function d(){this.isAnimating=!1,e.removeElement(),this.top0=this.left0=null,c&&c()}var e=this,f=this.options.revertDuration;this.isFollowing&&!this.isAnimating&&(this.isFollowing=!1,this.stopListeningTo(a(document)),b&&f&&!this.isHidden?(this.isAnimating=!0,this.el.animate({top:this.top0,left:this.left0},{duration:f,complete:d})):d())},getEl:function(){var a=this.el;return a||(this.sourceEl.width(),a=this.el=this.sourceEl.clone().addClass(this.options.additionalClass||"").css({position:"absolute",visibility:"",display:this.isHidden?"none":"",margin:0,right:"auto",bottom:"auto",width:this.sourceEl.width(),height:this.sourceEl.height(),opacity:this.options.opacity||"",zIndex:this.options.zIndex}),a.addClass("fc-unselectable"),a.appendTo(this.parentEl)),a},removeElement:function(){this.el&&(this.el.remove(),this.el=null)},updatePosition:function(){var a,b;this.getEl(),null===this.top0&&(this.sourceEl.width(),a=this.sourceEl.offset(),b=this.el.offsetParent().offset(),this.top0=a.top-b.top,this.left0=a.left-b.left),this.el.css({top:this.top0+this.topDelta,left:this.left0+this.leftDelta})},handleMove:function(a){this.topDelta=w(a)-this.y0,this.leftDelta=v(a)-this.x0,this.isHidden||this.updatePosition()},hide:function(){this.isHidden||(this.isHidden=!0,this.el&&this.el.hide())},show:function(){this.isHidden&&(this.isHidden=!1,this.updatePosition(),this.getEl().show())}}),sb=Va.Grid=xa.extend(lb,mb,{view:null,isRTL:null,start:null,end:null,el:null,elsByFill:null,eventTimeFormat:null,displayEventTime:null,displayEventEnd:null,minResizeDuration:null,largeUnit:null,dayDragListener:null,segDragListener:null,segResizeListener:null,externalDragListener:null,constructor:function(a){this.view=a,this.isRTL=a.opt("isRTL"),this.elsByFill={},this.dayDragListener=this.buildDayDragListener(),this.initMouseIgnoring()},computeEventTimeFormat:function(){return this.view.opt("smallTimeFormat")},computeDisplayEventTime:function(){return!0},computeDisplayEventEnd:function(){return!0},setRange:function(a){this.start=a.start.clone(),this.end=a.end.clone(),this.rangeUpdated(),this.processRangeOptions()},rangeUpdated:function(){},processRangeOptions:function(){var a,b,c=this.view;this.eventTimeFormat=c.opt("eventTimeFormat")||c.opt("timeFormat")||this.computeEventTimeFormat(),a=c.opt("displayEventTime"),null==a&&(a=this.computeDisplayEventTime()),b=c.opt("displayEventEnd"),null==b&&(b=this.computeDisplayEventEnd()),this.displayEventTime=a,this.displayEventEnd=b},spanToSegs:function(a){},diffDates:function(a,b){return this.largeUnit?N(a,b,this.largeUnit):L(a,b)},prepareHits:function(){},releaseHits:function(){},queryHit:function(a,b){},getHitSpan:function(a){},getHitEl:function(a){},setElement:function(a){this.el=a,y(a),this.bindDayHandler("touchstart",this.dayTouchStart),this.bindDayHandler("mousedown",this.dayMousedown),this.bindSegHandlers(),this.bindGlobalHandlers()},bindDayHandler:function(b,c){var d=this;this.el.on(b,function(b){return a(b.target).is(".fc-event-container *, .fc-more")||a(b.target).closest(".fc-popover").length?void 0:c.call(d,b)})},removeElement:function(){this.unbindGlobalHandlers(),this.clearDragListeners(),this.el.remove()},renderSkeleton:function(){},renderDates:function(){},unrenderDates:function(){},bindGlobalHandlers:function(){this.listenTo(a(document),{dragstart:this.externalDragStart,sortstart:this.externalDragStart})},unbindGlobalHandlers:function(){this.stopListeningTo(a(document))},dayMousedown:function(a){this.isIgnoringMouse||this.dayDragListener.startInteraction(a,{})},dayTouchStart:function(a){var b=this.view;(b.isSelected||b.selectedEvent)&&this.tempIgnoreMouse(),this.dayDragListener.startInteraction(a,{delay:this.view.opt("longPressDelay")})},buildDayDragListener:function(){var a,b,c=this,d=this.view,e=d.opt("selectable"),f=new qb(this,{scroll:d.opt("dragScroll"),interactionStart:function(){a=f.origHit},dragStart:function(){d.unselect()},hitOver:function(d,f,h){h&&(f||(a=null),e&&(b=c.computeSelection(c.getHitSpan(h),c.getHitSpan(d)),b?c.renderSelection(b):b===!1&&g()))},hitOut:function(){a=null,b=null,c.unrenderSelection(),h()},interactionEnd:function(e,f){f||(a&&!c.isIgnoringMouse&&d.triggerDayClick(c.getHitSpan(a),c.getHitEl(a),e),b&&d.reportSelection(b,e),h())}});return f},clearDragListeners:function(){this.dayDragListener.endInteraction(),this.segDragListener&&this.segDragListener.endInteraction(),this.segResizeListener&&this.segResizeListener.endInteraction(),this.externalDragListener&&this.externalDragListener.endInteraction()},renderEventLocationHelper:function(a,b){var c=this.fabricateHelperEvent(a,b);return this.renderHelper(c,b)},fabricateHelperEvent:function(a,b){var c=b?X(b.event):{};return c.start=a.start.clone(),c.end=a.end?a.end.clone():null,c.allDay=null,this.view.calendar.normalizeEventDates(c),c.className=(c.className||[]).concat("fc-helper"),b||(c.editable=!1),c},renderHelper:function(a,b){},unrenderHelper:function(){},renderSelection:function(a){this.renderHighlight(a)},unrenderSelection:function(){this.unrenderHighlight()},computeSelection:function(a,b){var c=this.computeSelectionSpan(a,b);return c&&!this.view.calendar.isSelectionSpanAllowed(c)?!1:c},computeSelectionSpan:function(a,b){var c=[a.start,a.end,b.start,b.end];return c.sort(ga),{start:c[0].clone(),end:c[3].clone()}},renderHighlight:function(a){this.renderFill("highlight",this.spanToSegs(a))},unrenderHighlight:function(){this.unrenderFill("highlight")},highlightSegClasses:function(){return["fc-highlight"]},renderBusinessHours:function(){},unrenderBusinessHours:function(){},getNowIndicatorUnit:function(){},renderNowIndicator:function(a){},unrenderNowIndicator:function(){},renderFill:function(a,b){},unrenderFill:function(a){var b=this.elsByFill[a];b&&(b.remove(),delete this.elsByFill[a])},renderFillSegEls:function(b,c){var d,e=this,f=this[b+"SegEl"],g="",h=[];if(c.length){for(d=0;d"},getDayClasses:function(a){var b=this.view,c=b.calendar.getNow(),d=["fc-"+Za[a.day()]];return 1==b.intervalDuration.as("months")&&a.month()!=b.intervalStart.month()&&d.push("fc-other-month"),a.isSame(c,"day")?d.push("fc-today",b.highlightStateClass):c>a?d.push("fc-past"):d.push("fc-future"),d}});sb.mixin({mousedOverSeg:null,isDraggingSeg:!1,isResizingSeg:!1,isDraggingExternal:!1,segs:null,renderEvents:function(a){var b,c=[],d=[];for(b=0;b *",function(b){var e=a(this).data("fc-seg");return!e||d.isDraggingSeg||d.isResizingSeg?void 0:c.call(d,e,b)})},handleSegClick:function(a,b){return this.view.trigger("eventClick",a.el[0],a.event,b)},handleSegMouseover:function(a,b){this.isIgnoringMouse||this.mousedOverSeg||(this.mousedOverSeg=a,a.el.addClass("fc-allow-mouse-resize"),this.view.trigger("eventMouseover",a.el[0],a.event,b))},handleSegMouseout:function(a,b){b=b||{},this.mousedOverSeg&&(a=a||this.mousedOverSeg,this.mousedOverSeg=null,a.el.removeClass("fc-allow-mouse-resize"),this.view.trigger("eventMouseout",a.el[0],a.event,b))},handleSegMousedown:function(a,b){var c=this.startSegResize(a,b,{distance:5});!c&&this.view.isEventDraggable(a.event)&&this.buildSegDragListener(a).startInteraction(b,{distance:5})},handleSegTouchStart:function(a,b){var c,d=this.view,e=a.event,f=d.isEventSelected(e),g=d.isEventDraggable(e),h=d.isEventResizable(e),i=!1;f&&h&&(i=this.startSegResize(a,b)),i||!g&&!h||(c=g?this.buildSegDragListener(a):this.buildSegSelectListener(a),c.startInteraction(b,{delay:f?0:this.view.opt("longPressDelay")})),this.tempIgnoreMouse()},handleSegTouchEnd:function(a,b){this.tempIgnoreMouse()},startSegResize:function(b,c,d){return a(c.target).is(".fc-resizer")?(this.buildSegResizeListener(b,a(c.target).is(".fc-start-resizer")).startInteraction(c,d),!0):!1},buildSegDragListener:function(a){var b,c,d,e=this,f=this.view,i=f.calendar,j=a.el,k=a.event;if(this.segDragListener)return this.segDragListener;var l=this.segDragListener=new qb(f,{scroll:f.opt("dragScroll"),subjectEl:j,subjectCenter:!0,interactionStart:function(d){b=!1,c=new rb(a.el,{additionalClass:"fc-dragging",parentEl:f.el,opacity:l.isTouch?null:f.opt("dragOpacity"),revertDuration:f.opt("dragRevertDuration"),zIndex:2}),c.hide(),c.start(d)},dragStart:function(c){l.isTouch&&!f.isEventSelected(k)&&f.selectEvent(k),b=!0,e.handleSegMouseout(a,c),e.segDragStart(a,c),f.hideEvent(k)},hitOver:function(b,h,j){var m;a.hit&&(j=a.hit),d=e.computeEventDrop(j.component.getHitSpan(j),b.component.getHitSpan(b),k),d&&!i.isEventSpanAllowed(e.eventToSpan(d),k)&&(g(),d=null),d&&(m=f.renderDrag(d,a))?(m.addClass("fc-dragging"),l.isTouch||e.applyDragOpacity(m),c.hide()):c.show(),h&&(d=null)},hitOut:function(){f.unrenderDrag(),c.show(),d=null},hitDone:function(){h()},interactionEnd:function(g){c.stop(!d,function(){b&&(f.unrenderDrag(),f.showEvent(k),e.segDragStop(a,g)),d&&f.reportEventDrop(k,d,this.largeUnit,j,g)}),e.segDragListener=null}});return l},buildSegSelectListener:function(a){var b=this,c=this.view,d=a.event;if(this.segDragListener)return this.segDragListener;var e=this.segDragListener=new pb({dragStart:function(a){e.isTouch&&!c.isEventSelected(d)&&c.selectEvent(d)},interactionEnd:function(a){b.segDragListener=null}});return e},segDragStart:function(a,b){this.isDraggingSeg=!0,this.view.trigger("eventDragStart",a.el[0],a.event,b,{})},segDragStop:function(a,b){this.isDraggingSeg=!1,this.view.trigger("eventDragStop",a.el[0],a.event,b,{})},computeEventDrop:function(a,b,c){var d,e,f=this.view.calendar,g=a.start,h=b.start;return g.hasTime()===h.hasTime()?(d=this.diffDates(h,g),c.allDay&&T(d)?(e={start:c.start.clone(),end:f.getEventEnd(c),allDay:!1},f.normalizeEventTimes(e)):e={start:c.start.clone(),end:c.end?c.end.clone():null,allDay:c.allDay},e.start.add(d),e.end&&e.end.add(d)):e={start:h.clone(),end:null,allDay:!h.hasTime()},e},applyDragOpacity:function(a){var b=this.view.opt("dragOpacity");null!=b&&a.each(function(a,c){c.style.opacity=b})},externalDragStart:function(b,c){var d,e,f=this.view;f.opt("droppable")&&(d=a((c?c.item:null)||b.target),e=f.opt("dropAccept"),(a.isFunction(e)?e.call(d[0],d):d.is(e))&&(this.isDraggingExternal||this.listenToExternalDrag(d,b,c)))},listenToExternalDrag:function(a,b,c){var d,e=this,f=this.view.calendar,i=Ha(a),j=e.externalDragListener=new qb(this,{interactionStart:function(){e.isDraggingExternal=!0},hitOver:function(a){d=e.computeExternalDrop(a.component.getHitSpan(a),i),d&&!f.isExternalSpanAllowed(e.eventToSpan(d),d,i.eventProps)&&(g(),d=null),d&&e.renderDrag(d)},hitOut:function(){d=null},hitDone:function(){h(),e.unrenderDrag()},interactionEnd:function(b){d&&e.view.reportExternalDrop(i,d,a,b,c),e.isDraggingExternal=!1,e.externalDragListener=null}});j.startDrag(b)},computeExternalDrop:function(a,b){var c=this.view.calendar,d={start:c.applyTimezone(a.start),end:null};return b.startTime&&!d.start.hasTime()&&d.start.time(b.startTime),b.duration&&(d.end=d.start.clone().add(b.duration)),d},renderDrag:function(a,b){},unrenderDrag:function(){},buildSegResizeListener:function(a,b){var c,d,e=this,f=this.view,i=f.calendar,j=a.el,k=a.event,l=i.getEventEnd(k),m=this.segResizeListener=new qb(this,{scroll:f.opt("dragScroll"),subjectEl:j,interactionStart:function(){c=!1},dragStart:function(b){c=!0,e.handleSegMouseout(a,b),e.segResizeStart(a,b)},hitOver:function(c,h,j){var m=e.getHitSpan(j),n=e.getHitSpan(c);d=b?e.computeEventStartResize(m,n,k):e.computeEventEndResize(m,n,k),d&&(i.isEventSpanAllowed(e.eventToSpan(d),k)?d.start.isSame(k.start)&&d.end.isSame(l)&&(d=null):(g(),d=null)),d&&(f.hideEvent(k),e.renderEventResize(d,a))},hitOut:function(){d=null},hitDone:function(){e.unrenderEventResize(),f.showEvent(k),h()},interactionEnd:function(b){c&&e.segResizeStop(a,b),d&&f.reportEventResize(k,d,this.largeUnit,j,b),e.segResizeListener=null}});return m},segResizeStart:function(a,b){this.isResizingSeg=!0,this.view.trigger("eventResizeStart",a.el[0],a.event,b,{})},segResizeStop:function(a,b){this.isResizingSeg=!1,this.view.trigger("eventResizeStop",a.el[0],a.event,b,{})},computeEventStartResize:function(a,b,c){return this.computeEventResize("start",a,b,c)},computeEventEndResize:function(a,b,c){return this.computeEventResize("end",a,b,c)},computeEventResize:function(a,b,c,d){var e,f,g=this.view.calendar,h=this.diffDates(c[a],b[a]);return e={start:d.start.clone(),end:g.getEventEnd(d),allDay:d.allDay},e.allDay&&T(h)&&(e.allDay=!1,g.normalizeEventTimes(e)),e[a].add(h),e.start.isBefore(e.end)||(f=this.minResizeDuration||(d.allDay?g.defaultAllDayEventDuration:g.defaultTimedEventDuration),"start"==a?e.start=e.end.clone().subtract(f):e.end=e.start.clone().add(f)),e},renderEventResize:function(a,b){},unrenderEventResize:function(){},getEventTimeText:function(a,b,c){return null==b&&(b=this.eventTimeFormat),null==c&&(c=this.displayEventEnd),this.displayEventTime&&a.start.hasTime()?c&&a.end?this.view.formatRange(a,b):a.start.format(b):""},getSegClasses:function(a,b,c){var d=this.view,e=a.event,f=["fc-event",a.isStart?"fc-start":"fc-not-start",a.isEnd?"fc-end":"fc-not-end"].concat(e.className,e.source?e.source.className:[]);return b&&f.push("fc-draggable"),c&&f.push("fc-resizable"),d.isEventSelected(e)&&f.push("fc-selected"),f},getSegSkinCss:function(a){var b=a.event,c=this.view,d=b.source||{},e=b.color,f=d.color,g=c.opt("eventColor");return{"background-color":b.backgroundColor||e||d.backgroundColor||f||c.opt("eventBackgroundColor")||g,"border-color":b.borderColor||e||d.borderColor||f||c.opt("eventBorderColor")||g,color:b.textColor||d.textColor||c.opt("eventTextColor")}},eventToSegs:function(a){return this.eventsToSegs([a])},eventToSpan:function(a){return this.eventToSpans(a)[0]},eventToSpans:function(a){var b=this.eventToRange(a);return this.eventRangeToSpans(b,a)},eventsToSegs:function(b,c){var d=this,e=Fa(b),f=[];return a.each(e,function(a,b){var e,g=[];for(e=0;eh&&g.push({start:h,end:c.start}),h=c.end;return f>h&&g.push({start:h,end:f}),g},sortEventSegs:function(a){a.sort(ia(this,"compareEventSegs"))},compareEventSegs:function(a,b){return a.eventStartMS-b.eventStartMS||b.eventDurationMS-a.eventDurationMS||b.event.allDay-a.event.allDay||H(a.event,b.event,this.view.eventOrderSpecs)}}),Va.isBgEvent=Ca,Va.dataAttrPrefix="";var tb=Va.DayTableMixin={breakOnWeeks:!1,dayDates:null,dayIndices:null,daysPerRow:null,rowCnt:null,colCnt:null,colHeadFormat:null,updateDayTable:function(){for(var a,b,c,d=this.view,e=this.start.clone(),f=-1,g=[],h=[];e.isBefore(this.end);)d.isHiddenDay(e)?g.push(f+.5):(f++,g.push(f),h.push(e.clone())),e.add(1,"days");if(this.breakOnWeeks){for(b=h[0].day(),a=1;ac?b[0]-1:c>=b.length?b[b.length-1]+1:b[c]},computeColHeadFormat:function(){return this.rowCnt>1||this.colCnt>10?"ddd":this.colCnt>1?this.view.opt("dayOfMonthFormat"):"dddd"},sliceRangeByRow:function(a){var b,c,d,e,f,g=this.daysPerRow,h=this.view.computeDayRange(a),i=this.getDateDayIndex(h.start),j=this.getDateDayIndex(h.end.clone().subtract(1,"days")),k=[];for(b=0;b=e&&k.push({row:b,firstRowDayIndex:e-c,lastRowDayIndex:f-c,isStart:e===i,isEnd:f===j});return k},sliceRangeByDay:function(a){var b,c,d,e,f,g,h=this.daysPerRow,i=this.view.computeDayRange(a),j=this.getDateDayIndex(i.start),k=this.getDateDayIndex(i.end.clone().subtract(1,"days")),l=[];for(b=0;b=e;e++)f=Math.max(j,e),g=Math.min(k,e),f=Math.ceil(f),g=Math.floor(g),g>=f&&l.push({row:b,firstRowDayIndex:f-c,lastRowDayIndex:g-c,isStart:f===j,isEnd:g===k});return l},renderHeadHtml:function(){var a=this.view;return'
    '+this.renderHeadTrHtml()+"
    "},renderHeadIntroHtml:function(){return this.renderIntroHtml()},renderHeadTrHtml:function(){return""+(this.isRTL?"":this.renderHeadIntroHtml())+this.renderHeadDateCellsHtml()+(this.isRTL?this.renderHeadIntroHtml():"")+""},renderHeadDateCellsHtml:function(){var a,b,c=[];for(a=0;a1?' colspan="'+b+'"':"")+(c?" "+c:"")+">"+ca(a.format(this.colHeadFormat))+""},renderBgTrHtml:function(a){return""+(this.isRTL?"":this.renderBgIntroHtml(a))+this.renderBgCellsHtml(a)+(this.isRTL?this.renderBgIntroHtml(a):"")+""; -},renderBgIntroHtml:function(a){return this.renderIntroHtml()},renderBgCellsHtml:function(a){var b,c,d=[];for(b=0;b"},renderIntroHtml:function(){},bookendCells:function(a){var b=this.renderIntroHtml();b&&(this.isRTL?a.append(b):a.prepend(b))}},ub=Va.DayGrid=sb.extend(tb,{numbersVisible:!1,bottomCoordPadding:0,rowEls:null,cellEls:null,helperEls:null,rowCoordCache:null,colCoordCache:null,renderDates:function(a){var b,c,d=this.view,e=this.rowCnt,f=this.colCnt,g="";for(b=0;e>b;b++)g+=this.renderDayRowHtml(b,a);for(this.el.html(g),this.rowEls=this.el.find(".fc-row"),this.cellEls=this.el.find(".fc-day"),this.rowCoordCache=new ob({els:this.rowEls,isVertical:!0}),this.colCoordCache=new ob({els:this.cellEls.slice(0,this.colCnt),isHorizontal:!0}),b=0;e>b;b++)for(c=0;f>c;c++)d.trigger("dayRender",null,this.getCellDate(b,c),this.getCellEl(b,c))},unrenderDates:function(){this.removeSegPopover()},renderBusinessHours:function(){var a=this.view.calendar.getBusinessHoursEvents(!0),b=this.eventsToSegs(a);this.renderFill("businessHours",b,"bgevent")},renderDayRowHtml:function(a,b){var c=this.view,d=["fc-row","fc-week",c.widgetContentClass];return b&&d.push("fc-rigid"),'
    '+this.renderBgTrHtml(a)+'
    '+(this.numbersVisible?""+this.renderNumberTrHtml(a)+"":"")+"
    "},renderNumberTrHtml:function(a){return""+(this.isRTL?"":this.renderNumberIntroHtml(a))+this.renderNumberCellsHtml(a)+(this.isRTL?this.renderNumberIntroHtml(a):"")+""},renderNumberIntroHtml:function(a){return this.renderIntroHtml()},renderNumberCellsHtml:function(a){var b,c,d=[];for(b=0;b'+a.date()+""):""},computeEventTimeFormat:function(){return this.view.opt("extraSmallTimeFormat")},computeDisplayEventEnd:function(){return 1==this.colCnt},rangeUpdated:function(){this.updateDayTable()},spanToSegs:function(a){var b,c,d=this.sliceRangeByRow(a);for(b=0;b');g=c&&c.row===b?c.el.position().top:h.find(".fc-content-skeleton tbody").position().top,i.css("top",g).find("table").append(d[b].tbodyEl),h.append(i),e.push(i[0])}),this.helperEls=a(e)},unrenderHelper:function(){this.helperEls&&(this.helperEls.remove(),this.helperEls=null)},fillSegTag:"td",renderFill:function(b,c,d){var e,f,g,h=[];for(c=this.renderFillSegEls(b,c),e=0;e
    '),f=e.find("tr"),h>0&&f.append(''),f.append(c.el.attr("colspan",i-h)),g>i&&f.append(''),this.bookendCells(f),e}});ub.mixin({rowStructs:null,unrenderEvents:function(){this.removeSegPopover(),sb.prototype.unrenderEvents.apply(this,arguments)},getEventSegs:function(){return sb.prototype.getEventSegs.call(this).concat(this.popoverSegs||[])},renderBgSegs:function(b){var c=a.grep(b,function(a){return a.event.allDay});return sb.prototype.renderBgSegs.call(this,c)},renderFgSegs:function(b){var c;return b=this.renderFgSegEls(b),c=this.rowStructs=this.renderSegRows(b),this.rowEls.each(function(b,d){a(d).find(".fc-content-skeleton > table").append(c[b].tbodyEl)}),b},unrenderFgSegs:function(){for(var a,b=this.rowStructs||[];a=b.pop();)a.tbodyEl.remove();this.rowStructs=null},renderSegRows:function(a){var b,c,d=[];for(b=this.groupSegRows(a),c=0;c'+ca(c)+"")),d=''+(ca(f.title||"")||" ")+"",'
    '+(this.isRTL?d+" "+l:l+" "+d)+"
    "+(h?'
    ':"")+(i?'
    ':"")+""},renderSegRow:function(b,c){function d(b){for(;b>g;)k=(r[e-1]||[])[g],k?k.attr("rowspan",parseInt(k.attr("rowspan")||1,10)+1):(k=a(""),h.append(k)),q[e][g]=k,r[e][g]=k,g++}var e,f,g,h,i,j,k,l=this.colCnt,m=this.buildSegLevels(c),n=Math.max(1,m.length),o=a(""),p=[],q=[],r=[];for(e=0;n>e;e++){if(f=m[e],g=0,h=a(""),p.push([]),q.push([]),r.push([]),f)for(i=0;i').append(j.el),j.leftCol!=j.rightCol?k.attr("colspan",j.rightCol-j.leftCol+1):r[e][g]=k;g<=j.rightCol;)q[e][g]=k,p[e][g]=j,g++;h.append(k)}d(l),this.bookendCells(h),o.append(h)}return{row:b,tbodyEl:o,cellMatrix:q,segMatrix:p,segLevels:m,segs:c}},buildSegLevels:function(a){var b,c,d,e=[];for(this.sortEventSegs(a),b=0;b td > :first-child").each(c),e.position().top+f>h)return d;return!1},limitRow:function(b,c){function d(d){for(;d>w;)j=t.getCellSegs(b,w,c),j.length&&(m=f[c-1][w],s=t.renderMoreLink(b,w,j),r=a("
    ").append(s),m.append(r),v.push(r[0])),w++}var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t=this,u=this.rowStructs[b],v=[],w=0;if(c&&c').attr("rowspan",n),j=l[p],s=this.renderMoreLink(b,i.leftCol+p,[i].concat(j)),r=a("
    ").append(s),q.append(r),o.push(q[0]),v.push(q[0]);m.addClass("fc-limited").after(a(o)),g.push(m[0])}}d(this.colCnt),u.moreEls=a(v),u.limitedEls=a(g)}},unlimitRow:function(a){var b=this.rowStructs[a];b.moreEls&&(b.moreEls.remove(),b.moreEls=null),b.limitedEls&&(b.limitedEls.removeClass("fc-limited"),b.limitedEls=null)},renderMoreLink:function(b,c,d){var e=this,f=this.view;return a('').text(this.getMoreLinkText(d.length)).on("click",function(g){var h=f.opt("eventLimitClick"),i=e.getCellDate(b,c),j=a(this),k=e.getCellEl(b,c),l=e.getCellSegs(b,c),m=e.resliceDaySegs(l,i),n=e.resliceDaySegs(d,i);"function"==typeof h&&(h=f.trigger("eventLimitClick",null,{date:i,dayEl:k,moreEl:j,segs:m,hiddenSegs:n},g)),"popover"===h?e.showSegPopover(b,c,j,m):"string"==typeof h&&f.calendar.zoomTo(i,h)})},showSegPopover:function(a,b,c,d){var e,f,g=this,h=this.view,i=c.parent();e=1==this.rowCnt?h.el:this.rowEls.eq(a),f={className:"fc-more-popover",content:this.renderSegPopoverContent(a,b,d),parentEl:this.el,top:e.offset().top,autoHide:!0,viewportConstrain:h.opt("popoverViewportConstrain"),hide:function(){g.segPopover.removeElement(),g.segPopover=null,g.popoverSegs=null}},this.isRTL?f.right=i.offset().left+i.outerWidth()+1:f.left=i.offset().left-1,this.segPopover=new nb(f),this.segPopover.show()},renderSegPopoverContent:function(b,c,d){var e,f=this.view,g=f.opt("theme"),h=this.getCellDate(b,c).format(f.opt("dayPopoverFormat")),i=a('
    '+ca(h)+'
    '),j=i.find(".fc-event-container");for(d=this.renderFgSegEls(d,!0),this.popoverSegs=d,e=0;e'+this.renderBgTrHtml(0)+'
    '+this.renderSlatRowHtml()+"
    "},renderSlatRowHtml:function(){for(var a,c,d,e=this.view,f=this.isRTL,g="",h=b.duration(+this.minTime);h"+(c?""+ca(a.format(this.labelFormat))+"":"")+"",g+='"+(f?"":d)+''+(f?d:"")+"",h.add(this.slotDuration);return g},processOptions:function(){var c,d=this.view,e=d.opt("slotDuration"),f=d.opt("snapDuration");e=b.duration(e),f=f?b.duration(f):e,this.slotDuration=e,this.snapDuration=f,this.snapsPerSlot=e/f,this.minResizeDuration=f,this.minTime=b.duration(d.opt("minTime")),this.maxTime=b.duration(d.opt("maxTime")),c=d.opt("slotLabelFormat"),a.isArray(c)&&(c=c[c.length-1]),this.labelFormat=c||d.opt("axisFormat")||d.opt("smallTimeFormat"),c=d.opt("slotLabelInterval"),this.labelInterval=c?b.duration(c):this.computeLabelInterval(e)},computeLabelInterval:function(a){var c,d,e;for(c=Mb.length-1;c>=0;c--)if(d=b.duration(Mb[c]),e=R(d,a),ha(e)&&e>1)return d;return b.duration(a)},computeEventTimeFormat:function(){return this.view.opt("noMeridiemTimeFormat")},computeDisplayEventEnd:function(){return!0},prepareHits:function(){this.colCoordCache.build(),this.slatCoordCache.build()},releaseHits:function(){this.colCoordCache.clear()},queryHit:function(a,b){var c=this.snapsPerSlot,d=this.colCoordCache,e=this.slatCoordCache,f=d.getHorizontalIndex(a),g=e.getVerticalIndex(b);if(null!=f&&null!=g){var h=e.getTopOffset(g),i=e.getHeight(g),j=(b-h)/i,k=Math.floor(j*c),l=g*c+k,m=h+k/c*i,n=h+(k+1)/c*i;return{col:f,snap:l,component:this,left:d.getLeftOffset(f),right:d.getRightOffset(f),top:m,bottom:n}}},getHitSpan:function(a){var b,c=this.getCellDate(0,a.col),d=this.computeSnapTime(a.snap);return c.time(d),b=c.clone().add(this.snapDuration),{start:c,end:b}},getHitEl:function(a){return this.colEls.eq(a.col)},rangeUpdated:function(){this.updateDayTable()},computeSnapTime:function(a){return b.duration(this.minTime+this.snapDuration*a)},spanToSegs:function(a){var b,c=this.sliceRangeByTimes(a);for(b=0;b
    ').css("top",e).appendTo(this.colContainerEls.eq(d[c].col))[0]);d.length>0&&f.push(a('
    ').css("top",e).appendTo(this.el.find(".fc-content-skeleton"))[0]),this.nowIndicatorEls=a(f)},unrenderNowIndicator:function(){this.nowIndicatorEls&&(this.nowIndicatorEls.remove(),this.nowIndicatorEls=null)},renderSelection:function(a){this.view.opt("selectHelper")?this.renderEventLocationHelper(a):this.renderHighlight(a)},unrenderSelection:function(){this.unrenderHelper(),this.unrenderHighlight()},renderHighlight:function(a){this.renderHighlightSegs(this.spanToSegs(a))},unrenderHighlight:function(){this.unrenderHighlightSegs()}});vb.mixin({colContainerEls:null,fgContainerEls:null,bgContainerEls:null,helperContainerEls:null,highlightContainerEls:null,businessContainerEls:null,fgSegs:null,bgSegs:null,helperSegs:null,highlightSegs:null,businessSegs:null,renderContentSkeleton:function(){var b,c,d="";for(b=0;b
    ';c=a('
    '+d+"
    "),this.colContainerEls=c.find(".fc-content-col"),this.helperContainerEls=c.find(".fc-helper-container"),this.fgContainerEls=c.find(".fc-event-container:not(.fc-helper-container)"),this.bgContainerEls=c.find(".fc-bgevent-container"),this.highlightContainerEls=c.find(".fc-highlight-container"),this.businessContainerEls=c.find(".fc-business-container"),this.bookendCells(c.find("tr")),this.el.append(c)},renderFgSegs:function(a){return a=this.renderFgSegsIntoContainers(a,this.fgContainerEls),this.fgSegs=a,a},unrenderFgSegs:function(){this.unrenderNamedSegs("fgSegs")},renderHelperSegs:function(b,c){var d,e,f,g=[];for(b=this.renderFgSegsIntoContainers(b,this.helperContainerEls),d=0;d
    '+(c?'
    '+ca(c)+"
    ":"")+(g.title?'
    '+ca(g.title)+"
    ":"")+'
    '+(j?'
    ':"")+""},updateSegVerticals:function(a){this.computeSegVerticals(a),this.assignSegVerticals(a)},computeSegVerticals:function(a){var b,c;for(b=0;b1?"ll":"LL"},formatRange:function(a,b,c){var d=a.end;return d.hasTime()||(d=d.clone().subtract(1)),sa(a.start,d,b,c,this.opt("isRTL"))},setElement:function(a){this.el=a,this.bindGlobalHandlers()},removeElement:function(){this.clear(),this.isSkeletonRendered&&(this.unrenderSkeleton(),this.isSkeletonRendered=!1),this.unbindGlobalHandlers(),this.el.remove()},display:function(b){var c=this,d=null;return this.displaying&&(d=this.queryScroll()),this.calendar.freezeContentHeight(),this.clear().then(function(){return c.displaying=a.when(c.displayView(b)).then(function(){c.forceScroll(c.computeInitialScroll(d)),c.calendar.unfreezeContentHeight(),c.triggerRender()})})},clear:function(){var b=this,c=this.displaying;return c?c.then(function(){return b.displaying=null,b.clearEvents(),b.clearView()}):a.when()},displayView:function(a){this.isSkeletonRendered||(this.renderSkeleton(),this.isSkeletonRendered=!0),a&&this.setDate(a),this.render&&this.render(),this.renderDates(),this.updateSize(),this.renderBusinessHours(),this.startNowIndicator()},clearView:function(){this.unselect(),this.stopNowIndicator(),this.triggerUnrender(),this.unrenderBusinessHours(),this.unrenderDates(),this.destroy&&this.destroy()},renderSkeleton:function(){},unrenderSkeleton:function(){},renderDates:function(){},unrenderDates:function(){},triggerRender:function(){this.trigger("viewRender",this,this,this.el)},triggerUnrender:function(){this.trigger("viewDestroy",this,this,this.el)},bindGlobalHandlers:function(){this.listenTo(a(document),"mousedown",this.handleDocumentMousedown),this.listenTo(a(document),"touchstart",this.processUnselect)},unbindGlobalHandlers:function(){this.stopListeningTo(a(document))},initThemingProps:function(){var a=this.opt("theme")?"ui":"fc";this.widgetHeaderClass=a+"-widget-header",this.widgetContentClass=a+"-widget-content",this.highlightStateClass=a+"-state-highlight"},renderBusinessHours:function(){},unrenderBusinessHours:function(){},startNowIndicator:function(){var a,c,d,e=this;this.opt("nowIndicator")&&(a=this.getNowIndicatorUnit(),a&&(c=ia(this,"updateNowIndicator"),this.initialNowDate=this.calendar.getNow(),this.initialNowQueriedMs=+new Date,this.renderNowIndicator(this.initialNowDate),this.isNowIndicatorRendered=!0,d=this.initialNowDate.clone().startOf(a).add(1,a)-this.initialNowDate,this.nowIndicatorTimeoutID=setTimeout(function(){e.nowIndicatorTimeoutID=null,c(),d=+b.duration(1,a),d=Math.max(100,d),e.nowIndicatorIntervalID=setInterval(c,d)},d)))},updateNowIndicator:function(){this.isNowIndicatorRendered&&(this.unrenderNowIndicator(),this.renderNowIndicator(this.initialNowDate.clone().add(new Date-this.initialNowQueriedMs)))},stopNowIndicator:function(){this.isNowIndicatorRendered&&(this.nowIndicatorTimeoutID&&(clearTimeout(this.nowIndicatorTimeoutID),this.nowIndicatorTimeoutID=null),this.nowIndicatorIntervalID&&(clearTimeout(this.nowIndicatorIntervalID),this.nowIndicatorIntervalID=null),this.unrenderNowIndicator(),this.isNowIndicatorRendered=!1)},getNowIndicatorUnit:function(){},renderNowIndicator:function(a){},unrenderNowIndicator:function(){},updateSize:function(a){var b;a&&(b=this.queryScroll()),this.updateHeight(a),this.updateWidth(a),this.updateNowIndicator(),a&&this.setScroll(b)},updateWidth:function(a){},updateHeight:function(a){var b=this.calendar;this.setHeight(b.getSuggestedViewHeight(),b.isHeightAuto())},setHeight:function(a,b){},computeInitialScroll:function(a){return 0},queryScroll:function(){},setScroll:function(a){},forceScroll:function(a){var b=this;this.setScroll(a),setTimeout(function(){b.setScroll(a)},0)},displayEvents:function(a){var b=this.queryScroll();this.clearEvents(),this.renderEvents(a),this.isEventsRendered=!0,this.setScroll(b),this.triggerEventRender()},clearEvents:function(){var a;this.isEventsRendered&&(a=this.queryScroll(),this.triggerEventUnrender(),this.destroyEvents&&this.destroyEvents(),this.unrenderEvents(),this.setScroll(a),this.isEventsRendered=!1)},renderEvents:function(a){},unrenderEvents:function(){},triggerEventRender:function(){this.renderedEventSegEach(function(a){this.trigger("eventAfterRender",a.event,a.event,a.el)}),this.trigger("eventAfterAllRender")},triggerEventUnrender:function(){this.renderedEventSegEach(function(a){this.trigger("eventDestroy",a.event,a.event,a.el)})},resolveEventEl:function(b,c){var d=this.trigger("eventRender",b,b,c);return d===!1?c=null:d&&d!==!0&&(c=a(d)),c},showEvent:function(a){this.renderedEventSegEach(function(a){a.el.css("visibility","")},a)},hideEvent:function(a){this.renderedEventSegEach(function(a){a.el.css("visibility","hidden")},a)},renderedEventSegEach:function(a,b){var c,d=this.getEventSegs();for(c=0;cb;b++)(d[b]=-1!==a.inArray(b,c))||e++;if(!e)throw"invalid hiddenDays";this.isHiddenDayHash=d},isHiddenDay:function(a){return b.isMoment(a)&&(a=a.day()),this.isHiddenDayHash[a]},skipHiddenDays:function(a,b,c){var d=a.clone();for(b=b||1;this.isHiddenDayHash[(d.day()+(c?b:0)+7)%7];)d.add(b,"days");return d},computeDayRange:function(a){var b,c=a.start.clone().stripTime(),d=a.end,e=null;return d&&(e=d.clone().stripTime(),b=+d.time(),b&&b>=this.nextDayThreshold&&e.add(1,"days")),(!d||c>=e)&&(e=c.clone().add(1,"days")),{start:c,end:e}},isMultiDayEvent:function(a){var b=this.computeDayRange(a);return b.end.diff(b.start,"days")>1}}),xb=Va.Scroller=xa.extend({el:null,scrollEl:null,overflowX:null,overflowY:null,constructor:function(a){a=a||{},this.overflowX=a.overflowX||a.overflow||"auto",this.overflowY=a.overflowY||a.overflow||"auto"},render:function(){this.el=this.renderEl(),this.applyOverflow()},renderEl:function(){return this.scrollEl=a('
    ')},clear:function(){this.setHeight("auto"),this.applyOverflow()},destroy:function(){this.el.remove()},applyOverflow:function(){this.scrollEl.css({"overflow-x":this.overflowX,"overflow-y":this.overflowY})},lockOverflow:function(a){var b=this.overflowX,c=this.overflowY;a=a||this.getScrollbarWidths(),"auto"===b&&(b=a.top||a.bottom||this.scrollEl[0].scrollWidth-1>this.scrollEl[0].clientWidth?"scroll":"hidden"),"auto"===c&&(c=a.left||a.right||this.scrollEl[0].scrollHeight-1>this.scrollEl[0].clientHeight?"scroll":"hidden"),this.scrollEl.css({"overflow-x":b,"overflow-y":c})},setHeight:function(a){this.scrollEl.height(a)},getScrollTop:function(){return this.scrollEl.scrollTop()},setScrollTop:function(a){this.scrollEl.scrollTop(a)},getClientWidth:function(){return this.scrollEl[0].clientWidth},getClientHeight:function(){return this.scrollEl[0].clientHeight},getScrollbarWidths:function(){return q(this.scrollEl)}}),yb=Va.Calendar=xa.extend({dirDefaults:null,langDefaults:null,overrides:null,options:null,viewSpecCache:null,view:null,header:null,loadingLevel:0,constructor:Pa,initialize:function(){},initOptions:function(a){var b,e,f,g;a=d(a),b=a.lang,e=zb[b],e||(b=yb.defaults.lang,e=zb[b]||{}),f=ba(a.isRTL,e.isRTL,yb.defaults.isRTL),g=f?yb.rtlDefaults:{},this.dirDefaults=g,this.langDefaults=e,this.overrides=a,this.options=c([yb.defaults,g,e,a]),Qa(this.options),this.viewSpecCache={}},getViewSpec:function(a){var b=this.viewSpecCache;return b[a]||(b[a]=this.buildViewSpec(a))},getUnitViewSpec:function(b){var c,d,e;if(-1!=a.inArray(b,$a))for(c=this.header.getViewsWithButtons(),a.each(Va.views,function(a){c.push(a)}),d=0;d1,this.weekNumbersVisible=this.opt("weekNumbers"),this.dayGrid.numbersVisible=this.dayNumbersVisible||this.weekNumbersVisible,this.el.addClass("fc-basic-view").html(this.renderSkeletonHtml()),this.renderHead(),this.scroller.render();var b=this.scroller.el.addClass("fc-day-grid-container"),c=a('
    ').appendTo(b);this.el.find(".fc-body > tr > td").append(b),this.dayGrid.setElement(c),this.dayGrid.renderDates(this.hasRigidRows())},renderHead:function(){this.headContainerEl=this.el.find(".fc-head-container").html(this.dayGrid.renderHeadHtml()),this.headRowEl=this.headContainerEl.find(".fc-row")},unrenderDates:function(){this.dayGrid.unrenderDates(),this.dayGrid.removeElement(),this.scroller.destroy()},renderBusinessHours:function(){this.dayGrid.renderBusinessHours()},renderSkeletonHtml:function(){return'
    '},weekNumberStyleAttr:function(){return null!==this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},hasRigidRows:function(){var a=this.opt("eventLimit");return a&&"number"!=typeof a},updateWidth:function(){this.weekNumbersVisible&&(this.weekNumberWidth=k(this.el.find(".fc-week-number")))},setHeight:function(a,b){var c,d,g=this.opt("eventLimit");this.scroller.clear(),f(this.headRowEl),this.dayGrid.removeSegPopover(),g&&"number"==typeof g&&this.dayGrid.limitRows(g),c=this.computeScrollerHeight(a),this.setGridHeight(c,b),g&&"number"!=typeof g&&this.dayGrid.limitRows(g),b||(this.scroller.setHeight(c),d=this.scroller.getScrollbarWidths(),(d.left||d.right)&&(e(this.headRowEl,d),c=this.computeScrollerHeight(a),this.scroller.setHeight(c)),this.scroller.lockOverflow(d))},computeScrollerHeight:function(a){return a-l(this.el,this.scroller.el)},setGridHeight:function(a,b){b?j(this.dayGrid.rowEls):i(this.dayGrid.rowEls,a,!0)},queryScroll:function(){return this.scroller.getScrollTop()},setScroll:function(a){this.scroller.setScrollTop(a)},prepareHits:function(){this.dayGrid.prepareHits()},releaseHits:function(){this.dayGrid.releaseHits()},queryHit:function(a,b){return this.dayGrid.queryHit(a,b)},getHitSpan:function(a){return this.dayGrid.getHitSpan(a)},getHitEl:function(a){return this.dayGrid.getHitEl(a)},renderEvents:function(a){this.dayGrid.renderEvents(a),this.updateHeight()},getEventSegs:function(){return this.dayGrid.getEventSegs()},unrenderEvents:function(){this.dayGrid.unrenderEvents()},renderDrag:function(a,b){return this.dayGrid.renderDrag(a,b)},unrenderDrag:function(){this.dayGrid.unrenderDrag()},renderSelection:function(a){this.dayGrid.renderSelection(a)},unrenderSelection:function(){this.dayGrid.unrenderSelection()}}),Gb={renderHeadIntroHtml:function(){var a=this.view;return a.weekNumbersVisible?'"+ca(a.opt("weekNumberTitle"))+"":""},renderNumberIntroHtml:function(a){var b=this.view;return b.weekNumbersVisible?'"+this.getCellDate(a,0).format("w")+"":""},renderBgIntroHtml:function(){var a=this.view;return a.weekNumbersVisible?'":""},renderIntroHtml:function(){var a=this.view;return a.weekNumbersVisible?'":""}},Hb=Va.MonthView=Fb.extend({computeRange:function(a){var b,c=Fb.prototype.computeRange.call(this,a);return this.isFixedWeeks()&&(b=Math.ceil(c.end.diff(c.start,"weeks",!0)),c.end.add(6-b,"weeks")),c},setGridHeight:function(a,b){b=b||"variable"===this.opt("weekMode"),b&&(a*=this.rowCnt/6),i(this.dayGrid.rowEls,a,!b)},isFixedWeeks:function(){var a=this.opt("weekMode");return a?"fixed"===a:this.opt("fixedWeekCount")}});Wa.basic={"class":Fb},Wa.basicDay={type:"basic",duration:{days:1}},Wa.basicWeek={type:"basic",duration:{weeks:1}},Wa.month={"class":Hb,duration:{months:1},defaults:{fixedWeekCount:!0}};var Ib=Va.AgendaView=wb.extend({scroller:null,timeGridClass:vb,timeGrid:null,dayGridClass:ub,dayGrid:null,axisWidth:null,headContainerEl:null,noScrollRowEls:null,bottomRuleEl:null,initialize:function(){this.timeGrid=this.instantiateTimeGrid(),this.opt("allDaySlot")&&(this.dayGrid=this.instantiateDayGrid()),this.scroller=new xb({overflowX:"hidden",overflowY:"auto"})},instantiateTimeGrid:function(){var a=this.timeGridClass.extend(Jb);return new a(this)},instantiateDayGrid:function(){var a=this.dayGridClass.extend(Kb);return new a(this)},setRange:function(a){wb.prototype.setRange.call(this,a),this.timeGrid.setRange(a),this.dayGrid&&this.dayGrid.setRange(a)},renderDates:function(){this.el.addClass("fc-agenda-view").html(this.renderSkeletonHtml()),this.renderHead(),this.scroller.render();var b=this.scroller.el.addClass("fc-time-grid-container"),c=a('
    ').appendTo(b);this.el.find(".fc-body > tr > td").append(b),this.timeGrid.setElement(c),this.timeGrid.renderDates(),this.bottomRuleEl=a('
    ').appendTo(this.timeGrid.el),this.dayGrid&&(this.dayGrid.setElement(this.el.find(".fc-day-grid")),this.dayGrid.renderDates(),this.dayGrid.bottomCoordPadding=this.dayGrid.el.next("hr").outerHeight()),this.noScrollRowEls=this.el.find(".fc-row:not(.fc-scroller *)")},renderHead:function(){this.headContainerEl=this.el.find(".fc-head-container").html(this.timeGrid.renderHeadHtml())},unrenderDates:function(){this.timeGrid.unrenderDates(),this.timeGrid.removeElement(),this.dayGrid&&(this.dayGrid.unrenderDates(),this.dayGrid.removeElement()),this.scroller.destroy()},renderSkeletonHtml:function(){return'
    '+(this.dayGrid?'

    ':"")+"
    "},axisStyleAttr:function(){return null!==this.axisWidth?'style="width:'+this.axisWidth+'px"':""},renderBusinessHours:function(){this.timeGrid.renderBusinessHours(),this.dayGrid&&this.dayGrid.renderBusinessHours()},unrenderBusinessHours:function(){this.timeGrid.unrenderBusinessHours(),this.dayGrid&&this.dayGrid.unrenderBusinessHours()},getNowIndicatorUnit:function(){return this.timeGrid.getNowIndicatorUnit()},renderNowIndicator:function(a){this.timeGrid.renderNowIndicator(a)},unrenderNowIndicator:function(){this.timeGrid.unrenderNowIndicator()},updateSize:function(a){this.timeGrid.updateSize(a),wb.prototype.updateSize.call(this,a)},updateWidth:function(){this.axisWidth=k(this.el.find(".fc-axis"))},setHeight:function(a,b){var c,d,g;this.bottomRuleEl.hide(),this.scroller.clear(),f(this.noScrollRowEls),this.dayGrid&&(this.dayGrid.removeSegPopover(),c=this.opt("eventLimit"),c&&"number"!=typeof c&&(c=Lb),c&&this.dayGrid.limitRows(c)),b||(d=this.computeScrollerHeight(a),this.scroller.setHeight(d),g=this.scroller.getScrollbarWidths(),(g.left||g.right)&&(e(this.noScrollRowEls,g),d=this.computeScrollerHeight(a),this.scroller.setHeight(d)),this.scroller.lockOverflow(g),this.timeGrid.getTotalSlatHeight()"+ca(a)+""):'"},renderBgIntroHtml:function(){var a=this.view;return'"},renderIntroHtml:function(){var a=this.view;return'"}},Kb={renderBgIntroHtml:function(){var a=this.view;return'"+(a.opt("allDayHtml")||ca(a.opt("allDayText")))+""},renderIntroHtml:function(){var a=this.view;return'"}},Lb=5,Mb=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];return Wa.agenda={"class":Ib,defaults:{allDaySlot:!0,allDayText:"all-day",slotDuration:"00:30:00",minTime:"00:00:00",maxTime:"24:00:00",slotEventOverlap:!0}},Wa.agendaDay={type:"agenda",duration:{days:1}},Wa.agendaWeek={type:"agenda",duration:{weeks:1}},Va}); \ No newline at end of file +!function(t){"function"==typeof define&&define.amd?define(["jquery","moment"],t):"object"==typeof exports?module.exports=t(require("jquery"),require("moment")):t(jQuery,moment)}(function(t,e){function n(t){return q(t,$t)}function i(t,e){e.left&&t.css({"border-left-width":1,"margin-left":e.left-1}),e.right&&t.css({"border-right-width":1,"margin-right":e.right-1})}function r(t){t.css({"margin-left":"","margin-right":"","border-left-width":"","border-right-width":""})}function s(){t("body").addClass("fc-not-allowed")}function o(){t("body").removeClass("fc-not-allowed")}function l(e,n,i){var r=Math.floor(n/e.length),s=Math.floor(n-r*(e.length-1)),o=[],l=[],u=[],c=0;a(e),e.each(function(n,i){var a=n===e.length-1?s:r,d=t(i).outerHeight(!0);d *").each(function(e,i){var r=t(i).outerWidth();r>n&&(n=r)}),n++,e.width(n),n}function c(t,e){var n,i=t.add(e);return i.css({position:"relative",left:-1}),n=t.outerHeight()-e.outerHeight(),i.css({position:"",left:""}),n}function d(e){var n=e.css("position"),i=e.parents().filter(function(){var e=t(this);return/(auto|scroll)/.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==n&&i.length?i:t(e[0].ownerDocument||document)}function h(t,e){var n=t.offset(),i=n.left-(e?e.left:0),r=n.top-(e?e.top:0);return{left:i,right:i+t.outerWidth(),top:r,bottom:r+t.outerHeight()}}function f(t,e){var n=t.offset(),i=p(t),r=n.left+y(t,"border-left-width")+i.left-(e?e.left:0),s=n.top+y(t,"border-top-width")+i.top-(e?e.top:0);return{left:r,right:r+t[0].clientWidth,top:s,bottom:s+t[0].clientHeight}}function g(t,e){var n=t.offset(),i=n.left+y(t,"border-left-width")+y(t,"padding-left")-(e?e.left:0),r=n.top+y(t,"border-top-width")+y(t,"padding-top")-(e?e.top:0);return{left:i,right:i+t.width(),top:r,bottom:r+t.height()}}function p(t){var e=t.innerWidth()-t[0].clientWidth,n={left:0,right:0,top:0,bottom:t.innerHeight()-t[0].clientHeight};return v()&&"rtl"==t.css("direction")?n.left=e:n.right=e,n}function v(){return null===Qt&&(Qt=m()),Qt}function m(){var e=t("
    ").css({position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}).appendTo("body"),n=e.children(),i=n.offset().left>e.offset().left;return e.remove(),i}function y(t,e){return parseFloat(t.css(e))||0}function S(t){return 1==t.which&&!t.ctrlKey}function w(t){if(void 0!==t.pageX)return t.pageX;var e=t.originalEvent.touches;return e?e[0].pageX:void 0}function E(t){if(void 0!==t.pageY)return t.pageY;var e=t.originalEvent.touches;return e?e[0].pageY:void 0}function b(t){return/^touch/.test(t.type)}function D(t){t.addClass("fc-unselectable").on("selectstart",T)}function T(t){t.preventDefault()}function C(t){return!!window.addEventListener&&(window.addEventListener("scroll",t,!0),!0)}function H(t){return!!window.removeEventListener&&(window.removeEventListener("scroll",t,!0),!0)}function R(t,e){var n={left:Math.max(t.left,e.left),right:Math.min(t.right,e.right),top:Math.max(t.top,e.top),bottom:Math.min(t.bottom,e.bottom)};return n.lefta&&o=a?(n=o.clone(),r=!0):(n=a.clone(),r=!1),l<=u?(i=l.clone(),s=!0):(i=u.clone(),s=!1),{start:n,end:i,isStart:r,isEnd:s}}function N(t,n){return e.duration({days:t.clone().stripTime().diff(n.clone().stripTime(),"days"),ms:t.time()-n.time()})}function G(t,n){return e.duration({days:t.clone().stripTime().diff(n.clone().stripTime(),"days")})}function O(t,n,i){return e.duration(Math.round(t.diff(n,i,!0)),i)}function A(t,e){var n,i,r;for(n=0;n=1&&ot(r)));n++);return i}function V(t,n,i){return null!=i?i.diff(n,t,!0):e.isDuration(n)?n.as(t):n.end.diff(n.start,t,!0)}function P(t,e,n){var i;return W(n)?(e-t)/n:(i=n.asMonths(),Math.abs(i)>=1&&ot(i)?e.diff(t,"months",!0)/i:e.diff(t,"days",!0)/n.asDays())}function _(t,e){var n,i;return W(t)||W(e)?t/e:(n=t.asMonths(),i=e.asMonths(),Math.abs(n)>=1&&ot(n)&&Math.abs(i)>=1&&ot(i)?n/i:t.asDays()/e.asDays())}function Y(t,n){var i;return W(t)?e.duration(t*n):(i=t.asMonths(),Math.abs(i)>=1&&ot(i)?e.duration({months:i*n}):e.duration({days:t.asDays()*n}))}function W(t){return Boolean(t.hours()||t.minutes()||t.seconds()||t.milliseconds())}function U(t){return"[object Date]"===Object.prototype.toString.call(t)||t instanceof Date}function j(t){return/^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(t)}function q(t,e){var n,i,r,s,o,l,a={};if(e)for(n=0;n=0;s--)if(o=t[s][i],"object"==typeof o)r.unshift(o);else if(void 0!==o){a[i]=o;break}r.length&&(a[i]=q(r))}for(n=t.length-1;n>=0;n--){l=t[n];for(i in l)i in a||(a[i]=l[i])}return a}function Z(t){var e=function(){};return e.prototype=t,new e}function $(t,e){for(var n in t)Q(t,n)&&(e[n]=t[n])}function Q(t,e){return Jt.call(t,e)}function X(e){return/undefined|null|boolean|number|string/.test(t.type(e))}function K(e,n,i){if(t.isFunction(e)&&(e=[e]),e){var r,s;for(r=0;r/g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"
    ")}function et(t){return t.replace(/&.*?;/g,"")}function nt(e){var n=[];return t.each(e,function(t,e){null!=e&&n.push(t+":"+e)}),n.join(";")}function it(e){var n=[];return t.each(e,function(t,e){null!=e&&n.push(t+'="'+tt(e)+'"')}),n.join(" ")}function rt(t){return t.charAt(0).toUpperCase()+t.slice(1)}function st(t,e){return t-e}function ot(t){return t%1===0}function lt(t,e){var n=t[e];return function(){return n.apply(t,arguments)}}function at(t,e,n){var i,r,s,o,l,a=function(){var u=+new Date-o;uo&&(s=vt(t,e,u,c,n[l]),s!==!1);l--)h=s+h;for(a=o;a<=l;a++)f+=ft(t,n[a]),g+=ft(e,n[a]);return(f||g)&&(p=r?g+i+f:f+i+g),d+p+h}function vt(t,e,n,i,r){var s,o;return"string"==typeof r?r:!!((s=r.token)&&(o=oe[s.charAt(0)],o&&n.isSame(i,o)))&&ct(t,s)}function mt(t){return t in le?le[t]:le[t]=yt(t)}function yt(t){for(var e,n=[],i=/\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g;e=i.exec(t);)e[1]?n.push(e[1]):e[2]?n.push({maybe:yt(e[2])}):e[3]?n.push({token:e[3]}):e[5]&&n.push(e[5]);return n}function St(){}function wt(t,e){var n;return Q(e,"constructor")&&(n=e.constructor),"function"!=typeof n&&(n=e.constructor=function(){t.apply(this,arguments)}),n.prototype=Z(t.prototype),$(e,n.prototype),$(t,n),n}function Et(t,e){$(e,t.prototype)}function bt(e){var n=t.Deferred(),i=n.promise();if("function"==typeof e&&e(function(t){bt.immediate&&(i._value=t),n.resolve(t)},function(){n.reject()}),bt.immediate){var r=i.then;i.then=function(t,e){var n=i.state();if("resolved"===n){if("function"==typeof t)return bt.resolve(t(i._value))}else if("rejected"===n&&"function"==typeof e)return e(),i;return r.call(i,t,e)}}return i}function Dt(t){function e(t){return new bt(function(e){var i=function(){bt.resolve(t()).then(e).then(function(){n.shift(),n.length&&n[0]()})};n.push(i),1===n.length&&i()})}var n=[];this.add="number"==typeof t?at(e,t):e,this.addQuickly=e}function Tt(t,e){return!t&&!e||!(!t||!e)&&(t.component===e.component&&Ct(t,e)&&Ct(e,t))}function Ct(t,e){for(var n in t)if(!/^(component|left|right|top|bottom)$/.test(n)&&t[n]!==e[n])return!1;return!0}function Ht(t){return{start:t.start.clone(),end:t.end?t.end.clone():null,allDay:t.allDay}}function Rt(t){var e=It(t);return"background"===e||"inverse-background"===e}function xt(t){return"inverse-background"===It(t)}function It(t){return J((t.source||{}).rendering,t.rendering)}function kt(t){var e,n,i={};for(e=0;e=t.leftCol)return!0;return!1}function zt(t,e){return t.leftCol-e.leftCol}function Ft(t){var e,n,i,r=[];for(e=0;ee.top&&t.top"),g.append(o("left")).append(o("right")).append(o("center")).append('
    ')):s()}function s(){g&&(g.remove(),g=f.el=null)}function o(i){var r=t('
    '),s=n.layout[i];return s&&t.each(s.split(" "),function(n){var i,s=t(),o=!0;t.each(this.split(","),function(n,i){var r,l,a,u,c,d,h,f,g,m;"title"==i?(s=s.add(t("

     

    ")),o=!1):((r=(e.options.customButtons||{})[i])?(a=function(t){r.click&&r.click.call(m[0],t)},u="",c=r.text):(l=e.getViewSpec(i))?(a=function(){e.changeView(i)},v.push(i),u=l.buttonTextOverride,c=l.buttonTextDefault):e[i]&&(a=function(){e[i]()},u=(e.overrides.buttonText||{})[i],c=e.options.buttonText[i]),a&&(d=r?r.themeIcon:e.options.themeButtonIcons[i],h=r?r.icon:e.options.buttonIcons[i],f=u?tt(u):d&&e.options.theme?"":h&&!e.options.theme?"":tt(c),g=["fc-"+i+"-button",p+"-button",p+"-state-default"],m=t('").click(function(t){m.hasClass(p+"-state-disabled")||(a(t),(m.hasClass(p+"-state-active")||m.hasClass(p+"-state-disabled"))&&m.removeClass(p+"-state-hover"))}).mousedown(function(){m.not("."+p+"-state-active").not("."+p+"-state-disabled").addClass(p+"-state-down")}).mouseup(function(){m.removeClass(p+"-state-down")}).hover(function(){m.not("."+p+"-state-active").not("."+p+"-state-disabled").addClass(p+"-state-hover")},function(){m.removeClass(p+"-state-hover").removeClass(p+"-state-down")}),s=s.add(m)))}),o&&s.first().addClass(p+"-corner-left").end().last().addClass(p+"-corner-right").end(),s.length>1?(i=t("
    "),o&&i.addClass("fc-button-group"),i.append(s),r.append(i)):r.append(s)}),r}function l(t){g&&g.find("h2").text(t)}function a(t){g&&g.find(".fc-"+t+"-button").addClass(p+"-state-active")}function u(t){g&&g.find(".fc-"+t+"-button").removeClass(p+"-state-active")}function c(t){g&&g.find(".fc-"+t+"-button").prop("disabled",!0).addClass(p+"-state-disabled")}function d(t){g&&g.find(".fc-"+t+"-button").prop("disabled",!1).removeClass(p+"-state-disabled")}function h(){return v}var f=this;f.setToolbarOptions=i,f.render=r,f.removeElement=s,f.updateTitle=l,f.activateButton=a,f.deactivateButton=u,f.disableButton=c,f.enableButton=d,f.getViewsWithButtons=h,f.el=null;var g,p,v=[]}function _t(n,i){function r(t){t._locale=Y}function s(){q?a()&&(f(),u()):o()}function o(){n.addClass("fc"),n.on("click.fc","a[data-goto]",function(e){var n=t(this),i=n.data("goto"),r=_.moment(i.date),s=i.type,o=Q.opt("navLink"+rt(s)+"Click");"function"==typeof o?o(r,e):("string"==typeof o&&(s=o),B(r,s))}),_.bindOption("theme",function(t){$=t?"ui":"fc",n.toggleClass("ui-widget",t),n.toggleClass("fc-unthemed",!t)}),_.bindOptions(["isRTL","locale"],function(t){n.toggleClass("fc-ltr",!t),n.toggleClass("fc-rtl",t)}),q=t("
    ").prependTo(n);var e=y();W=new Vt(e),U=_.header=e[0],j=_.footer=e[1],E(),b(),u(_.options.defaultView),_.options.handleWindowResize&&(K=at(v,_.options.windowResizeDelay),t(window).resize(K))}function l(){Q&&Q.removeElement(),W.proxyCall("removeElement"),q.remove(),n.removeClass("fc fc-ltr fc-rtl fc-unthemed ui-widget"),n.off(".fc"),K&&t(window).unbind("resize",K)}function a(){return n.is(":visible")}function u(e,n){nt++;var i=Q&&e&&Q.type!==e;i&&(F(),c()),!Q&&e&&(Q=_.view=et[e]||(et[e]=_.instantiateView(e)),Q.setElement(t("
    ").appendTo(q)),W.proxyCall("activateButton",e)),Q&&(J=Q.massageCurrentDate(J),Q.isDateSet&&J>=Q.intervalStart&&J=Q.intervalStart&&tq&&i.push(n);return i}function s(t,e){return!q||tZ}function o(t,e){return q=t,Z=e,l()}function l(){return u(tt,"reset")}function a(t){return u(E(t))}function u(t,e){var n,i;for("reset"===e?nt=[]:"add"!==e&&(nt=C(nt,t)),n=0;nr.value)&&(r=i));return r?r.unit:null},qt.Class=St,St.extend=function(){var t,e,n=arguments.length;for(t=0;t').addClass(n.className||"").css({top:0,left:0}).append(n.content).appendTo(n.parentEl),this.el.on("click",".fc-close",function(){e.hide()}),n.autoHide&&this.listenTo(t(document),"mousedown",this.documentMousedown)},documentMousedown:function(e){this.el&&!t(e.target).closest(this.el).length&&this.hide()},removeElement:function(){this.hide(),this.el&&(this.el.remove(),this.el=null),this.stopListeningTo(t(document),"mousedown")},position:function(){var e,n,i,r,s,o=this.options,l=this.el.offsetParent().offset(),a=this.el.outerWidth(),u=this.el.outerHeight(),c=t(window),h=d(this.el);r=o.top||0,s=void 0!==o.left?o.left:void 0!==o.right?o.right-a:0,h.is(window)||h.is(document)?(h=c,e=0,n=0):(i=h.offset(),e=i.top,n=i.left),e+=c.scrollTop(),n+=c.scrollLeft(),o.viewportConstrain!==!1&&(r=Math.min(r,e+h.outerHeight()-u-this.margin),r=Math.max(r,e+this.margin),s=Math.min(s,n+h.outerWidth()-a-this.margin),s=Math.max(s,n+this.margin)),this.el.css({top:r-l.top,left:s-l.left})},trigger:function(t){this.options[t]&&this.options[t].apply(this,Array.prototype.slice.call(arguments,1))}}),fe=qt.CoordCache=St.extend({els:null,forcedOffsetParentEl:null,origin:null,boundingRect:null,isHorizontal:!1,isVertical:!1,lefts:null,rights:null,tops:null,bottoms:null,constructor:function(e){this.els=t(e.els),this.isHorizontal=e.isHorizontal,this.isVertical=e.isVertical,this.forcedOffsetParentEl=e.offsetParent?t(e.offsetParent):null},build:function(){var t=this.forcedOffsetParentEl;!t&&this.els.length>0&&(t=this.els.eq(0).offsetParent()),this.origin=t?t.offset():null,this.boundingRect=this.queryBoundingRect(),this.isHorizontal&&this.buildElHorizontals(),this.isVertical&&this.buildElVerticals()},clear:function(){this.origin=null,this.boundingRect=null,this.lefts=null,this.rights=null,this.tops=null,this.bottoms=null},ensureBuilt:function(){this.origin||this.build()},buildElHorizontals:function(){var e=[],n=[];this.els.each(function(i,r){var s=t(r),o=s.offset().left,l=s.outerWidth();e.push(o),n.push(o+l)}),this.lefts=e,this.rights=n},buildElVerticals:function(){var e=[],n=[];this.els.each(function(i,r){var s=t(r),o=s.offset().top,l=s.outerHeight();e.push(o),n.push(o+l)}),this.tops=e,this.bottoms=n},getHorizontalIndex:function(t){this.ensureBuilt();var e,n=this.lefts,i=this.rights,r=n.length;for(e=0;e=n[e]&&t=n[e]&&t0&&(t=d(this.els.eq(0)),!t.is(document))?f(t):null},isPointInBounds:function(t,e){return this.isLeftInBounds(t)&&this.isTopInBounds(e)},isLeftInBounds:function(t){return!this.boundingRect||t>=this.boundingRect.left&&t=this.boundingRect.top&&t=r*r&&this.handleDistanceSurpassed(t)),this.isDragging&&this.handleDrag(n,i,t)},handleDrag:function(t,e,n){this.trigger("drag",t,e,n),this.updateAutoScroll(n)},endDrag:function(t){this.isDragging&&(this.isDragging=!1,this.handleDragEnd(t))},handleDragEnd:function(t){this.trigger("dragEnd",t)},startDelay:function(t){var e=this;this.delay?this.delayTimeoutId=setTimeout(function(){e.handleDelayEnd(t)},this.delay):this.handleDelayEnd(t)},handleDelayEnd:function(t){this.isDelayEnded=!0,this.isDistanceSurpassed&&this.startDrag(t)},handleDistanceSurpassed:function(t){this.isDistanceSurpassed=!0,this.isDelayEnded&&this.startDrag(t)},handleTouchMove:function(t){this.isDragging&&t.preventDefault(),this.handleMove(t)},handleMouseMove:function(t){this.handleMove(t)},handleTouchScroll:function(t){this.isDragging||this.endInteraction(t,!0)},trigger:function(t){this.options[t]&&this.options[t].apply(this,Array.prototype.slice.call(arguments,1)),this["_"+t]&&this["_"+t].apply(this,Array.prototype.slice.call(arguments,1))}});ge.mixin({isAutoScroll:!1,scrollBounds:null,scrollTopVel:null,scrollLeftVel:null,scrollIntervalId:null,scrollSensitivity:30,scrollSpeed:200,scrollIntervalMs:50,initAutoScroll:function(){var t=this.scrollEl;this.isAutoScroll=this.options.scroll&&t&&!t.is(window)&&!t.is(document),this.isAutoScroll&&this.listenTo(t,"scroll",at(this.handleDebouncedScroll,100))},destroyAutoScroll:function(){this.endAutoScroll(),this.isAutoScroll&&this.stopListeningTo(this.scrollEl,"scroll")},computeScrollBounds:function(){this.isAutoScroll&&(this.scrollBounds=h(this.scrollEl))},updateAutoScroll:function(t){var e,n,i,r,s=this.scrollSensitivity,o=this.scrollBounds,l=0,a=0;o&&(e=(s-(E(t)-o.top))/s,n=(s-(o.bottom-E(t)))/s,i=(s-(w(t)-o.left))/s,r=(s-(o.right-w(t)))/s,e>=0&&e<=1?l=e*this.scrollSpeed*-1:n>=0&&n<=1&&(l=n*this.scrollSpeed),i>=0&&i<=1?a=i*this.scrollSpeed*-1:r>=0&&r<=1&&(a=r*this.scrollSpeed)),this.setScrollVel(l,a)},setScrollVel:function(t,e){this.scrollTopVel=t,this.scrollLeftVel=e,this.constrainScrollVel(),!this.scrollTopVel&&!this.scrollLeftVel||this.scrollIntervalId||(this.scrollIntervalId=setInterval(lt(this,"scrollIntervalFunc"),this.scrollIntervalMs))},constrainScrollVel:function(){var t=this.scrollEl;this.scrollTopVel<0?t.scrollTop()<=0&&(this.scrollTopVel=0):this.scrollTopVel>0&&t.scrollTop()+t[0].clientHeight>=t[0].scrollHeight&&(this.scrollTopVel=0),this.scrollLeftVel<0?t.scrollLeft()<=0&&(this.scrollLeftVel=0):this.scrollLeftVel>0&&t.scrollLeft()+t[0].clientWidth>=t[0].scrollWidth&&(this.scrollLeftVel=0)},scrollIntervalFunc:function(){var t=this.scrollEl,e=this.scrollIntervalMs/1e3;this.scrollTopVel&&t.scrollTop(t.scrollTop()+this.scrollTopVel*e),this.scrollLeftVel&&t.scrollLeft(t.scrollLeft()+this.scrollLeftVel*e),this.constrainScrollVel(),this.scrollTopVel||this.scrollLeftVel||this.endAutoScroll()},endAutoScroll:function(){this.scrollIntervalId&&(clearInterval(this.scrollIntervalId),this.scrollIntervalId=null,this.handleScrollEnd())},handleDebouncedScroll:function(){this.scrollIntervalId||this.handleScrollEnd()},handleScrollEnd:function(){}});var pe=ge.extend({component:null,origHit:null,hit:null,coordAdjust:null,constructor:function(t,e){ge.call(this,e),this.component=t},handleInteractionStart:function(t){var e,n,i,r=this.subjectEl;this.computeCoords(),t?(n={left:w(t),top:E(t)},i=n,r&&(e=h(r),i=x(i,e)),this.origHit=this.queryHit(i.left,i.top),r&&this.options.subjectCenter&&(this.origHit&&(e=R(this.origHit,e)||e),i=I(e)),this.coordAdjust=k(i,n)):(this.origHit=null,this.coordAdjust=null),ge.prototype.handleInteractionStart.apply(this,arguments)},computeCoords:function(){this.component.prepareHits(),this.computeScrollBounds()},handleDragStart:function(t){var e;ge.prototype.handleDragStart.apply(this,arguments),e=this.queryHit(w(t),E(t)),e&&this.handleHitOver(e)},handleDrag:function(t,e,n){var i;ge.prototype.handleDrag.apply(this,arguments),i=this.queryHit(w(n),E(n)),Tt(i,this.hit)||(this.hit&&this.handleHitOut(),i&&this.handleHitOver(i))},handleDragEnd:function(){this.handleHitDone(),ge.prototype.handleDragEnd.apply(this,arguments)},handleHitOver:function(t){var e=Tt(t,this.origHit);this.hit=t,this.trigger("hitOver",this.hit,e,this.origHit)},handleHitOut:function(){this.hit&&(this.trigger("hitOut",this.hit),this.handleHitDone(),this.hit=null)},handleHitDone:function(){this.hit&&this.trigger("hitDone",this.hit)},handleInteractionEnd:function(){ge.prototype.handleInteractionEnd.apply(this,arguments),this.origHit=null,this.hit=null,this.component.releaseHits()},handleScrollEnd:function(){ge.prototype.handleScrollEnd.apply(this,arguments),this.computeCoords()},queryHit:function(t,e){return this.coordAdjust&&(t+=this.coordAdjust.left,e+=this.coordAdjust.top),this.component.queryHit(t,e)}}),ve=St.extend(ce,{options:null,sourceEl:null,el:null,parentEl:null,top0:null,left0:null,y0:null,x0:null,topDelta:null,leftDelta:null,isFollowing:!1,isHidden:!1,isAnimating:!1,constructor:function(e,n){this.options=n=n||{},this.sourceEl=e,this.parentEl=n.parentEl?t(n.parentEl):e.parent()},start:function(e){this.isFollowing||(this.isFollowing=!0,this.y0=E(e),this.x0=w(e),this.topDelta=0,this.leftDelta=0,this.isHidden||this.updatePosition(),b(e)?this.listenTo(t(document),"touchmove",this.handleMove):this.listenTo(t(document),"mousemove",this.handleMove))},stop:function(e,n){function i(){r.isAnimating=!1,r.removeElement(),r.top0=r.left0=null,n&&n()}var r=this,s=this.options.revertDuration;this.isFollowing&&!this.isAnimating&&(this.isFollowing=!1,this.stopListeningTo(t(document)),e&&s&&!this.isHidden?(this.isAnimating=!0,this.el.animate({top:this.top0,left:this.left0},{duration:s,complete:i})):i())},getEl:function(){var t=this.el;return t||(t=this.el=this.sourceEl.clone().addClass(this.options.additionalClass||"").css({position:"absolute",visibility:"",display:this.isHidden?"none":"",margin:0,right:"auto",bottom:"auto",width:this.sourceEl.width(),height:this.sourceEl.height(),opacity:this.options.opacity||"",zIndex:this.options.zIndex}),t.addClass("fc-unselectable"),t.appendTo(this.parentEl)),t},removeElement:function(){this.el&&(this.el.remove(),this.el=null)},updatePosition:function(){var t,e;this.getEl(),null===this.top0&&(t=this.sourceEl.offset(),e=this.el.offsetParent().offset(),this.top0=t.top-e.top,this.left0=t.left-e.left),this.el.css({top:this.top0+this.topDelta,left:this.left0+this.leftDelta})},handleMove:function(t){this.topDelta=E(t)-this.y0,this.leftDelta=w(t)-this.x0,this.isHidden||this.updatePosition()},hide:function(){this.isHidden||(this.isHidden=!0,this.el&&this.el.hide())},show:function(){this.isHidden&&(this.isHidden=!1,this.updatePosition(),this.getEl().show())}}),me=qt.Grid=St.extend(ce,de,{hasDayInteractions:!0,view:null,isRTL:null,start:null,end:null,el:null,elsByFill:null,eventTimeFormat:null,displayEventTime:null,displayEventEnd:null,minResizeDuration:null,largeUnit:null,dayDragListener:null,segDragListener:null,segResizeListener:null,externalDragListener:null,constructor:function(t){this.view=t,this.isRTL=t.opt("isRTL"),this.elsByFill={},this.dayDragListener=this.buildDayDragListener(),this.initMouseIgnoring()},computeEventTimeFormat:function(){return this.view.opt("smallTimeFormat")},computeDisplayEventTime:function(){return!0},computeDisplayEventEnd:function(){return!0},setRange:function(t){this.start=t.start.clone(),this.end=t.end.clone(),this.rangeUpdated(),this.processRangeOptions()},rangeUpdated:function(){},processRangeOptions:function(){var t,e,n=this.view;this.eventTimeFormat=n.opt("eventTimeFormat")||n.opt("timeFormat")||this.computeEventTimeFormat(),t=n.opt("displayEventTime"),null==t&&(t=this.computeDisplayEventTime()),e=n.opt("displayEventEnd"),null==e&&(e=this.computeDisplayEventEnd()),this.displayEventTime=t,this.displayEventEnd=e},spanToSegs:function(t){},diffDates:function(t,e){return this.largeUnit?O(t,e,this.largeUnit):N(t,e)},prepareHits:function(){},releaseHits:function(){},queryHit:function(t,e){},getHitSpan:function(t){},getHitEl:function(t){},setElement:function(t){this.el=t,this.hasDayInteractions&&(D(t),this.bindDayHandler("touchstart",this.dayTouchStart),this.bindDayHandler("mousedown",this.dayMousedown)),this.bindSegHandlers(),this.bindGlobalHandlers()},bindDayHandler:function(e,n){var i=this;this.el.on(e,function(e){if(!t(e.target).is(i.segSelector+","+i.segSelector+" *,.fc-more,a[data-goto]"))return n.call(i,e)})},removeElement:function(){this.unbindGlobalHandlers(),this.clearDragListeners(),this.el.remove()},renderSkeleton:function(){},renderDates:function(){},unrenderDates:function(){},bindGlobalHandlers:function(){this.listenTo(t(document),{dragstart:this.externalDragStart,sortstart:this.externalDragStart})},unbindGlobalHandlers:function(){this.stopListeningTo(t(document))},dayMousedown:function(t){this.isIgnoringMouse||this.dayDragListener.startInteraction(t,{})},dayTouchStart:function(t){var e=this.view,n=e.opt("selectLongPressDelay");(e.isSelected||e.selectedEvent)&&this.tempIgnoreMouse(),null==n&&(n=e.opt("longPressDelay")),this.dayDragListener.startInteraction(t,{delay:n})},buildDayDragListener:function(){var t,e,n=this,i=this.view,r=i.opt("selectable"),l=new pe(this,{scroll:i.opt("dragScroll"),interactionStart:function(){t=l.origHit,e=null},dragStart:function(){i.unselect()},hitOver:function(i,o,l){l&&(o||(t=null),r&&(e=n.computeSelection(n.getHitSpan(l),n.getHitSpan(i)),e?n.renderSelection(e):e===!1&&s()))},hitOut:function(){t=null,e=null,n.unrenderSelection()},hitDone:function(){o()},interactionEnd:function(r,s){s||(t&&!n.isIgnoringMouse&&i.triggerDayClick(n.getHitSpan(t),n.getHitEl(t),r),e&&i.reportSelection(e,r))}});return l},clearDragListeners:function(){this.dayDragListener.endInteraction(),this.segDragListener&&this.segDragListener.endInteraction(),this.segResizeListener&&this.segResizeListener.endInteraction(),this.externalDragListener&&this.externalDragListener.endInteraction()},renderEventLocationHelper:function(t,e){var n=this.fabricateHelperEvent(t,e);return this.renderHelper(n,e)},fabricateHelperEvent:function(t,e){var n=e?Z(e.event):{};return n.start=t.start.clone(),n.end=t.end?t.end.clone():null,n.allDay=null,this.view.calendar.normalizeEventDates(n),n.className=(n.className||[]).concat("fc-helper"),e||(n.editable=!1),n},renderHelper:function(t,e){},unrenderHelper:function(){},renderSelection:function(t){this.renderHighlight(t)},unrenderSelection:function(){this.unrenderHighlight()},computeSelection:function(t,e){var n=this.computeSelectionSpan(t,e);return!(n&&!this.view.calendar.isSelectionSpanAllowed(n))&&n},computeSelectionSpan:function(t,e){var n=[t.start,t.end,e.start,e.end];return n.sort(st),{start:n[0].clone(),end:n[3].clone()}},renderHighlight:function(t){this.renderFill("highlight",this.spanToSegs(t))},unrenderHighlight:function(){this.unrenderFill("highlight")},highlightSegClasses:function(){return["fc-highlight"]},renderBusinessHours:function(){},unrenderBusinessHours:function(){},getNowIndicatorUnit:function(){},renderNowIndicator:function(t){},unrenderNowIndicator:function(){},renderFill:function(t,e){},unrenderFill:function(t){var e=this.elsByFill[t];e&&(e.remove(),delete this.elsByFill[t])},renderFillSegEls:function(e,n){var i,r=this,s=this[e+"SegEl"],o="",l=[];if(n.length){for(i=0;i"},getDayClasses:function(t,e){var n=this.view,i=n.calendar.getNow(),r=["fc-"+Xt[t.day()]];return 1==n.intervalDuration.as("months")&&t.month()!=n.intervalStart.month()&&r.push("fc-other-month"),t.isSame(i,"day")?(r.push("fc-today"),e!==!0&&r.push(n.highlightStateClass)):t *",mousedOverSeg:null,isDraggingSeg:!1,isResizingSeg:!1,isDraggingExternal:!1,segs:null,renderEvents:function(t){var e,n=[],i=[];for(e=0;el&&o.push({start:l,end:n.start}),l=n.end;return l=e.length?e[e.length-1]+1:e[n]},computeColHeadFormat:function(){return this.rowCnt>1||this.colCnt>10?"ddd":this.colCnt>1?this.view.opt("dayOfMonthFormat"):"dddd"},sliceRangeByRow:function(t){var e,n,i,r,s,o=this.daysPerRow,l=this.view.computeDayRange(t),a=this.getDateDayIndex(l.start),u=this.getDateDayIndex(l.end.clone().subtract(1,"days")),c=[];for(e=0;e'+this.renderHeadTrHtml()+"
    "},renderHeadIntroHtml:function(){return this.renderIntroHtml()},renderHeadTrHtml:function(){return""+(this.isRTL?"":this.renderHeadIntroHtml())+this.renderHeadDateCellsHtml()+(this.isRTL?this.renderHeadIntroHtml():"")+""},renderHeadDateCellsHtml:function(){var t,e,n=[];for(t=0;t1?' colspan="'+e+'"':"")+(n?" "+n:"")+">"+i.buildGotoAnchorHtml({date:t,forceOff:this.rowCnt>1||1===this.colCnt},tt(t.format(this.colHeadFormat)))+""},renderBgTrHtml:function(t){return""+(this.isRTL?"":this.renderBgIntroHtml(t))+this.renderBgCellsHtml(t)+(this.isRTL?this.renderBgIntroHtml(t):"")+""},renderBgIntroHtml:function(t){return this.renderIntroHtml()},renderBgCellsHtml:function(t){var e,n,i=[];for(e=0;e"},renderIntroHtml:function(){},bookendCells:function(t){var e=this.renderIntroHtml();e&&(this.isRTL?t.append(e):t.prepend(e))}},Se=qt.DayGrid=me.extend(ye,{numbersVisible:!1,bottomCoordPadding:0,rowEls:null,cellEls:null,helperEls:null,rowCoordCache:null,colCoordCache:null,renderDates:function(t){var e,n,i=this.view,r=this.rowCnt,s=this.colCnt,o="";for(e=0;e
    '+this.renderBgTrHtml(t)+'
    '+(this.numbersVisible?""+this.renderNumberTrHtml(t)+"":"")+"
    "},renderNumberTrHtml:function(t){return""+(this.isRTL?"":this.renderNumberIntroHtml(t))+this.renderNumberCellsHtml(t)+(this.isRTL?this.renderNumberIntroHtml(t):"")+""},renderNumberIntroHtml:function(t){return this.renderIntroHtml()},renderNumberCellsHtml:function(t){var e,n,i=[];for(e=0;e',this.view.cellWeekNumbersVisible&&t.day()==n&&(i+=this.view.buildGotoAnchorHtml({date:t,type:"week"},{class:"fc-week-number"},t.format("w"))),this.view.dayNumbersVisible&&(i+=this.view.buildGotoAnchorHtml(t,{class:"fc-day-number"},t.date())),i+=""):""},computeEventTimeFormat:function(){return this.view.opt("extraSmallTimeFormat")},computeDisplayEventEnd:function(){return 1==this.colCnt},rangeUpdated:function(){this.updateDayTable()},spanToSegs:function(t){var e,n,i=this.sliceRangeByRow(t);for(e=0;e');o=n&&n.row===e?n.el.position().top:l.find(".fc-content-skeleton tbody").position().top,a.css("top",o).find("table").append(i[e].tbodyEl),l.append(a),r.push(a[0])}),this.helperEls=t(r)},unrenderHelper:function(){this.helperEls&&(this.helperEls.remove(),this.helperEls=null)},fillSegTag:"td",renderFill:function(e,n,i){var r,s,o,l=[];for(n=this.renderFillSegEls(e,n),r=0;r
    '),s=r.find("tr"),l>0&&s.append(''),s.append(n.el.attr("colspan",a-l)),a'),this.bookendCells(s),r}});Se.mixin({rowStructs:null,unrenderEvents:function(){this.removeSegPopover(),me.prototype.unrenderEvents.apply(this,arguments)},getEventSegs:function(){return me.prototype.getEventSegs.call(this).concat(this.popoverSegs||[])},renderBgSegs:function(e){var n=t.grep(e,function(t){return t.event.allDay});return me.prototype.renderBgSegs.call(this,n)},renderFgSegs:function(e){var n;return e=this.renderFgSegEls(e),n=this.rowStructs=this.renderSegRows(e),this.rowEls.each(function(e,i){t(i).find(".fc-content-skeleton > table").append(n[e].tbodyEl)}),e},unrenderFgSegs:function(){for(var t,e=this.rowStructs||[];t=e.pop();)t.tbodyEl.remove();this.rowStructs=null},renderSegRows:function(t){var e,n,i=[];for(e=this.groupSegRows(t),n=0;n'+tt(n)+"")),i=''+(tt(s.title||"")||" ")+"",'
    '+(this.isRTL?i+" "+d:d+" "+i)+"
    "+(l?'
    ':"")+(a?'
    ':"")+""},renderSegRow:function(e,n){function i(e){for(;o"),l.append(c)),v[r][o]=c,m[r][o]=c,o++}var r,s,o,l,a,u,c,d=this.colCnt,h=this.buildSegLevels(n),f=Math.max(1,h.length),g=t(""),p=[],v=[],m=[];for(r=0;r"),p.push([]),v.push([]),m.push([]),s)for(a=0;a').append(u.el),u.leftCol!=u.rightCol?c.attr("colspan",u.rightCol-u.leftCol+1):m[r][o]=c;o<=u.rightCol;)v[r][o]=c,p[r][o]=u,o++;l.append(c)}i(d),this.bookendCells(l),g.append(l)}return{row:e,tbodyEl:g,cellMatrix:v,segMatrix:p,segLevels:h,segs:n}},buildSegLevels:function(t){var e,n,i,r=[];for(this.sortEventSegs(t),e=0;e td > :first-child").each(n),r.position().top+s>l)return i;return!1},limitRow:function(e,n){function i(i){for(;b").append(y),h.append(m),E.push(m[0])),b++}var r,s,o,l,a,u,c,d,h,f,g,p,v,m,y,S=this,w=this.rowStructs[e],E=[],b=0;if(n&&n').attr("rowspan",f),u=d[p],y=this.renderMoreLink(e,a.leftCol+p,[a].concat(u)),m=t("
    ").append(y),v.append(m),g.push(v[0]),E.push(v[0]);h.addClass("fc-limited").after(t(g)),o.push(h[0])}}i(this.colCnt),w.moreEls=t(E),w.limitedEls=t(o)}},unlimitRow:function(t){var e=this.rowStructs[t];e.moreEls&&(e.moreEls.remove(),e.moreEls=null),e.limitedEls&&(e.limitedEls.removeClass("fc-limited"),e.limitedEls=null)},renderMoreLink:function(e,n,i){var r=this,s=this.view;return t('').text(this.getMoreLinkText(i.length)).on("click",function(o){var l=s.opt("eventLimitClick"),a=r.getCellDate(e,n),u=t(this),c=r.getCellEl(e,n),d=r.getCellSegs(e,n),h=r.resliceDaySegs(d,a),f=r.resliceDaySegs(i,a);"function"==typeof l&&(l=s.publiclyTrigger("eventLimitClick",null,{date:a,dayEl:c,moreEl:u,segs:h,hiddenSegs:f},o)),"popover"===l?r.showSegPopover(e,n,u,h):"string"==typeof l&&s.calendar.zoomTo(a,l)})},showSegPopover:function(t,e,n,i){var r,s,o=this,l=this.view,a=n.parent();r=1==this.rowCnt?l.el:this.rowEls.eq(t),s={className:"fc-more-popover",content:this.renderSegPopoverContent(t,e,i),parentEl:this.view.el,top:r.offset().top,autoHide:!0,viewportConstrain:l.opt("popoverViewportConstrain"),hide:function(){if(o.popoverSegs)for(var t,e=0;e'+tt(l)+'
    '),u=a.find(".fc-event-container");for(i=this.renderFgSegEls(i,!0),this.popoverSegs=i,r=0;r'+this.renderBgTrHtml(0)+'
    "},renderSlatRowHtml:function(){for(var t,n,i,r=this.view,s=this.isRTL,o="",l=e.duration(+this.minTime);l"+(n?""+tt(t.format(this.labelFormat))+"":"")+"",o+='"+(s?"":i)+''+(s?i:"")+"",l.add(this.slotDuration);return o},processOptions:function(){var n,i=this.view,r=i.opt("slotDuration"),s=i.opt("snapDuration");r=e.duration(r),s=s?e.duration(s):r,this.slotDuration=r,this.snapDuration=s,this.snapsPerSlot=r/s,this.minResizeDuration=s,this.minTime=e.duration(i.opt("minTime")),this.maxTime=e.duration(i.opt("maxTime")),n=i.opt("slotLabelFormat"),t.isArray(n)&&(n=n[n.length-1]),this.labelFormat=n||i.opt("smallTimeFormat"),n=i.opt("slotLabelInterval"),this.labelInterval=n?e.duration(n):this.computeLabelInterval(r)},computeLabelInterval:function(t){var n,i,r;for(n=Oe.length-1;n>=0;n--)if(i=e.duration(Oe[n]),r=_(i,t),ot(r)&&r>1)return i;return e.duration(t)},computeEventTimeFormat:function(){return this.view.opt("noMeridiemTimeFormat")},computeDisplayEventEnd:function(){return!0},prepareHits:function(){this.colCoordCache.build(),this.slatCoordCache.build()},releaseHits:function(){this.colCoordCache.clear()},queryHit:function(t,e){var n=this.snapsPerSlot,i=this.colCoordCache,r=this.slatCoordCache;if(i.isLeftInBounds(t)&&r.isTopInBounds(e)){var s=i.getHorizontalIndex(t),o=r.getVerticalIndex(e);if(null!=s&&null!=o){var l=r.getTopOffset(o),a=r.getHeight(o),u=(e-l)/a,c=Math.floor(u*n),d=o*n+c,h=l+c/n*a,f=l+(c+1)/n*a;return{col:s,snap:d,component:this,left:i.getLeftOffset(s),right:i.getRightOffset(s),top:h,bottom:f}}}},getHitSpan:function(t){var e,n=this.getCellDate(0,t.col),i=this.computeSnapTime(t.snap);return n.time(i),e=n.clone().add(this.snapDuration),{start:n,end:e}},getHitEl:function(t){return this.colEls.eq(t.col)},rangeUpdated:function(){this.updateDayTable()},computeSnapTime:function(t){return e.duration(this.minTime+this.snapDuration*t)},spanToSegs:function(t){var e,n=this.sliceRangeByTimes(t);for(e=0;e
    ').css("top",r).appendTo(this.colContainerEls.eq(i[n].col))[0]);i.length>0&&s.push(t('
    ').css("top",r).appendTo(this.el.find(".fc-content-skeleton"))[0]),this.nowIndicatorEls=t(s)},unrenderNowIndicator:function(){this.nowIndicatorEls&&(this.nowIndicatorEls.remove(),this.nowIndicatorEls=null)},renderSelection:function(t){this.view.opt("selectHelper")?this.renderEventLocationHelper(t):this.renderHighlight(t)},unrenderSelection:function(){this.unrenderHelper(),this.unrenderHighlight()},renderHighlight:function(t){this.renderHighlightSegs(this.spanToSegs(t))},unrenderHighlight:function(){this.unrenderHighlightSegs()}});we.mixin({colContainerEls:null,fgContainerEls:null,bgContainerEls:null,helperContainerEls:null,highlightContainerEls:null,businessContainerEls:null,fgSegs:null,bgSegs:null,helperSegs:null,highlightSegs:null,businessSegs:null,renderContentSkeleton:function(){var e,n,i="";for(e=0;e
    ';n=t('
    '+i+"
    "),this.colContainerEls=n.find(".fc-content-col"),this.helperContainerEls=n.find(".fc-helper-container"),this.fgContainerEls=n.find(".fc-event-container:not(.fc-helper-container)"),this.bgContainerEls=n.find(".fc-bgevent-container"),this.highlightContainerEls=n.find(".fc-highlight-container"),this.businessContainerEls=n.find(".fc-business-container"),this.bookendCells(n.find("tr")),this.el.append(n)},renderFgSegs:function(t){return t=this.renderFgSegsIntoContainers(t,this.fgContainerEls),this.fgSegs=t,t},unrenderFgSegs:function(){this.unrenderNamedSegs("fgSegs")},renderHelperSegs:function(e,n){var i,r,s,o=[];for(e=this.renderFgSegsIntoContainers(e,this.helperContainerEls),i=0;i
    '+(n?'
    '+tt(n)+"
    ":"")+(o.title?'
    '+tt(o.title)+"
    ":"")+'
    '+(u?'
    ':"")+""},updateSegVerticals:function(t){this.computeSegVerticals(t),this.assignSegVerticals(t)},computeSegVerticals:function(t){var e,n;for(e=0;e1?"ll":"LL"},formatRange:function(t,e,n){var i=t.end;return i.hasTime()||(i=i.clone().subtract(1)),gt(t.start,i,e,n,this.opt("isRTL"))},getAllDayHtml:function(){return this.opt("allDayHtml")||tt(this.opt("allDayText"))},buildGotoAnchorHtml:function(e,n,i){var r,s,o,l;return t.isPlainObject(e)?(r=e.date,s=e.type,o=e.forceOff):r=e,r=qt.moment(r),l={date:r.format("YYYY-MM-DD"),type:s||"day"},"string"==typeof n&&(i=n,n=null),n=n?" "+it(n):"",i=i||"",!o&&this.opt("navLinks")?"'+i+"":""+i+""},setElement:function(t){this.el=t,this.bindGlobalHandlers(),this.renderSkeleton()},removeElement:function(){this.unsetDate(),this.unrenderSkeleton(),this.unbindGlobalHandlers(),this.el.remove()},renderSkeleton:function(){},unrenderSkeleton:function(){},setDate:function(t){var e=this.isDateSet;this.isDateSet=!0,this.handleDate(t,e),this.trigger(e?"dateReset":"dateSet",t)},unsetDate:function(){this.isDateSet&&(this.isDateSet=!1,this.handleDateUnset(),this.trigger("dateUnset"))},handleDate:function(t,e){var n=this;this.unbindEvents(),this.requestDateRender(t).then(function(){n.bindEvents()})},handleDateUnset:function(){this.unbindEvents(),this.requestDateUnrender()},requestDateRender:function(t){var e=this;return this.dateRenderQueue.add(function(){return e.executeDateRender(t)})},requestDateUnrender:function(){var t=this;return this.dateRenderQueue.add(function(){return t.executeDateUnrender()})},executeDateRender:function(t){var e=this;return t?this.captureInitialScroll():this.captureScroll(),this.freezeHeight(),this.executeDateUnrender().then(function(){t&&e.setRange(e.computeRange(t)),e.render&&e.render(),e.renderDates(),e.updateSize(),e.renderBusinessHours(),e.startNowIndicator(),e.thawHeight(),e.releaseScroll(),e.isDateRendered=!0,e.onDateRender(),e.trigger("dateRender")})},executeDateUnrender:function(){var t=this;return t.isDateRendered?this.requestEventsUnrender().then(function(){t.unselect(),t.stopNowIndicator(),t.triggerUnrender(),t.unrenderBusinessHours(),t.unrenderDates(),t.destroy&&t.destroy(),t.isDateRendered=!1,t.trigger("dateUnrender")}):bt.resolve()},onDateRender:function(){this.triggerRender()},renderDates:function(){},unrenderDates:function(){},triggerRender:function(){this.publiclyTrigger("viewRender",this,this,this.el); +},triggerUnrender:function(){this.publiclyTrigger("viewDestroy",this,this,this.el)},bindGlobalHandlers:function(){this.listenTo(t(document),"mousedown",this.handleDocumentMousedown),this.listenTo(t(document),"touchstart",this.processUnselect)},unbindGlobalHandlers:function(){this.stopListeningTo(t(document))},initThemingProps:function(){var t=this.opt("theme")?"ui":"fc";this.widgetHeaderClass=t+"-widget-header",this.widgetContentClass=t+"-widget-content",this.highlightStateClass=t+"-state-highlight"},renderBusinessHours:function(){},unrenderBusinessHours:function(){},startNowIndicator:function(){var t,n,i,r=this;this.opt("nowIndicator")&&(t=this.getNowIndicatorUnit(),t&&(n=lt(this,"updateNowIndicator"),this.initialNowDate=this.calendar.getNow(),this.initialNowQueriedMs=+new Date,this.renderNowIndicator(this.initialNowDate),this.isNowIndicatorRendered=!0,i=this.initialNowDate.clone().startOf(t).add(1,t)-this.initialNowDate,this.nowIndicatorTimeoutID=setTimeout(function(){r.nowIndicatorTimeoutID=null,n(),i=+e.duration(1,t),i=Math.max(100,i),r.nowIndicatorIntervalID=setInterval(n,i)},i)))},updateNowIndicator:function(){this.isNowIndicatorRendered&&(this.unrenderNowIndicator(),this.renderNowIndicator(this.initialNowDate.clone().add(new Date-this.initialNowQueriedMs)))},stopNowIndicator:function(){this.isNowIndicatorRendered&&(this.nowIndicatorTimeoutID&&(clearTimeout(this.nowIndicatorTimeoutID),this.nowIndicatorTimeoutID=null),this.nowIndicatorIntervalID&&(clearTimeout(this.nowIndicatorIntervalID),this.nowIndicatorIntervalID=null),this.unrenderNowIndicator(),this.isNowIndicatorRendered=!1)},getNowIndicatorUnit:function(){},renderNowIndicator:function(t){},unrenderNowIndicator:function(){},updateSize:function(t){t&&this.captureScroll(),this.updateHeight(t),this.updateWidth(t),this.updateNowIndicator(),t&&this.releaseScroll()},updateWidth:function(t){},updateHeight:function(t){var e=this.calendar;this.setHeight(e.getSuggestedViewHeight(),e.isHeightAuto())},setHeight:function(t,e){},capturedScroll:null,capturedScrollDepth:0,captureScroll:function(){return!this.capturedScrollDepth++&&(this.capturedScroll=this.isDateRendered?this.queryScroll():{},!0)},captureInitialScroll:function(e){this.captureScroll()&&(this.capturedScroll.isInitial=!0,e?t.extend(this.capturedScroll,e):this.capturedScroll.isComputed=!0)},releaseScroll:function(){var e=this.capturedScroll,n=this.discardScroll();e.isComputed&&(n?t.extend(e,this.computeInitialScroll()):e=null),e&&(e.isInitial?this.hardSetScroll(e):this.setScroll(e))},discardScroll:function(){return!--this.capturedScrollDepth&&(this.capturedScroll=null,!0)},computeInitialScroll:function(){return{}},queryScroll:function(){return{}},hardSetScroll:function(t){var e=this,n=function(){e.setScroll(t)};n(),setTimeout(n,0)},setScroll:function(t){},freezeHeight:function(){this.calendar.freezeContentHeight()},thawHeight:function(){this.calendar.thawContentHeight()},bindEvents:function(){var t=this;this.isEventsBound||(this.isEventsBound=!0,this.rejectOn("eventsUnbind",this.requestEvents()).then(function(e){t.listenTo(t.calendar,"eventsReset",t.setEvents),t.setEvents(e)}))},unbindEvents:function(){this.isEventsBound&&(this.isEventsBound=!1,this.stopListeningTo(this.calendar,"eventsReset"),this.unsetEvents(),this.trigger("eventsUnbind"))},setEvents:function(t){var e=this.isEventSet;this.isEventsSet=!0,this.handleEvents(t,e),this.trigger(e?"eventsReset":"eventsSet",t)},unsetEvents:function(){this.isEventsSet&&(this.isEventsSet=!1,this.handleEventsUnset(),this.trigger("eventsUnset"))},whenEventsSet:function(){var t=this;return this.isEventsSet?bt.resolve(this.getCurrentEvents()):new bt(function(e){t.one("eventsSet",e)})},handleEvents:function(t,e){this.requestEventsRender(t)},handleEventsUnset:function(){this.requestEventsUnrender()},requestEventsRender:function(t){var e=this;return this.eventRenderQueue.add(function(){return e.executeEventsRender(t)})},requestEventsUnrender:function(){var t=this;return this.isEventsRendered?this.eventRenderQueue.addQuickly(function(){return t.executeEventsUnrender()}):bt.resolve()},requestCurrentEventsRender:function(){return this.isEventsSet?void this.requestEventsRender(this.getCurrentEvents()):bt.reject()},executeEventsRender:function(t){var e=this;return this.captureScroll(),this.freezeHeight(),this.executeEventsUnrender().then(function(){e.renderEvents(t),e.thawHeight(),e.releaseScroll(),e.isEventsRendered=!0,e.onEventsRender(),e.trigger("eventsRender")})},executeEventsUnrender:function(){return this.isEventsRendered&&(this.onBeforeEventsUnrender(),this.captureScroll(),this.freezeHeight(),this.destroyEvents&&this.destroyEvents(),this.unrenderEvents(),this.thawHeight(),this.releaseScroll(),this.isEventsRendered=!1,this.trigger("eventsUnrender")),bt.resolve()},onEventsRender:function(){this.renderedEventSegEach(function(t){this.publiclyTrigger("eventAfterRender",t.event,t.event,t.el)}),this.publiclyTrigger("eventAfterAllRender")},onBeforeEventsUnrender:function(){this.renderedEventSegEach(function(t){this.publiclyTrigger("eventDestroy",t.event,t.event,t.el)})},renderEvents:function(t){},unrenderEvents:function(){},requestEvents:function(){return this.calendar.requestEvents(this.start,this.end)},getCurrentEvents:function(){return this.calendar.getPrunedEventCache()},resolveEventEl:function(e,n){var i=this.publiclyTrigger("eventRender",e,e,n);return i===!1?n=null:i&&i!==!0&&(n=t(i)),n},showEvent:function(t){this.renderedEventSegEach(function(t){t.el.css("visibility","")},t)},hideEvent:function(t){this.renderedEventSegEach(function(t){t.el.css("visibility","hidden")},t)},renderedEventSegEach:function(t,e){var n,i=this.getEventSegs();for(n=0;n=this.nextDayThreshold&&r.add(1,"days")),(!i||r<=n)&&(r=n.clone().add(1,"days")),{start:n,end:r}},isMultiDayEvent:function(t){var e=this.computeDayRange(t);return e.end.diff(e.start,"days")>1}}),be=qt.Scroller=St.extend({el:null,scrollEl:null,overflowX:null,overflowY:null,constructor:function(t){t=t||{},this.overflowX=t.overflowX||t.overflow||"auto",this.overflowY=t.overflowY||t.overflow||"auto"},render:function(){this.el=this.renderEl(),this.applyOverflow()},renderEl:function(){return this.scrollEl=t('
    ')},clear:function(){this.setHeight("auto"),this.applyOverflow()},destroy:function(){this.el.remove()},applyOverflow:function(){this.scrollEl.css({"overflow-x":this.overflowX,"overflow-y":this.overflowY})},lockOverflow:function(t){var e=this.overflowX,n=this.overflowY;t=t||this.getScrollbarWidths(),"auto"===e&&(e=t.top||t.bottom||this.scrollEl[0].scrollWidth-1>this.scrollEl[0].clientWidth?"scroll":"hidden"),"auto"===n&&(n=t.left||t.right||this.scrollEl[0].scrollHeight-1>this.scrollEl[0].clientHeight?"scroll":"hidden"),this.scrollEl.css({"overflow-x":e,"overflow-y":n})},setHeight:function(t){this.scrollEl.height(t)},getScrollTop:function(){return this.scrollEl.scrollTop()},setScrollTop:function(t){this.scrollEl.scrollTop(t)},getClientWidth:function(){return this.scrollEl[0].clientWidth},getClientHeight:function(){return this.scrollEl[0].clientHeight},getScrollbarWidths:function(){return p(this.scrollEl)}});Vt.prototype.proxyCall=function(t){var e=Array.prototype.slice.call(arguments,1),n=[];return this.items.forEach(function(i){n.push(i[t].apply(i,e))}),n};var De=qt.Calendar=St.extend({dirDefaults:null,localeDefaults:null,overrides:null,dynamicOverrides:null,options:null,viewSpecCache:null,view:null,header:null,footer:null,loadingLevel:0,constructor:_t,initialize:function(){},populateOptionsHash:function(){var t,e,i,r;t=J(this.dynamicOverrides.locale,this.overrides.locale),e=Te[t],e||(t=De.defaults.locale,e=Te[t]||{}),i=J(this.dynamicOverrides.isRTL,this.overrides.isRTL,e.isRTL,De.defaults.isRTL),r=i?De.rtlDefaults:{},this.dirDefaults=r,this.localeDefaults=e,this.options=n([De.defaults,r,e,this.overrides,this.dynamicOverrides]),Yt(this.options)},getViewSpec:function(t){var e=this.viewSpecCache;return e[t]||(e[t]=this.buildViewSpec(t))},getUnitViewSpec:function(e){var n,i,r;if(t.inArray(e,Kt)!=-1)for(n=this.header.getViewsWithButtons(),t.each(qt.views,function(t){n.push(t)}),i=0;i=n&&e.end<=i},De.prototype.getPeerEvents=function(t,e){var n,i,r=this.getEventCache(),s=[];for(n=0;nn};var ke={id:"_fcBusinessHours",start:"09:00",end:"17:00",dow:[1,2,3,4,5],rendering:"inverse-background"};De.prototype.getCurrentBusinessHourEvents=function(t){return this.computeBusinessHourEvents(t,this.options.businessHours)},De.prototype.computeBusinessHourEvents=function(e,n){return n===!0?this.expandBusinessHourEvents(e,[{}]):t.isPlainObject(n)?this.expandBusinessHourEvents(e,[n]):t.isArray(n)?this.expandBusinessHourEvents(e,n,!0):[]},De.prototype.expandBusinessHourEvents=function(e,n,i){var r,s,o=this.getView(),l=[];for(r=0;r1,this.opt("weekNumbers")&&(this.opt("weekNumbersWithinDays")?(this.cellWeekNumbersVisible=!0,this.colWeekNumbersVisible=!1):(this.cellWeekNumbersVisible=!1,this.colWeekNumbersVisible=!0)),this.dayGrid.numbersVisible=this.dayNumbersVisible||this.cellWeekNumbersVisible||this.colWeekNumbersVisible,this.el.addClass("fc-basic-view").html(this.renderSkeletonHtml()),this.renderHead(),this.scroller.render();var e=this.scroller.el.addClass("fc-day-grid-container"),n=t('
    ').appendTo(e);this.el.find(".fc-body > tr > td").append(e),this.dayGrid.setElement(n),this.dayGrid.renderDates(this.hasRigidRows())},renderHead:function(){this.headContainerEl=this.el.find(".fc-head-container").html(this.dayGrid.renderHeadHtml()),this.headRowEl=this.headContainerEl.find(".fc-row")},unrenderDates:function(){this.dayGrid.unrenderDates(),this.dayGrid.removeElement(),this.scroller.destroy()},renderBusinessHours:function(){this.dayGrid.renderBusinessHours()},unrenderBusinessHours:function(){this.dayGrid.unrenderBusinessHours()},renderSkeletonHtml:function(){return'
    '},weekNumberStyleAttr:function(){return null!==this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},hasRigidRows:function(){var t=this.opt("eventLimit");return t&&"number"!=typeof t},updateWidth:function(){this.colWeekNumbersVisible&&(this.weekNumberWidth=u(this.el.find(".fc-week-number")))},setHeight:function(t,e){var n,s,o=this.opt("eventLimit");this.scroller.clear(),r(this.headRowEl),this.dayGrid.removeSegPopover(),o&&"number"==typeof o&&this.dayGrid.limitRows(o),n=this.computeScrollerHeight(t),this.setGridHeight(n,e),o&&"number"!=typeof o&&this.dayGrid.limitRows(o),e||(this.scroller.setHeight(n),s=this.scroller.getScrollbarWidths(),(s.left||s.right)&&(i(this.headRowEl,s),n=this.computeScrollerHeight(t),this.scroller.setHeight(n)),this.scroller.lockOverflow(s))},computeScrollerHeight:function(t){return t-c(this.el,this.scroller.el)},setGridHeight:function(t,e){e?a(this.dayGrid.rowEls):l(this.dayGrid.rowEls,t,!0)},computeInitialScroll:function(){return{top:0}},queryScroll:function(){return{top:this.scroller.getScrollTop()}},setScroll:function(t){this.scroller.setScrollTop(t.top)},prepareHits:function(){this.dayGrid.prepareHits()},releaseHits:function(){this.dayGrid.releaseHits()},queryHit:function(t,e){return this.dayGrid.queryHit(t,e)},getHitSpan:function(t){return this.dayGrid.getHitSpan(t)},getHitEl:function(t){return this.dayGrid.getHitEl(t)},renderEvents:function(t){this.dayGrid.renderEvents(t),this.updateHeight()},getEventSegs:function(){return this.dayGrid.getEventSegs()},unrenderEvents:function(){this.dayGrid.unrenderEvents()},renderDrag:function(t,e){return this.dayGrid.renderDrag(t,e)},unrenderDrag:function(){this.dayGrid.unrenderDrag()},renderSelection:function(t){this.dayGrid.renderSelection(t)},unrenderSelection:function(){this.dayGrid.unrenderSelection()}}),Me={renderHeadIntroHtml:function(){var t=this.view;return t.colWeekNumbersVisible?'"+tt(t.opt("weekNumberTitle"))+"":""},renderNumberIntroHtml:function(t){var e=this.view,n=this.getCellDate(t,0);return e.colWeekNumbersVisible?'"+e.buildGotoAnchorHtml({date:n,type:"week",forceOff:1===this.colCnt},n.format("w"))+"":""},renderBgIntroHtml:function(){var t=this.view;return t.colWeekNumbersVisible?'":""},renderIntroHtml:function(){var t=this.view;return t.colWeekNumbersVisible?'":""}},Be=qt.MonthView=Le.extend({computeRange:function(t){var e,n=Le.prototype.computeRange.call(this,t);return this.isFixedWeeks()&&(e=Math.ceil(n.end.diff(n.start,"weeks",!0)),n.end.add(6-e,"weeks")),n},setGridHeight:function(t,e){e&&(t*=this.rowCnt/6),l(this.dayGrid.rowEls,t,!e)},isFixedWeeks:function(){return this.opt("fixedWeekCount")}});Zt.basic={class:Le},Zt.basicDay={type:"basic",duration:{days:1}},Zt.basicWeek={type:"basic",duration:{weeks:1}},Zt.month={class:Be,duration:{months:1},defaults:{fixedWeekCount:!0}};var ze=qt.AgendaView=Ee.extend({scroller:null,timeGridClass:we,timeGrid:null,dayGridClass:Se,dayGrid:null,axisWidth:null,headContainerEl:null,noScrollRowEls:null,bottomRuleEl:null,initialize:function(){this.timeGrid=this.instantiateTimeGrid(),this.opt("allDaySlot")&&(this.dayGrid=this.instantiateDayGrid()),this.scroller=new be({overflowX:"hidden",overflowY:"auto"})},instantiateTimeGrid:function(){var t=this.timeGridClass.extend(Fe);return new t(this)},instantiateDayGrid:function(){var t=this.dayGridClass.extend(Ne);return new t(this)},setRange:function(t){Ee.prototype.setRange.call(this,t),this.timeGrid.setRange(t),this.dayGrid&&this.dayGrid.setRange(t)},renderDates:function(){this.el.addClass("fc-agenda-view").html(this.renderSkeletonHtml()),this.renderHead(),this.scroller.render();var e=this.scroller.el.addClass("fc-time-grid-container"),n=t('
    ').appendTo(e);this.el.find(".fc-body > tr > td").append(e),this.timeGrid.setElement(n),this.timeGrid.renderDates(),this.bottomRuleEl=t('
    ').appendTo(this.timeGrid.el),this.dayGrid&&(this.dayGrid.setElement(this.el.find(".fc-day-grid")),this.dayGrid.renderDates(),this.dayGrid.bottomCoordPadding=this.dayGrid.el.next("hr").outerHeight()),this.noScrollRowEls=this.el.find(".fc-row:not(.fc-scroller *)")},renderHead:function(){this.headContainerEl=this.el.find(".fc-head-container").html(this.timeGrid.renderHeadHtml())},unrenderDates:function(){this.timeGrid.unrenderDates(),this.timeGrid.removeElement(),this.dayGrid&&(this.dayGrid.unrenderDates(),this.dayGrid.removeElement()),this.scroller.destroy()},renderSkeletonHtml:function(){return'
    '+(this.dayGrid?'

    ':"")+"
    "},axisStyleAttr:function(){return null!==this.axisWidth?'style="width:'+this.axisWidth+'px"':""},renderBusinessHours:function(){this.timeGrid.renderBusinessHours(),this.dayGrid&&this.dayGrid.renderBusinessHours()},unrenderBusinessHours:function(){this.timeGrid.unrenderBusinessHours(),this.dayGrid&&this.dayGrid.unrenderBusinessHours()},getNowIndicatorUnit:function(){return this.timeGrid.getNowIndicatorUnit()},renderNowIndicator:function(t){this.timeGrid.renderNowIndicator(t)},unrenderNowIndicator:function(){this.timeGrid.unrenderNowIndicator()},updateSize:function(t){this.timeGrid.updateSize(t),Ee.prototype.updateSize.call(this,t)},updateWidth:function(){this.axisWidth=u(this.el.find(".fc-axis"))},setHeight:function(t,e){var n,s,o;this.bottomRuleEl.hide(),this.scroller.clear(),r(this.noScrollRowEls),this.dayGrid&&(this.dayGrid.removeSegPopover(),n=this.opt("eventLimit"),n&&"number"!=typeof n&&(n=Ge),n&&this.dayGrid.limitRows(n)),e||(s=this.computeScrollerHeight(t),this.scroller.setHeight(s),o=this.scroller.getScrollbarWidths(),(o.left||o.right)&&(i(this.noScrollRowEls,o),s=this.computeScrollerHeight(t),this.scroller.setHeight(s)),this.scroller.lockOverflow(o),this.timeGrid.getTotalSlatHeight()"+e.buildGotoAnchorHtml({date:this.start,type:"week",forceOff:this.colCnt>1},tt(t))+""):'"},renderBgIntroHtml:function(){var t=this.view;return'"},renderIntroHtml:function(){var t=this.view;return'"}},Ne={renderBgIntroHtml:function(){var t=this.view;return'"+t.getAllDayHtml()+""},renderIntroHtml:function(){var t=this.view;return'"}},Ge=5,Oe=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];Zt.agenda={class:ze,defaults:{allDaySlot:!0,slotDuration:"00:30:00",minTime:"00:00:00",maxTime:"24:00:00",slotEventOverlap:!0}},Zt.agendaDay={type:"agenda",duration:{days:1}},Zt.agendaWeek={type:"agenda",duration:{weeks:1}};var Ae=Ee.extend({grid:null,scroller:null,initialize:function(){this.grid=new Ve(this),this.scroller=new be({overflowX:"hidden",overflowY:"auto"})},setRange:function(t){Ee.prototype.setRange.call(this,t),this.grid.setRange(t)},renderSkeleton:function(){this.el.addClass("fc-list-view "+this.widgetContentClass),this.scroller.render(),this.scroller.el.appendTo(this.el),this.grid.setElement(this.scroller.scrollEl)},unrenderSkeleton:function(){this.scroller.destroy()},setHeight:function(t,e){this.scroller.setHeight(this.computeScrollerHeight(t))},computeScrollerHeight:function(t){return t-c(this.el,this.scroller.el); +},renderEvents:function(t){this.grid.renderEvents(t)},unrenderEvents:function(){this.grid.unrenderEvents()},isEventResizable:function(t){return!1},isEventDraggable:function(t){return!1}}),Ve=me.extend({segSelector:".fc-list-item",hasDayInteractions:!1,spanToSegs:function(t){for(var e,n=this.view,i=n.start.clone().time(0),r=0,s=[];i
    '+tt(this.view.opt("noEventsMessage"))+"
    ")},renderSegList:function(e){var n,i,r,s=this.groupSegsByDay(e),o=t('
    '),l=o.find("tbody");for(n=0;n'+(n?e.buildGotoAnchorHtml(t,{class:"fc-list-heading-main"},tt(t.format(n))):"")+(i?e.buildGotoAnchorHtml(t,{class:"fc-list-heading-alt"},tt(t.format(i))):"")+""},fgSegHtml:function(t){var e,n=this.view,i=["fc-list-item"].concat(this.getSegCustomClasses(t)),r=this.getSegBackgroundColor(t),s=t.event,o=s.url;return e=s.allDay?n.getAllDayHtml():n.isMultiDayEvent(s)?t.isStart||t.isEnd?tt(this.getEventTimeText(t)):n.getAllDayHtml():tt(this.getEventTimeText(s)),o&&i.push("fc-has-url"),''+(this.displayEventTime?''+(e||"")+"":"")+'"+tt(t.event.title||"")+""}});return Zt.list={class:Ae,buttonTextKey:"list",defaults:{buttonText:"list",listDayFormat:"LL",noEventsMessage:"No events to display"}},Zt.listDay={type:"list",duration:{days:1},defaults:{listDayFormat:"dddd"}},Zt.listWeek={type:"list",duration:{weeks:1},defaults:{listDayFormat:"dddd",listDayAltFormat:"LL"}},Zt.listMonth={type:"list",duration:{month:1},defaults:{listDayAltFormat:"dddd"}},Zt.listYear={type:"list",duration:{year:1},defaults:{listDayAltFormat:"dddd"}},qt}); \ No newline at end of file