diff --git a/.gitignore b/.gitignore index 9d1732ea0..32915c082 100644 --- a/.gitignore +++ b/.gitignore @@ -97,4 +97,5 @@ hs_err_pid* #app logs *.log -**/CElasticsearchDataProvider.java \ No newline at end of file +**/CElasticsearchDataProvider.java +src/main/webapp/org/cboard/controller/dashboard/paramCtrl.js diff --git a/pom.xml b/pom.xml index 6cdcb16cc..e84e84676 100755 --- a/pom.xml +++ b/pom.xml @@ -198,7 +198,7 @@ mysql mysql-connector-java - 5.1.24 + 5.1.47 org.postgresql diff --git a/src/main/java/org/cboard/services/MenuService.java b/src/main/java/org/cboard/services/MenuService.java index 8cde986c5..8a3234817 100644 --- a/src/main/java/org/cboard/services/MenuService.java +++ b/src/main/java/org/cboard/services/MenuService.java @@ -29,9 +29,13 @@ public class MenuService { menuList.add(new DashboardMenu(6, 1, "SIDEBAR.DASHBOARD_CATEGORY", "config.category")); menuList.add(new DashboardMenu(7, -1, "SIDEBAR.ADMIN", "admin")); menuList.add(new DashboardMenu(8, 7, "SIDEBAR.USER_ADMIN", "admin.user")); - menuList.add(new DashboardMenu(9, 1, "SIDEBAR.JOB", "config.job")); - menuList.add(new DashboardMenu(10, 1, "SIDEBAR.SHARE_RESOURCE", "config.role")); - menuList.add(new DashboardMenu(11, 1, "SIDEBAR.HOMEPAGE", "config.homepage")); + //left navigation bar, new link(Role)added under 'ADMIN' + menuList.add(new DashboardMenu(9, 7, "SIDEBAR.ROLE_ADMIN", "admin.role")); + menuList.add(new DashboardMenu(10, 1, "SIDEBAR.JOB", "config.job")); + menuList.add(new DashboardMenu(11, 1, "SIDEBAR.SHARE_RESOURCE", "config.role")); + menuList.add(new DashboardMenu(12, 1, "SIDEBAR.C_DASHBOARD", "dashboard.dashBoard")); + menuList.add(new DashboardMenu(13, 1, "SIDEBAR.MY_DASHBOARD", "dashboard.myDashBoard")); + menuList.add(new DashboardMenu(14, 1, "SIDEBAR.HOMEPAGE", "config.homepage")); } diff --git a/src/main/webapp/css/cboard.css b/src/main/webapp/css/cboard.css index f701c0615..ca713f39e 100644 --- a/src/main/webapp/css/cboard.css +++ b/src/main/webapp/css/cboard.css @@ -57,7 +57,6 @@ font-weight: normal; font-size: 10px; padding: 3px 0px; - background: white; } .tableView th { @@ -156,6 +155,10 @@ .cRadar.disabled{ background-image: url(../imgs/radar.png); } .cTable{ background-image: url(../imgs/table-active.png); } .cTable.disabled{ background-image: url(../imgs/table.png); } + +.cGrid{ background-image: url(../imgs/syncGrid-active.png); } +.cGrid.disabled{ background-image: url(../imgs/syncGrid.png); } + .cMap{ background-image: url(../imgs/map-active.png); } .cMap.disabled{ background-image: url(../imgs/map.png); } .cGauge{ background-image: url(../imgs/gauge-active.png); } @@ -754,4 +757,430 @@ treecontrol.tree-dark { -webkit-transition: border linear 7.2s,-webkit-box-shadow linear -2.5s; border-color: rgba(47, 165, 255, 0.75); -webkit-box-shadow: 0 0 4px rgba(54, 131, 255, 0.86); -} \ No newline at end of file +} + + + + + +/*below css are written by bipros team , line: 756 */ + +.user-name{ +} + +.user-name .icon{ + width: 35px; + height: 35px; + border-radius: 50%; + text-align: center; + line-height: 35px; + display: inline-block; +} +.user-name .name{ + font-weight: 700; + margin-left: 5px; +} + +/* Do not allow to select on texts */ + +.disable-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + + +/* margin left css for sidebar */ +.margin-left-0 { + margin-left : 0px !important; +} + +/* guibuilder css */ + +.GuiBuilder-section { + min-height: 55px; + position: relative; +} + +.GuiBuilder-section-label { + background-color: #fff; + left: 10px; + padding-left: 10px; + padding-right: 10px; + position: absolute; + top: -7px; +} +.Query-label { + color: #aeaeae; + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + background-color: #fff; + left: 10px; + padding-left: 10px; + padding-right: 10px; + position: absolute; + top: -7px; +} +.GuiBuilder.GuiBuilder--expand { + -moz-box-direction: normal; + -moz-box-orient: horizontal; + flex-direction: row; +} +.popoverdiv{ + width: 300px; + position: absolute; + border: 1px solid #e0e0e0; + border-radius: 3px; + box-shadow: 0 1px 7px rgba(0, 0, 0, 0.18); + background:#fff; + z-index:1; + top:100%; +} + +.userDashboard{ + height: 110px; + width: 81%; + position: relative; + -webkit-transition: all 200ms ease-in; + -webkit-transform: scale(1); + -ms-transition: all 200ms ease-in; + -ms-transform: scale(1); + -moz-transition: all 200ms ease-in; + -moz-transform: scale(1); + transition: all 200ms ease-in; + transform: scale(1); + margin-bottom: 28%; +} +.userDashboard:hover { + background-color: #f7c787; + box-shadow: 0px 0px 150px #000000; + z-index: 2; + -webkit-transition: all 200ms ease-in; + -webkit-transform: scale(1.2); + -ms-transition: all 200ms ease-in; + -ms-transform: scale(1.2); + -moz-transition: all 200ms ease-in; + -moz-transform: scale(1.2); + transition: all 200ms ease-in; + transform: scale(1.2); +} + +.iconDiv{ + color: #ffffff; + padding-top: 32px; +} +.text-center { + text-align: center; +}.labeldiv{ + font-family: CenturyGothic, Arial, Helvetica, sans-serif; + font-size: 12px; + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.23); + color: #ffffff; +} + +/* css for border */ +.cboard-div-border{ + position: relative; + background: #fff; + color: #666666; + border-radius: 5px; + /* margin-bottom: 25px; */ + border: 1px solid #dddddd; + padding: 0; + margin: 10px; +} + +/* confirm modal css */ + .btn-outline { + color: #fff; + width: 90px; + height: 32px; + text-align: center; + display: inline-block; + border-radius: 3px; + margin: 0 0 0 10px; + cursor: pointer; + display: block; + float: right; +} + + +/* left navigation */ +.leftNav{ +margin-left: 20px; +} + +/* fa fa icon color */ +.navIconColor { + color:#1c85d4; +} + +/* overriding body */ +body { + font-family:'Open Sans', sans-serif !important ; + font-size:13px !important; +} + +.main-header .logo { + font-family:'Open Sans', sans-serif ; + +} + +/* main side bar hover active color */ + + +.sidebar-menu li:hover { + border-right : 2px solid red; +} +.sidebar-menu li.active { + border-right : 2px solid #05D5C4; +} + +/* dynamic report button css */ + +.btn-success { + background-color: #337ab7; + border-color: #337ab7; +} +.btn-success:hover, +.btn-success:active, +.btn-success.hover { + background-color: #337ab7; +} +.btn-info { + background-color: #337ab7; + border-color: #337ab7; +} +.btn-info:hover, +.btn-info:active, +.btn-info.hover { + background-color: #337ab7; +} +.btn-danger { + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-danger:hover, +.btn-danger:active, +.btn-danger.hover { + background-color: #e6e6e6; +} + +/* button css */ +.btn-test { + margin-right: -5px; + border-radius: 1px; + width: 65px; + /* color: darkgrey; */ + border-right-color: #dfe7ef !important;/* #337ab7 */ + border-bottom-left-radius: 5px; + border-top-left-radius: 5px; + width: max-content; +} +.btn-test:hover, +.btn-test:active{ + background-color: #337ab7 !important; +} +.btn-save { + margin-right: 0px; + border-radius: 0px; + width: max-content; +} +.btn-save:active{ + background-color: #337ab7 !important; +} + +.btn-cancel { + margin-left:0 !important; + border-radius: 0px; + margin-right: -4px; + width: 65px; + color: #100c0c; + border-bottom-right-radius: 5px; + border-top-right-radius: 5px; + width: max-content; + border-color: #8080809e; +} +.btn-cancel:hover, +.btn-cancel:active{ + background-color: #e6e6e6 !important; + border-color: darkgrey; + /* color:black; */ +} +/* .btn-close{ + width: max-content; +} + */ + +/* alert color */ +.alert-danger, .alert-error { + border-color: white; + color: #981e1e !important; +} +.alert-success { + border-color: white; + color: #008d4b !important +} + +/*Ace Edito Height*/ +.ace_editor { + height : 295px !important; +} + +/*css for multiselect box */ +select[multiple] option:checked { + background: #3c8dbcd1 linear-gradient(0deg, #3c8dbcd1 0%, #3c8dbcd1 100%); + margin-bottom: 3px; + font-style: italic; + font-weight: bold; +} + +/* ======================= Custom CSS ========================== */ +.the-box { + padding: 15px; + margin-bottom: 30px; + background: #fff; + border: 1px solid #D5DAE0; + position: relative; + cursor:pointer; + box-shadow: 1px 1px 2px rgba(0,0,0,0.2); +} +.tiles-information .progress { + margin: 20px -15px; +} +.progress.no-rounded { + border-radius: 0px; +} +.progress.progress-xs { + height: 5px; +} +.bg-success { + background-color: #8CC152; +} +.bg-danger { + background-color: #E9573F; +} +.bg-warning { + background-color: #F6BB42; +} +.bg-primary { + background-color: #37BC9B; +} +.bg-info { + background-color: #3BAFDA; +} +.bg-dark, .bg-primary, .bg-success, .bg-info, .bg-danger, .bg-warning { + color: #fff; +} +.bg-success .progress-bar-success { + background-color: #76AD3E; +} +.bg-danger .progress-bar-danger { + background-color: #D1462C; +} +.bg-primary .progress-bar-primary { + background-color: #27A283; +} +.bg-warning .progress-bar-warning { + background-color: #E0A52C; +} +.bg-info .progress-bar-info { + background-color: #2998C1; +} + + + +.dropdown-menu.box { + max-width: 250px !important; + min-width: 110px !important; + top: 46px; + padding: 0; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.176) !important; + border: none !important; + border-radius: 4px; + position:absolute; + padding: 0px !important; +} +.user-menu .up-arrow { + border-style: solid; + border-width: 0 9px 9px; + height: 0; + margin-top: 0; + opacity: 0; + position: absolute; + width: 0; + z-index: 10; + margin-top: 10px; + opacity: 1; + border-color: transparent transparent #007aff; + border-bottom-color: #007aff !important; + border-top-color: #007aff !important; +} +.user-menu .up-arrow { + right: 30px; + top: -18px; +} + +.dropdown-menu.box li a { + border-bottom: 1px solid #ebebeb !important; + font-size: 0.9em; + list-style: none; + padding: 10px 10px !important; + width: 100%; + display: inline-block; +} + +.border-top { + border-top: 2px solid #187fcc !important +} +.action-box-dropdown { + top: 25px!important; + width: 130px !important; +} +.new-button-dropdown { + top: 25px!important; + width: 190px !important; +} +.action-uparrow { + right: 5px!important; +} +.action-icon-size { + padding-right: 10px; + font-size: 17px; +} + +/* theme change dropdown css */ + + + +.theme-changer{ + padding:10px 10px 0 10px; +} +.theme-changer h5{ + margin: 0 0 5px 0; + border-bottom: 1px solid #ddd; + padding-bottom: 3px; +} +.theme-changer a{ + float: left!important; + display: table!important; + width: auto!important; + padding: 2px!important; + clear: initial!important; + border-bottom: 0!important; +} +.theme-changer a:hover{ + background:transparent!important; +} +.skin-selector { + width: 20px; + height: 20px; + float: left; + cursor: pointer; + margin: 2px 2px; + border-radius: 50%; +} + + diff --git a/src/main/webapp/css/login.css b/src/main/webapp/css/login.css new file mode 100644 index 000000000..460cb352e --- /dev/null +++ b/src/main/webapp/css/login.css @@ -0,0 +1,672 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v18/ty9dfvLAziwdqQ2dHoyjphTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v18/frNV30OaYdlFRtH2VnZZdhTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v18/gwVJDERN2Amz39wrSoZ7FxTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v18/aZMswpodYeVhtRvuABJWvBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v18/VvXUGKZXbHtX_S_VCTLpGhTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v18/e7MeVAyvogMqFwwl61PKhBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v18/2tsd397wLxj96qwHyNIkxPesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v18/0eC6fl06luXEYWpBSJvXCBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v18/Fl4y0QdOxyyTHEGMXX8kcRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v18/-L14Jk06m6pUHB-5mXQQnRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v18/I3S1wsgSg9YCurV6PUkTORJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v18/NYDWBdD4gIq26G5XYbHsFBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v18/Pru33qjShpZSmG3z6VYwnRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v18/Hgo13k-tfSpn0qi1SFdUfVtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v18/ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v18/mErvLBYg_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v18/-2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v18/u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v18/NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v18/Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v18/CWB0XYA8bzo0kSThX0UTuA.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v18/ZLqKeelYbATG60EpZBSDyxJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v18/oHi30kwQWvpCWqAhzHcCSBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v18/rGvHdJnr2l75qb0YND9NyBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v18/mx9Uck6uB63VIKFYnEMXrRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v18/mbmhprMH69Zi6eEPBYVFhRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v18/oOeFwZNlrTefzLYmlVV1UBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v18/RxZJdnzeo3R5zSexge8UUVtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v18/77FXFjRbGzN4aCrSFhlh3hJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v18/isZ-wbCXNKAbnjo6_TwHThJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v18/UX6i4JxQDm3fVTc1CPuwqhJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v18/jSN2CGVDbcVyCnfJfjSdfBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v18/PwZc-YbIL414wB9rB1IAPRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v18/97uahxiqZRoncBaCEI3aWxJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v18/d-6IYplOFocCacKzxwXSOFtXRa8TVwTICgirnJhmVJw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 900; + src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v18/s7gftie1JANC-QmDJvMWZhJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 900; + src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v18/3Y_xCyt7TNunMGg0Et2pnhJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 900; + src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v18/WeQRRE07FDkIrr29oHQgHBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 900; + src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v18/jyIYROCkJM3gZ4KV00YXOBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 900; + src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v18/phsu-QZXz1JBv0PbFoPmEBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 900; + src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v18/9_7S_tWeGDh5Pq3u05RVkhJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 900; + src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v18/mnpfi9pxYH-Go5UiibESIltXRa8TVwTICgirnJhmVJw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 100; + src: local('RobotoDraft Thin'), local('RobotoDraft-Thin'), url(https://fonts.gstatic.com/s/robotodraft/v5/hope9NW9iJ5hh8P5PM_EA3cHpeTo4zNkUa02-F9r1VE.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 100; + src: local('RobotoDraft Thin'), local('RobotoDraft-Thin'), url(https://fonts.gstatic.com/s/robotodraft/v5/hope9NW9iJ5hh8P5PM_EA5HDipyzW3oxlM2ogtcJE3o.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 100; + src: local('RobotoDraft Thin'), local('RobotoDraft-Thin'), url(https://fonts.gstatic.com/s/robotodraft/v5/hope9NW9iJ5hh8P5PM_EAwrQu7msDD1BXoJWeH_ykbQ.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 100; + src: local('RobotoDraft Thin'), local('RobotoDraft-Thin'), url(https://fonts.gstatic.com/s/robotodraft/v5/hope9NW9iJ5hh8P5PM_EAz_9YuvR6BbpvcNvv-P7CJ0.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 100; + src: local('RobotoDraft Thin'), local('RobotoDraft-Thin'), url(https://fonts.gstatic.com/s/robotodraft/v5/hope9NW9iJ5hh8P5PM_EAyGQb_MN5JCwpvZt9ko0I5U.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 100; + src: local('RobotoDraft Thin'), local('RobotoDraft-Thin'), url(https://fonts.gstatic.com/s/robotodraft/v5/hope9NW9iJ5hh8P5PM_EA7r6l97bd_cX8oZCLqDvOn0.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 100; + src: local('RobotoDraft Thin'), local('RobotoDraft-Thin'), url(https://fonts.gstatic.com/s/robotodraft/v5/hope9NW9iJ5hh8P5PM_EA9FPPhm6yPYYGACxOp9LMJ4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 300; + src: local('RobotoDraft Light'), local('RobotoDraft-Light'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwRgVThLs8Y7ETJzDCYFCSLE.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 300; + src: local('RobotoDraft Light'), local('RobotoDraft-Light'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwZiMaisvaUVUsYyVzOmndek.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 300; + src: local('RobotoDraft Light'), local('RobotoDraft-Light'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwbBAWGjcah5Ky0jbCgIwDB8.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 300; + src: local('RobotoDraft Light'), local('RobotoDraft-Light'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-Vwf14vlcfyPYlAcQy2UfDRm4.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 300; + src: local('RobotoDraft Light'), local('RobotoDraft-Light'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwafJul7RR1X4poJgi27uS4w.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 300; + src: local('RobotoDraft Light'), local('RobotoDraft-Light'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwavyPXdneeGd26m9EmFSSWg.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 300; + src: local('RobotoDraft Light'), local('RobotoDraft-Light'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwUo2lTMeWA_kmIyWrkNCwPc.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 400; + src: local('RobotoDraft'), local('RobotoDraft-Regular'), url(https://fonts.gstatic.com/s/robotodraft/v5/0xES5Sl_v6oyT7dAKuonizTOQ_MqJVwkKsUn0wKzc2I.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 400; + src: local('RobotoDraft'), local('RobotoDraft-Regular'), url(https://fonts.gstatic.com/s/robotodraft/v5/0xES5Sl_v6oyT7dAKuonizUj_cnvWIuuBMVgbX098Mw.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 400; + src: local('RobotoDraft'), local('RobotoDraft-Regular'), url(https://fonts.gstatic.com/s/robotodraft/v5/0xES5Sl_v6oyT7dAKuoni0bcKLIaa1LC45dFaAfauRA.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 400; + src: local('RobotoDraft'), local('RobotoDraft-Regular'), url(https://fonts.gstatic.com/s/robotodraft/v5/0xES5Sl_v6oyT7dAKuoni2o_sUJ8uO4YLWRInS22T3Y.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 400; + src: local('RobotoDraft'), local('RobotoDraft-Regular'), url(https://fonts.gstatic.com/s/robotodraft/v5/0xES5Sl_v6oyT7dAKuoni76up8jxqWt8HVA3mDhkV_0.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 400; + src: local('RobotoDraft'), local('RobotoDraft-Regular'), url(https://fonts.gstatic.com/s/robotodraft/v5/0xES5Sl_v6oyT7dAKuoniyYE0-AqJ3nfInTTiDXDjU4.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 400; + src: local('RobotoDraft'), local('RobotoDraft-Regular'), url(https://fonts.gstatic.com/s/robotodraft/v5/0xES5Sl_v6oyT7dAKuoni44P5ICox8Kq3LLUNMylGO4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 500; + src: local('RobotoDraft Medium'), local('RobotoDraft-Medium'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VweKfXlfQjcwZMTeE7wI4WGI.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 500; + src: local('RobotoDraft Medium'), local('RobotoDraft-Medium'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwUtJuoiaQfPpa269V2FDaLo.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 500; + src: local('RobotoDraft Medium'), local('RobotoDraft-Medium'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-Vwb_PilIG-AM4Aw-a0tUNcnA.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 500; + src: local('RobotoDraft Medium'), local('RobotoDraft-Medium'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwZ2u1fTOyc-e8Bt1FRZ8XII.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 500; + src: local('RobotoDraft Medium'), local('RobotoDraft-Medium'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwXdOSIwbEkyw5bZp8Nzw7hU.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 500; + src: local('RobotoDraft Medium'), local('RobotoDraft-Medium'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwbX8PDrklLOWyWIn-2-AqKA.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 500; + src: local('RobotoDraft Medium'), local('RobotoDraft-Medium'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwbBojE9J5UnpMtv5N3zfxwk.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 700; + src: local('RobotoDraft Bold'), local('RobotoDraft-Bold'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwZ6iIh_FvlUHQwED9Yt5Kbw.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 700; + src: local('RobotoDraft Bold'), local('RobotoDraft-Bold'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwS_vZmeiCMnoWNN9rHBYaTc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 700; + src: local('RobotoDraft Bold'), local('RobotoDraft-Bold'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwSFaMxiho_5XQnyRZzQsrZs.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 700; + src: local('RobotoDraft Bold'), local('RobotoDraft-Bold'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwQalQocB-__pDVGhF3uS2Ks.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 700; + src: local('RobotoDraft Bold'), local('RobotoDraft-Bold'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwWhQUTDJGru-0vvUpABgH8I.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 700; + src: local('RobotoDraft Bold'), local('RobotoDraft-Bold'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwejkDdvhIIFj_YMdgqpnSB0.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 700; + src: local('RobotoDraft Bold'), local('RobotoDraft-Bold'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwYlIZu-HDpmDIZMigmsroc4.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} +/* cyrillic-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 900; + src: local('RobotoDraft Black'), local('RobotoDraft-Black'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwT3ms2ZYvNIk-NBT0TWd7d8.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 900; + src: local('RobotoDraft Black'), local('RobotoDraft-Black'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwSSVcAiWRG34AZh10ouskJM.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 900; + src: local('RobotoDraft Black'), local('RobotoDraft-Black'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwdMe8bR2ydf-7TTtdsqQSX8.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 900; + src: local('RobotoDraft Black'), local('RobotoDraft-Black'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-Vwcds_PxIKQVWhSolulHOiVA.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 900; + src: local('RobotoDraft Black'), local('RobotoDraft-Black'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwbSYYZADbk_6PT7FzZ2GScM.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 900; + src: local('RobotoDraft Black'), local('RobotoDraft-Black'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwblR9l3n4ZtVZdCvvDPwi9o.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'RobotoDraft'; + font-style: normal; + font-weight: 900; + src: local('RobotoDraft Black'), local('RobotoDraft-Black'), url(https://fonts.gstatic.com/s/robotodraft/v5/u0_CMoUf3y3-4Ss4ci-VwcpPZoEQdaDZ3o3Np19rzJk.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215; +} \ No newline at end of file diff --git a/src/main/webapp/css/loginNew.min.css b/src/main/webapp/css/loginNew.min.css new file mode 100644 index 000000000..24fcc04c4 --- /dev/null +++ b/src/main/webapp/css/loginNew.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.3.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-genderless:before,.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"} \ No newline at end of file diff --git a/src/main/webapp/css/main.css b/src/main/webapp/css/main.css new file mode 100644 index 000000000..550ed1e08 --- /dev/null +++ b/src/main/webapp/css/main.css @@ -0,0 +1,6152 @@ +/* + * Template name: Kertas - Responsive Bootstrap 3 Admin Template + * Version: 1.0.0 + * Author: VergoLabs + */ + +/* FONT */ +/*@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700);*/ + +/* GENERAL STYLE */ +@import url('../../framework/css/fonts.css'); +html, +body,#main { + /*overflow-x: hidden !important;*/ + font-family: 'Open Sans', sans-serif; + min-height: 100%; + background: #ffffff; + /*background: #000;*/ + font-size: 13px; +} + +a { + color: #428bca; + outline:none; +} +gr +a:hover, +a:active, +a:focus { + outline: none; + text-decoration: none; + color: #72afd2; +} + +/* LAYOUT */ +.wrapper { + min-height: 100%; +} + +.wrapper:before, +.wrapper:after { + display: table; + content: " "; +} + +.wrapper:after { + clear: both; +} + +body .header, +body .navbar { + position: fixed; +} + +body .wrapper { + margin-top: 50px; +} + +/* HEADER */ +body .header { + position: absolute; + top: 0; + left: 0; + right: 0; +} + +/* NAVBAR */ +body .navbar { + background: #035889; + left: 0; + right: 0; +} + +/* LEFT & RIGHT SIDE */ +.left-side, +.right-side { + min-height: 100%; + display: block; +} + +.left-side { + position: fixed; + width: 220px; + top: 0; + z-index: 999; + font-size: 0.9em; + background:#0068a5; +} + +.right-side { + /*background-color: #f9f9f9;*/ + /*color: #666666;*/ + /*margin-left: 220px;*/ + margin-left: 50px; + overflow: hidden; +} +.content { + padding:25px; + padding-left: 0; + padding-top: 0; + /*background: #f1f1f1;*/ +} + +/* UTILITY */ +/* H1 - H6 font */ +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-weight: 300; +} + +.page-header { + margin: 10px 0 20px 0; + font-size: 22px; +} + +.page-header > small { + color: #666; + display: block; + margin-top: 5px; +} + +.sort-highlight { + background: #f4f4f4; + border: 1px dashed #dddddd; + margin-bottom: 10px; +} + +.padding { + padding: 10px; +} + +.margin { + margin: 10px; +} + +.inline{ + display: inline; + width: auto; +} +.dtwdth { + width:30%; +} + +/* BACKGROUND COLORS */ +.bg-red, .bg-yellow, .bg-aqua, .bg-blue, .bg-light-blue, .bg-green, .bg-navy, .bg-teal, .bg-olive, .bg-lime, .bg-orange, .bg-fuchsia, .bg-purple, .bg-maroon, bg-gray, bg-black, .bg-red a, .bg-yellow a, .bg-aqua a, .bg-blue a, .bg-light-blue a, .bg-green a, .bg-navy a, .bg-teal a, .bg-olive a, .bg-lime a, .bg-orange a, .bg-fuchsia a, .bg-purple a, .bg-maroon a, bg-gray a, .bg-black a { + color: #f9f9f9 !important; +} +.bg-white, .bg-white a { + color: #999999 !important; +} +.bg-red { + background-color: #f56954 !important; +} +.bg-yellow { + background-color: #f39c12 !important; +} +.bg-aqua { + background-color: #00c0ef !important; +} +.bg-blue { + background-color: #0073b7 !important; +} +.bg-light-blue { + background-color: #3c8dbc !important; +} +.bg-green { + background-color: #00a65a !important; +} +.bg-navy { + background-color: #001f3f !important; +} +.bg-teal { + background-color: #39cccc !important; +} +.bg-olive { + background-color: #3d9970 !important; +} +.bg-lime { + background-color: #01ff70 !important; +} +.bg-orange { + background-color: #ff851b !important; +} +.bg-fuchsia { + background-color: #f012be !important; +} +.bg-purple { + background-color: #932ab6 !important; +} +.bg-maroon { + background-color: #85144b !important; +} +.bg-gray { + background-color: #eaeaec !important; +} +.bg-black { + background-color: #222222 !important; +} + +/* TEXT COLORS */ +.text-red { + color: #f56954 !important; +} +.text-yellow { + color: #f39c12 !important; +} +.text-aqua { + color: #00c0ef !important; +} +.text-blue { + color: #0073b7 !important; +} +.text-light-blue { + color: #3c8dbc !important; +} +.text-green { + color: #00a65a !important; +} +.text-navy { + color: #001f3f !important; +} +.text-teal { + color: #39cccc !important; +} +.text-olive { + color: #3d9970 !important; +} +.text-lime { + color: #01ff70 !important; +} +.text-orange { + color: #ff851b !important; +} +.text-fuchsia { + color: #f012be !important; +} +.text-purple { + color: #932ab6 !important; +} +.text-maroon { + color: #85144b !important; +} +.text-gray { + color: #666666 !important; +} +.text-black { + color: #222222 !important; +} + +.hide { + display: none !important; +} + +.fixed { + position: fixed !important; +} + +.no-border { + border: 0px !important; +} + +.no-padding { + padding: 0px !important; +} + +.no-margin { + margin: 0px !important; +} + +.no-padding-right { + padding-right: 0px !important; +} + +.no-padding-left { + padding-left: 0px !important; +} + +.no-margin-right { + margin-right: 0px !important; +} + +.no-margin-left { + margin-left: 0px !important; +} + +.no-shadow { + box-shadow: none !important; +} + +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f3f4f5; +} + +table .text-center td, +table .text-center th { + text-align: center; +} + +.loading { + border-image: none; + border-radius: 10px 10px 10px 10px; + border-right: 2px solid rgba(0, 0, 0, 0); + border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0.4); + border-style: solid; + border-width: 2px; + margin-left: 40%; + display: block; + width: 14px; + height: 14px; + z-index: 2000; + -moz-border-bottom-colors: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + -webkit-animation: pace-spinner 400ms linear infinite; + -moz-animation: pace-spinner 400ms linear infinite; + -ms-animation: pace-spinner 400ms linear infinite; + -o-animation: pace-spinner 400ms linear infinite; + animation: pace-spinner 400ms linear infinite; +} + +/* HEADER */ +.header { + position: relative; + max-height: 100px; + z-index: 1000; +} + +.header .logo { + float: left; + line-height: 50px; + padding: 0 10px; + width: 220px; + height: 50px; + display: block; + position: fixed; + min-width: 200px; + min-height: 50px; + margin-right: auto; + margin-left: auto; + /*text-align: center;*/ + display: table-cell; + vertical-align: middle; + background:#035889; + color:#fff; + font-size:20px; + outline:none; +} +.header .logo strong{ + +} +.header .navbar { + height: 50px; + margin-bottom: 0; + margin-left: 220px; +} + +.header .navbar .sidebar-toggle { + float: left; + padding: 4px 5px; + /*margin-top: 10px;*/ + margin-left: 16px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 0 !important; + font-size: 16px; +} + +/* NAVBAR */ +.navbar { + border-bottom: 1px solid #035889; +} + +.navbar .nav a, +.navbar .sidebar-toggle .fa-bars { + color: #fff; +} + +.nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + /*background-color: #fca325!important;*/ + transition: background-color 1s ease-out 0s; + border-color: #337ab7; + background:none; + /*color:#FCA325!important;*/ +} + +.navbar-nav { + /*margin: 8px 56px 0 0;*/ + padding: 8px 3px 3px 0; +} +.navbar h2{ + color: #fff; + font-weight: 600; + margin: 0; + padding: 0 3px 0 61px; + width:auto; +} +.navbar .navbar-right { + /*background-color: #fff;*/ + padding-left: 15px; + height: 48px; + margin:0; +} +.navbar .navbar-left { + /*padding-left: 15px;*/ + height: 50px; + /*background:red;*/ +} + + +.navbar .navbar-right > .nav { + margin-right: 10px; +} + +.navbar-right .username { + padding-left: 5px; +} + +.navbar-right .nav .caret { + border-bottom-color: #555555; + border-top-color: #555555; +} +.border-top +{ + border-top: 2px solid #035889 !important; +} +.navbar-menu{ + position: absolute; +} +.profile-menu { + position: absolute; + /*background-color: #fff;*/ +} + +.navbar-right ul.navbar-nav > li > a { + background: none; + margin-right: 0; + font-size: 0.9em; +} + +.navbar-right ul.navbar-nav > li.navbar-menu > a, +.navbar-right ul.navbar-nav > li.profile-menu > a { + padding: 7px; + font-size: 1em; + font-weight: 600; +} + +.navbar-right ul.navbar-nav > li { + margin-right: 16px; +} + +.navbar-right ul.navbar-nav > li.profile-menu { + margin-right: 0; +} + +.navbar-right ul.navbar-nav > li > a:hover, +.navbar-right ul.navbar-nav > li > a:focus { + /*background: #f1f2f7;*/ +} + +ul.navbar-nav > li .badge { + background: #ff2d55; + border-radius: 9px; + font-size: 10px !important; + font-weight: 400; + text-align: center; + padding: 3px 5px; + z-index: 100; + min-width: 18px; + height: 18px; +} + +ul.navbar-nav > li.navbar-menu .badge { + position: absolute; + right: -6px; + top: 0px; +} + +ul.navbar-nav > li > a { + color: #8e8e93; + padding: 7px 15px; + font-size:25px; + /*margin-right: 15px;*/ +} + +ul.navbar-nav > li > a:hover, +ul.navbar-nav > li > a:focus { + background:none; + transition: background-color 1s ease-out 0s; + /*opacity:0.9;*/ + color:#ccc; +} + +.navbar-nav li.navbar-menu .up-arrow, +.navbar-nav li.profile-menu .up-arrow { + border-style: solid; + border-width: 0 9px 9px; + height: 0; + margin-top: 0; + opacity: 0; + position: absolute; + width: 0; + z-index: 10; + margin-top: 10px; + opacity: 1; + border-color: transparent transparent #035889; + border-bottom-color: #035889 !important; + border-top-color: #035889 !important; +} + +/*.navbar-nav li.navbar-menu .up-arrow { + right: 96px; + top: -18px; +}*/ +.navbar-nav li.navbar-menu .up-arrow { + left: 8px; + top: -19px; +} +.navbar-nav li.profile-menu .up-arrow { + right: 30px; + top: -18px; +} + +ul.navbar-nav .open .dropdown-menu { + position: absolute; + background-color: #fff; +} + +ul.navbar-nav li.navbar-menu .dropdown-menu { + float: right; + right: -90px; + left: auto; +} + +.dropdown-menu.box { + max-width: 300px !important; + min-width: 160px !important; + top: 46px; + width: 235px !important; + padding: 0; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.176) !important; + border: none !important; + border-radius: 4px; +} + +.dropdown-menu.box li p { + margin: 0; + padding: 10px; + margin: 0; + font-size: 0.9em; +} + +.dropdown-menu > li > a { + color: #797979; + padding: 0; +} + +.dropdown-menu.box li a { + border-bottom: 1px solid #ebebeb !important; + font-size: 0.9em; + list-style: none; + padding: 10px 10px !important; + width: 100%; + display: inline-block; +} + +.dropdown-menu.box li a:hover { + background-color: #f7f8f9 !important; + color: #2e2e2e; +} + +.dropdown-menu.box li a .fa { + display: inline-block; + width: 2em; + text-align: center; +} + +.dropdown-menu.box li.footer a { + background: #efefef; + text-align: center; +} + +.dropdown-menu.box li.footer a:hover { + color: #828293; + border: none !important; +} + +.dropdown-menu.task .task-info .task-desc { + font-size: 13px; + font-weight: normal; +} + +.dropdown-menu.task .task-info .task-percent { + display: inline-block; + float: right; + font-size: 13px; + padding-left: 10px; + margin-top: -4px; +} + +.dropdown-menu.box .progress { + margin-bottom: 0 !important; + height: 10px; +} + +.dropdown-menu.inbox li a .photo img { + border-radius: 50%; + border: 1px solid #ddd; + float: left; + height: 40px; + margin-right: 4px; + width: 40px; +} + +.dropdown-menu.inbox li a .subject { + display: block; +} + +.dropdown-menu.inbox li a .subject .from { + font-size: 12px; + font-weight: 600; +} + +.dropdown-menu.inbox li a .subject .time { + font-size: 11px; + font-style: italic; + position: absolute; + right: 5px; +} + +.dropdown-menu.inbox li a .message { + display: block !important; + font-size: 11px; + overflow-x: hidden; +} + +.dropdown-menu.notification li a .time { + font-size: 11px; + font-style: italic; +} + +.navbar-right ul.navbar-nav > li .dropdown-menu.profile { + width: 200px !important; +} + +.navbar-nav li.profile-menu .dropdown-menu { + float: right; + right: 0; + left: auto; +} + +.dropdown-menu .box .profile > li { + float: left; + text-align: left; + width: 100%; +} + +.dropdown-menu .box .profile > li > a { + border-bottom: 1px solid #ebebeb !important; + list-style: none; + padding: 10px 10px !important; + width: 100%; + display: inline-block; + font-size: 0.9em !important; +} + +.dropdown-menu .box .profile > li > a:hover { + background-color: #f7f8f9 !important; + color: #2e2e2e; +} + +.dropdown-menu.box.profile > li > a > i { + font-size: 17px; + display: inline-block; + padding-right: 10px; +} + +/* SIDEBAR */ +.sidebar { + margin-bottom: 5px; +} + +.user-panel { + padding: 8px 15px 0 15px; +} + +.user-panel:before, +.user-panel:after { + display: table; + content: " "; +} + +.user-panel:after { + clear: both; +} + +.user-panel > .image > img { + width: 45px; + height: 45px; +} + +.user-panel > .info { + font-weight: 400; + padding: 5px 5px 5px 15px; + line-height: 1; + color:#fff; +} + +.user-panel > .info > p { + margin-bottom: 9px; +} + +.user-panel > .info > a { + text-decoration: none; + padding-right: 5px; + margin-top: 3px; + font-size: 11px; + font-weight: normal; + color:#eee; +} + +.user-panel > .info > a > .fa { + margin-right: 3px; +} + +.sidebar-form { + border-radius: 2px; + margin: 12px; +} + +.sidebar-form input { + font-size: 1em; +} + +.sidebar-form input[type="text"], +.sidebar-form .btn { + box-shadow: none; + height: 35px; + outline: none; +} + +.sidebar-form input[type="text"] { + border-top-left-radius: 2px !important; + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 2px !important; + background-color: rgba(255, 255, 255, 0.2); + border: 0 solid rgba(255, 255, 255, 0.2); + color:#fff; +} + +.sidebar-form input::-webkit-input-placeholder { /* Chrome/Opera/Safari */ + color: #ccc; +} +.sidebar-form input::-moz-placeholder { /* Firefox 19+ */ + color: #ccc; +} +.sidebar-form input:-ms-input-placeholder { /* IE 10+ */ + color: #ccc; +} +.sidebar-form input:-moz-placeholder { /* Firefox 18- */ + color: #ccc; +} + + +.sidebar-form input:focus { + box-shadow: none; + border-color: transparent !important; +} + + +.sidebar-form input[type="text"]:focus, +.sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border: 0; +} + +.sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left: 0; +} + +.sidebar-form .btn { + border-top-left-radius: 0 !important; + border-top-right-radius: 2px !important; + border-bottom-right-radius: 2px !important; + border-bottom-left-radius: 0 !important; + border-left: 0; + background-color: rgba(255, 255, 255, 0.2); + border: 0 solid rgba(255, 255, 255, 0.2); + color:#fff; +} + +.sidebar .sidebar-form .input-group-btn > .btn { + margin-left: 0; +} + +.sidebar .sidebar-menu { + list-style: none; + margin: 0; + padding: 0; +} + +.sidebar .sidebar-menu .badge { + font-weight: 400; + font-size: 0.9em; + padding: 3px 6px; + margin: 2px 4px; +} + +.sidebar .sidebar-menu > li { + margin: 0; + padding: 0; + border-top: 1px solid #4591bd; + border-bottom: 1px solid #035484; +} + +.sidebar .sidebar-menu > li > a { + padding: 10px 5px; + display: block; + /*margin:5px 0px;*/ + color: #ccc; +} +.sidebar > .sidebar-menu > li > a:hover +{ + color:#fff; +} +.sidebar > .sidebar-menu > li.active > a +{ + background-color:rgba(0, 0, 0, 0.21); + color:#fff; +} + +.sidebar > .sidebar-menu > li.active +{ + padding-right:0px; +} + +.sidebar .sidebar-menu > li > a > .fa { + display: inline-block; + width: 2.5em; + text-align: center; +} + +.sidebar .sidebar-menu > li > a > .fa-angle-left, +.sidebar .sidebar-menu > li > a > .fa-angle-down { + padding-top: 3px; +} + +.sidebar .sidebar-menu > li > ul > li > a > .fa-angle-left, +.sidebar .sidebar-menu > li > ul > li > a > .fa-angle-down { + padding-top: 3px; + margin-right: 15px; +} + +.sidebar .sidebar-menu .sub-menu { + display: none; + list-style: none; + padding: 0; + margin: 0; +} + +.sidebar .sidebar-menu .sub-menu > li { + margin: 0px; +} + +.sidebar .sidebar-menu .sub-menu > li:first-child { + padding-top: 6px; +} + +.sidebar .sidebar-menu .sub-menu > li:last-child { + padding-bottom: 6px; +} + +.sidebar .sidebar-menu .sub-menu > li > a { + padding: 6px 5px 6px 36px; + display: block; + margin: 0px 0px; + font-size: 0.98em; +} + +.sidebar .sidebar-menu .sub-menu > li .sub-menu > li > a { + padding: 6px 5px 6px 40px; +} +.sidebar > .sidebar-menu > li.active > a +{ + border-left:2px solid #ccc; +} +/* COLLAPSE SIDEBAR */ +.left-side.collapse-left { + width: 50px; + position:fixed; +} + +.left-side.collapse-left > .sidebar > ul.sidebar-menu > li > a > .fa { + font-size: 1.5em; + width: 100%; +} + +.left-side.collapse-left > .sidebar > .user-panel, +.left-side.collapse-left > .sidebar > .sidebar-form, +.left-side.collapse-left > .sidebar > ul.sidebar-menu > li > a > span, +.left-side.collapse-left > .sidebar > ul.sidebar-menu > li.menu > a > span, +.left-side.collapse-left > .sidebar > ul.sidebar-menu > li > a > small, +.left-side.collapse-left > .sidebar > ul.sidebar-menu > li.menu > a > small, +.left-side.collapse-left > .sidebar > ul.sidebar-menu > li > a > .fa-angle-left, +.left-side.collapse-left > .sidebar > ul.sidebar-menu > li.menu > a > .fa-angle-left, +.left-side.collapse-left > .sidebar > ul.sidebar-menu > li > a > .fa-angle-down, +.left-side.collapse-left > .sidebar > ul.sidebar-menu > li.menu > a > .fa-angle-down { + display: none; +} + +.left-side.collapse-left > .sidebar > ul.sidebar-menu > li.menu > ul.sub-menu { + position: absolute; + margin-top: -46px; + margin-left :50px; + width: auto; + z-index: 999; + min-width: 250px; +} + +.left-side.collapse-left > .sidebar > ul.sidebar-menu > li.menu > ul.sub-menu > li > a { + padding-left: 10px; +} + +/* CONTENT */ +.right-side > .content-header { + padding: 5px 20px 1px 25px; + background: #eae9e9; + box-shadow: none; + border-bottom: 1px solid #ccc; +} + +.right-side > .content-header > span { + margin: 0; + font-size: 2em; + font-weight: 300; + text-transform: uppercase; +} +.right-side > .content-header > span i{ + font-size: 1.6em; +} +.right-side > .content-header > .fa { + font-size: 4em; + text-align: center; + margin: 0; + width: 1.2em; + height: 1.2em; + margin-right: 10px; + float: left; + line-height: 1.2em; +} +.right-side > .content-header > img { + font-size: 4em; + text-align: center; + margin: 0; + width: 1.2em; + height: 1.2em; + margin-right: 10px; + float: left; + line-height: 1.2em; + height: 60px; + width: 54px; +} +.right-side > .content-header > .breadcrumb { + background: transparent; + margin-top: 0; + padding: 0; + font-size: 0.9em; + font-weight: 300; + text-transform: uppercase; + margin-bottom: 10px; + margin-left:50px; +} + +.right-side > .content-header > .breadcrumb > li > a { + color: #666666; +} + +.right-side > .content-header > .breadcrumb > li > a:hover { + color: #000000; +} + +.right-side > .content-header > .breadcrumb > li + li:before { + content: "\002f \0020"; + color: #000000; +} + +.right-side > .content { + /*padding: 25px;*/ + padding:20px 25px 0; + background: #f1f1f1; +} + +/* MEDIA QUERIES */ +@media screen and (max-width: 992px) { + .relative { + position: relative; + } + .row-offcanvas-left .sidebar-offcanvas { + left: -250px; + } + .row-offcanvas-right .sidebar-offcanvas { + right: -250px; + } + .row-offcanvas-left.active { + left: 250px; + } + .row-offcanvas-right.active { + right: 250px; + } + .right-side { + margin-left: 0; + } +} + +@media screen and (min-width: 992px) { + .left-side { + top: 50px; + } + .left-side.collapse-left { + /*left: -250px;*/ + } + .right-side.strech { + margin-left: 50px; + } + .right-side.strech > .content-header { + margin-top: 0px; + } +} + +@media screen and (width: 992px) { + .left-side { + top: 0px !important; + } +} + +@media screen and (max-width: 768px) { + .navbar .navbar-right { + float: right; + } + .navbar .navbar-nav { + float: left; + } + .navbar .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + line-height: 20px; + } + .right-side > .content-header > .breadcrumb { + position: relative; + top: 0; + right: 0; + float: none; + } + .ticker { + display: none; + } +} + +@media screen and (max-width: 560px) { + body > .header { + position: fixed; + } + body > .header .navbar { + margin: 0; + } + body > .header .logo, + body > .header .navbar { + width: 100%; + float: right; + position: relative !important; + } + body > .wrapper { + margin-top: 120px !important; + } +} + +/*@media screen and (max-width: 360px) { + .navbar-menu, + .grid .grid-header > .grid-tools { + display: none !important; + } +}*/ + +@media print { + .no-print { + display: none; + } + .left-side, + .header, + .content-header { + display: none; + } + .right-side { + margin: 0 auto; + } + .invoice { + padding-top: 0px !important; + margin-top: 0px !important; + } +} + +/* + * COMPONENT + */ + +/* NEWS TICKER */ +.ticker { + color: #999; + float: left; + height: 60px; + width: 100%; + position: absolute; + line-height: 60px; + margin-left: 60px; + text-overflow: clip; + white-space: nowrap; + overflow: hidden; + z-index: -1; +} + +.ticker div { + display: inline-block; +} + +.ticker strong { + float: left; + display: inline; + line-height: 60px; + margin-right: 10px; +} + +.ticker ul { + margin-bottom: 0px; +} + +.ticker li { + height: 60px; + list-style: none; +} + +/* SCROLL TO TOP */ +/*.scroll-to-top { + background: url(../img/scroll-to-top.png) no-repeat; + position: fixed; + cursor: pointer; + bottom: 24px; + right: 20px; + width: 35px; + height: 35px; + display: none; + z-index: 999; +}*/ + +/* DASHBOARD */ +.grid.widget .grid-body { + padding: 5px 5px 5px 5px; +} +.widget .showicon { + display: block; + text-align: center; + padding-top: 20px; +} +.widget .showicon1 { + display: block; + text-align: center; + padding-top: 20px; +} +.widget .showicon i{ + font-size: 50px; +} +.widget .showicon1 i { + font-size: 30px; +} +.widget .showicon img{ + +} +.widget .title { + display: block; + text-align: center; + font-weight: 600; +} + +.widget .value { + display: block; + text-align: center; + font-size: 2em; + margin: 10px 0; +} + +.widget .value1 { + display: block; + font-size: 1em; + font-weight: 600; + margin: 10px 0; + text-align: center; +} + +.widget .chart { + display: block; + text-align: center; + margin-bottom: 2px; +} + +.current-stat h3 { + margin-top: 10px; +} + +.current-stat .grid { + box-shadow: none; +} + +.current-stat span { + display: block; + width: 100%; +} + +.stat h4 { + margin: 0px; + font-weight: 400; + padding-bottom: 10px; +} + +.stat h4 small { + color: #ffffff; + line-height: 1.5em; +} + +.stat .footer { + padding: 15px 20px 5px 20px; + background: rgba(1, 1, 1, 0.1); +} + +.stat .footer h4 { + font-size: 1.2em; +} + +.box-profile .grid-body { + margin: 0px !important; +} + +.box-profile img { + display: block; + width: 150px; + margin: 10px auto; + border: 10px solid rgba(1, 1, 1, 0.1); +} + +.box-profile h3 { + display: block; + text-align: center; + font-weight: 400; + color: #ffffff !important; +} + +.box-profile span { + display: block; + text-align: center; + line-height: 1.5em; + margin-bottom: 12px; +} + +.box-profile .footer { + cursor: pointer; +} + +.box-profile .footer .col-xs-4 { + background-color: rgba(1, 1, 1, 0.1); +} + +.box-profile .footer .col-xs-4:hover { + background-color: rgba(1, 1, 1, 0.15); +} + +.box-profile .footer h3 { + padding: 15px 0px 10px 0px; + margin: 0px; + font-weight: 300; +} + +.box-profile .footer h3 .fa { + font-size: 1em; + display: block; + margin-bottom: 2px; +} + +.work-progress span.title, +.work-progress span.sub-title { + display: block; + width: 100%; +} + +.work-progress .title .pull-right { + font-size: 1em; +} + +.work-progress span.sub-title { + font-size: 1.2em !important; +} + +.work-progress table td { + padding: 15px 10px !important; + border: none !important; +} + +.box-calendar .date { + display: block; + text-align: center; + font-size: 20em; + font-weight: 300; + line-height: 1em; +} + +.box-calendar hr { + border-color: #cccccc; +} + +.box-calendar .notification { + font-size: 2em; + font-weight: 300; + text-align: center; + display: block; + margin: 10px 0; +} + +.box-calendar .notification .fa { + padding-right: 10px; +} + +.box-calendar .datetimepicker { + font-size: 1em; + display: block; + width: 100%; + padding: 20px; +} + +.box-calendar .datetimepicker table { + margin: 15px auto; +} + +.box-calendar .datetimepicker table thead tr:last-child th { + padding-top: 20px; +} + +.box-calendar .datetimepicker table thead th.switch { + font-size: 2em; + font-weight: 400; +} + +.box-calendar .datetimepicker table thead th.dow { + font-weight: 600; +} + +.box-calendar .datetimepicker td { + padding: 5px 15px; +} + +.box-calendar .datetimepicker td.day:hover { + border-radius: 0px; +} + +.box-calendar .datetimepicker span.year.active, +.box-calendar .datetimepicker span.month.active, +.box-calendar .datetimepicker td.day.active { + background: #932ab6; + border-radius: 0px; +} + +.box-calendar .datetimepicker span.year.active:hover, +.box-calendar .datetimepicker span.month.active:hover, +.box-calendar .datetimepicker td.day.active:hover { + background: #932af6; + border-radius: 0px; +} + +.weather h3.title { + margin: 0px; + color: #ffffff !important; + padding: 20px; + font-weight: 300; +} + +.weather h3.title .pull-right { + font-size: 1.5em; + font-weight: 600; +} + +.weather h3.title .fa { + padding-right: 10px; +} + +.weather .weather-icon { + display: block; + margin: 15px auto; +} + +.weather .footer { + text-align: center; + font-weight: 600; + background: rgba(1, 1, 1, 0.1); +} + +.weather .footer .row { + margin: 0px; + padding: 5px 0; + cursor: pointer; +} + +.weather .footer .weather-icon { + margin: 5px auto; +} + +.visitor h3 { + margin: 0px; + padding: 20px; +} + +.visitor .chart { + margin: 24px auto; +} + +.visitor .footer { + text-align: center; + font-weight: 600; +} + +.visitor .footer .row { + margin: 0px; + padding: 5px 0; + cursor: pointer; +} + +.visitor .footer span.os { + margin-top: 10px; + display: block; +} + +.visitor .footer span.percent { + display: block; + font-size: 2em; + font-weight: 300; +} + +.visitor .footer .blue { + border-top: 5px solid rgba(52, 152, 219, 1); +} + +.visitor .footer .green { + border-top: 5px solid rgba(46, 204, 113, 1); +} + +.visitor .footer .red { + border-top: 5px solid rgba(231, 76, 60, 1); +} + +.visitor .footer .yellow { + border-top: 5px solid rgba(241, 196, 15, 1); +} + +.jqstooltip { + box-sizing: content-box; +} + +/* UI GENERAL */ +.label { + font-weight: 400; +} + +.badge { + font-size: 0.9em; + font-weight: 400; + padding: 4px 10px; +} + +.popover-content { + font-size: 0.9em; +} +.popover__wrapper { + position: relative; +} + +/* BUTTONS */ +.btn { + /*font-weight: 500;*/ + /*font-size: 1em;*/ + /*border-radius: 0;*/ + /*margin-bottom: 5px;*/ +} + +.input-group-btn { + /*font-size: 1.1em;*/ +} + +.input-group .dropdown-menu, +.btn-group .dropdown-menu { + margin-top: -5px; +} + +.input-group-btn:first-child>.btn, +.input-group-btn:first-child>.btn-group { + margin-right: 0px; +} + +.input-group-btn>.btn+.btn { + margin-left: -4px; +} + +.btn-radius { + border-radius: 3px !important; +} + +.btn-group-vertical .btn { + border-radius: 0px !important; + margin-bottom: 0px; +} + +.dropdown-menu li a { + font-size: 0.9em; +} + +/* SOCIAL BUTTON */ +.btn-facebook .fa, +.btn-twitter .fa, +.btn-google-plus .fa, +.btn-youtube .fa, +.btn-linkedin .fa, +.btn-pinterest .fa, +.btn-flickr .fa, +.btn-tumblr .fa, +.btn-vk .fa, +.btn-vimeo-square .fa { + width: 1em; + height: 1em; + text-align: center; +} + +.btn-facebook.social, +.btn-twitter.social, +.btn-google-plus.social, +.btn-youtube.social, +.btn-linkedin.social, +.btn-pinterest.social, +.btn-flickr.social, +.btn-tumblr.social, +.btn-vk.social, +.btn-vimeo-square.social { + color: #333333 !important; +} + +.btn-facebook.color { + color: #3b5998 !important; +} +.btn-twitter.color { + color: #00aced !important; +} +.btn-google-plus.color { + color: #dd4b39 !important; +} +.btn-youtube.color { + color: #bb0000 !important; +} +.btn-linkedin.color { + color: #007bb6 !important; +} +.btn-pinterest.color { + color: #cb2027 !important; +} +.btn-flickr.color { + color: #ff0084 !important; +} +.btn-tumblr.color { + color: #32506d !important; +} +.btn-vk.color { + color: #45668e !important; +} +.btn-vimeo-square.color { + color: #aad450 !important; +} + +.btn.background { + color: #ffffff; +} +.btn-facebook.background { + background-color: #3b5998 !important; +} +.btn-twitter.background { + background-color: #00aced !important; +} +.btn-google-plus.background { + background-color: #dd4b39 !important; +} +.btn-youtube.background { + background-color: #bb0000 !important; +} +.btn-linkedin.background { + background-color: #007bb6 !important; +} +.btn-pinterest.background { + background-color: #cb2027 !important; +} +.btn-flickr.background { + background-color: #ff0084 !important; +} +.btn-tumblr.background { + background-color: #32506d !important; +} +.btn-vk.background { + background-color: #45668e !important; +} +.btn-vimeo-square.background { + background-color: #aad450 !important; +} + +/* GRID */ +.col { + padding: 10px 20px; + margin-bottom: 10px; + background: #fff; + color: #666666; + text-align: center; + font-weight: 400; + box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.1); +} + +.row h3 { + /*color: #666666;*/ +} + +.row.grid { + margin-left: 0; +} + +.grid { + position: relative; + width: 100%; + background: #fff; + color: #666666; + border-radius: 5px; + margin-bottom: 25px; + /*box-shadow: 0px 1px 4px rgba(0, 0, 0, 1);*/ + border: 1px solid #dddddd; + /*display:table;*/ + +} + +.grid .grid-header { + position: relative; + border-bottom: 1px solid #ddd; + padding: 3px 10px; +} + +.grid .grid-header:before, +.grid .grid-header:after { + display: table; + content: " "; +} + +.grid .grid-header:after { + clear: both; +} + +.grid .grid-footer:before, +.grid .grid-footer:after { + display: table; + content: " "; +} + +.grid .grid-footer:after { + clear: both; +} + +.grid .grid-footer { + position: relative; + border-top: 1px solid #ddd; + padding: 5px 15px; +} + +.grid .grid-header span, +.grid .grid-header > .fa { + display: inline-block; + margin: 0; + font-weight: 400; + font-size: 1.2em; + float: left; +} + +.grid .grid-header span { + padding: 0 5px; +} + +.grid .grid-header > .fa { + padding: 5px 10px 0 0; +} + +.grid .grid-header > .grid-tools { + padding: 4px 10px; +} + +.grid .grid-header > .grid-tools a { + color: #999999; + padding-left: 10px; + cursor: pointer; +} + +.grid .grid-header > .grid-tools a:hover { + color: #666666; +} + +.grid .grid-body { + padding: 15px 20px 15px 20px; + /*padding:10px 0;*/ + /*font-size: 0.9em;*/ + /*line-height: 1.9em;*/ + /*padding:5px;*/ +} + +.grid .full { + padding: 0 !important; +} + +.grid .transparent { + box-shadow: none !important; + margin: 0px !important; + border-radius: 0px !important; +} + +.grid.top.black > .grid-header { + border-top-color: #000000 !important; +} + +.grid.bottom.black > .grid-body { + border-bottom-color: #000000 !important; +} + +.grid.top.blue > .grid-header { + border-top-color: #007be9 !important; +} + +.grid.bottom.blue > .grid-body { + border-bottom-color: #007be9 !important; +} + +.grid.top.green > .grid-header { + border-top-color: #00c273 !important; +} + +.grid.bottom.green > .grid-body { + border-bottom-color: #00c273 !important; +} + +.grid.top.purple > .grid-header { + border-top-color: #a700d3 !important; +} + +.grid.bottom.purple > .grid-body { + border-bottom-color: #a700d3 !important; +} + +.grid.top.red > .grid-header { + border-top-color: #dc1200 !important; +} + +.grid.bottom.red > .grid-body { + border-bottom-color: #dc1200 !important; +} + +.grid.top.orange > .grid-header { + border-top-color: #f46100 !important; +} + +.grid.bottom.orange > .grid-body { + border-bottom-color: #f46100 !important; +} + +.grid.no-border > .grid-header { + border-bottom: 0px !important; +} + +.grid.top > .grid-header { + border-top-width: 4px !important; + border-top-style: solid !important; +} + +.grid.bottom > .grid-body { + border-bottom-width: 4px !important; + border-bottom-style: solid !important; +} + +/* GROUP LIST */ +.dd { + position: relative; + display: block; + margin: 0; + padding: 0; + max-width: 600px; + list-style: none; + line-height: 20px; +} + +.dd-list { + display: block; + position: relative; + margin: 0; + padding: 0; + list-style: none; +} + +.dd-list .dd-list { + padding-left: + 30px; +} +. +dd-collapsed .dd-list { + display: none; +} + +.dd-item, +.dd-empty, +.dd-placeholder { + display: block; + position: relative; + margin: 0; + padding: 0; + min-height: 20px; + line-height: 20px; +} + +.dd-handle { + display: block; + height: 30px; + margin: 5px 0; + padding: 5px 10px; + color: #333333; + text-decoration: none; + font-weight: 600; + border: 1px solid #ccc; + background: #fafafa; + background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%); + background: -moz-linear-gradient(top, #fafafa 0%, #eee 100%); + background: linear-gradient(top, #fafafa 0%, #eee 100%); + -webkit-border-radius: 3px; + border-radius: 3px; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +.dd-handle:hover { + color: #666666; + background: #f4f4f4; +} + +.dd-item > button { + display: block; + position: relative; + cursor: pointer; + float: left; + width: 25px; + height: 20px; + margin: 5px 0; + padding: 0; + text-indent: 100%; + white-space: nowrap; + overflow: hidden; + border: 0; + background: transparent; + font-size: 12px; + line-height: 1; + text-align: center; + font-weight: bold; +} + +.dd-item > button:before { + content: '+'; + display: block; + position: absolute; + width: 100%; + text-align: center; + text-indent: 0; +} + +.dd-item > button[data-action="collapse"]:before { + content: '-'; +} + +.dd-placeholder, +.dd-empty { + margin: 5px 0; + padding: 0; + min-height: 30px; + background: #f2fbff; + border: 1px dashed #b6bcbf; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +.dd-empty { + border: 1px dashed #bbb; + min-height: 100px; + background-color: #e5e5e5; + background-image: -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), + -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff); + background-image: -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), + -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff); + background-image: linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), + linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff); + background-size: 60px 60px; + background-position: 0 0, 30px 30px; +} + +.dd-dragel { + position: absolute; + pointer-events: none; + z-index: 9999; +} + +.dd-dragel > .dd-item .dd-handle { + margin-top: 0; +} + +.dd-dragel .dd-handle { + -webkit-box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1); + box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1); +} + +.nestable-lists { + display: block; + clear: both; + padding: 30px 0; + width: 100%; + border: 0; + border-top: 2px solid #ddd; + border-bottom: 2px solid #ddd; +} + +#nestable-menu { + padding: 0; + margin: 20px 0; } + +#nestable-output, +#nestable2-output { + width: 100%; + height: 7em; + font-size: 0.75em; + line-height: 1.333333em; + font-family: Consolas, monospace; + padding: 5px; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +#nestable2 .dd-handle { + color: #fff; + border: 1px solid #999; + background: #bbb; + background: -webkit-linear-gradient(top, #bbb 0%, #999 100%); + background: -moz-linear-gradient(top, #bbb 0%, #999 100%); + background: linear-gradient(top, #bbb 0%, #999 100%); +} + +#nestable2 .dd-handle:hover { + background: #bbb; +} + +#nestable2 .dd-item > button:before { + color: #fff; +} + +.dd-hover > .dd-handle { + background: #2ea8e5 !important; +} + +.dd3-content { + display: block; + height: 30px; + margin: 5px 0; + padding: 5px 10px 5px 40px; + color: #333; + text-decoration:none; + font-weight: 600; + border: 1px solid #ccc; + background: #fafafa; + background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%); + background: -moz-linear-gradient(top, #fafafa 0%, #eee 100%); + background: linear-gradient(top, #fafafa 0%, #eee 100%); + -webkit-border-radius: 3px; + border-radius: 3px; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +.dd3-content:hover { + color: #666666; + background: #f4f4f4; +} + +.dd-dragel > .dd3-item > .dd3-content { + margin: 0; +} + +.dd3-item > button { + margin-left: 30px; +} + +.dd3-handle { + position: absolute; + margin: 0; + left: 0; + top: 0; + cursor: pointer; + width: 30px; + text-indent: 100%; + white-space: nowrap; + overflow: hidden; + border: 1px solid #aaa; + background: #ddd; + background: -webkit-linear-gradient(top, #ddd 0%, #bbb 100%); + background: -moz-linear-gradient(top, #ddd 0%, #bbb 100%); + background: linear-gradient(top, #ddd 0%, #bbb 100%); + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.dd3-handle:before { + content: '≡'; + display: block; + position: absolute; + left: 0; + top: 3px; + width: 100%; + text-align: center; + text-indent: 0; + color: #fff; + font-size: 20px; + font-weight: normal; +} + +.dd3-handle:hover { + background: #ccc; +} + +/* ICONS */ +.row.icons .fa { + width: 2em; + margin-bottom: 15px; +} + +/* GRITTER NOTIFICATION */ +#gritter-notice-wrapper { + width: 320px; + top: 60px; +} + +/*.gritter-item-wrapper { + background: url(../plugins/jquery-gritter/images/gritter-bg.png); + box-shadow: 0 0px 5px rgba(0, 0, 0, 0.32); +}*/ + +.gritter-top { + background: transparent; +} + +.gritter-item { + font-family: 'Open Sans', sans-serif; + background: transparent; + color: #fff; + padding: 4px 20px 5px 0px; + padding-right: 35px; + padding-left: 10px; +} + +.gritter-bottom { + background: transparent; +} + +.gritter-title { + text-shadow: none; + font-weight: 300; + font-size: 1.6em; + line-height: 1em; +} + +.gritter-item p { + font-size: 1.1em; + line-height: 1.5em; +} + +.gritter-close { + display: block !important; + top: 0; + right: 0; + left: auto; + height: 30px; + width: 35px; + background: transparent; + text-indent: inherit; +} + +.gritter-close:after { + content: '×'; + position: absolute; + color: #fff; + left: 10px; + font-size: 24px; + font-weight: 400; + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.12); +} + +.gritter-without-image, +.gritter-with-image { + padding-left: 10px; +} + +.gritter-image { + margin-top: 2px; +} + +.gritter-item-wrapper.default .gritter-item, +.gritter-item-wrapper.default .gritter-close:after { + color: #666666; +} + +.gritter-item-wrapper.default { + background: rgba(250, 250, 250, 1); +} + +.gritter-item-wrapper.primary { + background: rgba(60, 141, 188, 1); +} + +.gritter-item-wrapper.success { + background: rgba(0, 166, 90, 1); +} + +.gritter-item-wrapper.info { + background: rgba(0, 192, 239, 1); +} + +.gritter-item-wrapper.warning { + background: rgba(243, 156, 18, 1); +} + +.gritter-item-wrapper.danger { + background: rgba(245, 105, 84, 1); +} + +/* MODAL */ + .modal { + width: 100%; + position: fixed; + text-align: left; + margin: 0px auto; + top: 0px; + left: 0px; + bottom: 0px; + right: 0px; + z-index: 1050; + } + +.modal-wrapper { + display: table; + overflow: auto; + overflow-y: scroll; + height: 100%; + -webkit-overflow-scrolling: touch; + outline: 0; + text-align: left; + margin: 0px auto; +} + +.modal-dialog { + margin-top: 30px; + /*display: table-cell;*/ + vertical-align: middle; + /*margin: 0px 20px;*/ +} +.modal-content +{ + border-radius:0px!important; +} +.modal-header { + padding: 10px; +} +.bg-red button.close, .bg-yellow button.close, .bg-aqua button.close, .bg-blue button.close, .bg-light-blue button.close, .bg-green button.close, .bg-navy button.close, .bg-teal button.close, .bg-olive button.close, .bg-lime button.close, .bg-orange button.close, .bg-fuchsia button.close, .bg-purple button.close, .bg-maroon button.close, .bg-gray button.close, .bg-black button.close, .bg-white button.close { + color: #f9f9f9 !important; + opacity: 0.8; +} + +.bg-red .modal-header, .bg-yellow .modal-header, .bg-aqua .modal-header, .bg-blue .modal-header, .bg-light-blue .modal-header, .bg-green .modal-header, .bg-navy .modal-header, .bg-teal .modal-header, .bg-olive .modal-header, .bg-lime .modal-header, .bg-orange .modal-header, .bg-fuchsia .modal-header, .bg-purple .modal-header, .bg-maroon .modal-header, .bg-gray .modal-header, .bg-black .modal-header, .bg-white .modal-header { + border-bottom: 0px !important; +} + +.bg-red .modal-footer, .bg-yellow .modal-footer, .bg-aqua .modal-footer, .bg-blue .modal-footer, .bg-light-blue .modal-footer, .bg-green .modal-footer, .bg-navy .modal-footer, .bg-teal .modal-footer, .bg-olive .modal-footer, .bg-lime .modal-footer, .bg-orange .modal-footer, .bg-fuchsia .modal-footer, .bg-purple .modal-footer, .bg-maroon .modal-footer, .bg-gray .modal-footer, .bg-black .modal-footer, .bg-white .modal-footer { + border-top: 0px !important; +} + +/* TABS */ +.nav-tabs, +.tab-content { + font-size: 0.9em; + color: #666666; +} + +.nav-tabs { + background: transparent; +} + +.nav-tabs > li { + border-top: 2px solid transparent; +} + +.nav-tabs > li.active, +.tabs-bottom .nav-tabs > li.active, +.tabs-right .nav-tabs > li.active, +.tabs-left .nav-tabs > li.active { + border-color: #3c8dbc; +} + +.nav-tabs > li a { + border-radius: 0px; + margin: 0; + color: #888888; +} + +.nav-tabs > li a .fa { + width: 1em; + text-align: center; +} + +.nav-tabs > li a:hover { + color: #111111; + background: transparent; +} + +.tab-content { + padding: 5px 15px 5px 15px; + margin-bottom: 25px; + line-height: 1.9em; + color: #666666 !important; + background: #ffffff; + border-bottom: 1px solid #dddddd; + border-left: 1px solid #dddddd; + border-right: 1px solid #dddddd; +} + +.tabs-bottom .nav-tabs { + border-top: 1px solid #dddddd; + border-bottom: 0px; + margin-bottom: 25px; +} + +.tabs-bottom .nav-tabs > li { + border-top: 0px; + border-bottom: 2px solid transparent; + margin-top: -1px; +} + +.tabs-bottom .nav-tabs > li.active a { + border-top: 0px; +} + +.tabs-bottom .nav-tabs > li a:hover { + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; +} + +.tabs-bottom .nav-tabs > li.active a:hover { + border-top: 0px; +} + +.tabs-bottom .tab-content { + border-top: 1px solid #dddddd; + border-bottom: 0px; + margin-bottom: 0px; +} + +.tabs-left .nav-tabs > li, +.tabs-right .nav-tabs > li { + float: none; +} + +.tabs-left .nav-tabs > li { + border-top: 0px; + border-left: 2px solid transparent; +} + +.tabs-left .nav-tabs { + float: left; + border-bottom: 0px; +} + +.tabs-left .nav-tabs > li.active a { + border-right: 0px; + border-bottom: 1px solid #dddddd; +} + +.tabs-left .nav-tabs > li.active a:hover { + border-top: 1px solid #dddddd; + border-bottom: 1px solid #dddddd; + border-right: 1px solid transparent; +} + +.tabs-left .nav-tabs > li a:hover { + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + border-right: 1px solid #dddddd; +} + +.tabs-left .tab-content { + border-top: 1px solid #dddddd; + margin-left: 46px; +} + +.tabs-right .nav-tabs > li { + border-top: 0px; + border-right: 2px solid transparent; +} + +.tabs-right .nav-tabs { + float: right; + border-bottom: 0px; +} + +.tabs-right .nav-tabs > li.active a { + border-left: 1px solid transparent; + border-bottom: 1px solid #dddddd; +} + +.tabs-right .nav-tabs > li.active a:hover { + border-top: 1px solid #dddddd; + border-bottom: 1px solid #dddddd; + border-left: 1px solid transparent; +} + +.tabs-right .nav-tabs > li a:hover { + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + border-left: 1px solid #dddddd; +} + +.tabs-right .tab-content { + border-top: 1px solid #dddddd; + margin-right: 46px; +} + +/* ACCORDIONS */ +.panel-group { + font-size: 0.9em; + line-height: 1.9em; + color: #666666; +} + +.panel-group .panel { + border-radius: 0px; +} + +.panel-group .panel+.panel { + margin-top: 0px; +} + +.panel-heading { + border-radius: 0px; +} + +.panel-title { + font-weight: 300; + padding: 5px 0px; +} + +.panel-default .panel-title a:hover { + color: #999999; +} + +.panel-primary .panel-title a:hover, +.panel-success .panel-title a:hover, +.panel-warning .panel-title a:hover, +.panel-danger .panel-title a:hover { + color: #f0f0f0; +} + +.panel-default { + border-color: #dddddd; +} + +.panel-default > .panel-heading { + color: #333; + background-color: #fafafa; + border-color: #dddddd; + font-size:10px!important; +} + +.panel-default > .panel-heading+.panel-collapse > .panel-body { + border-top-color: #dddddd; +} + +.panel-default > .panel-footer+.panel-collapse > .panel-body { + border-bottom-color: #dddddd; +} + +.panel-primary { + border-color: #428bca; +} + +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.panel-primary > .panel-heading+.panel-collapse > .panel-body { + border-top-color: #428bca; +} + +.panel-primary > .panel-footer+.panel-collapse > .panel-body { + border-bottom-color: #428bca; +} + +.panel-success { + border-color: #2ecc71; +} + +.panel-success > .panel-heading { + color: #ffffff; + background-color: #2ecc71; + border-color: #2ecc71; +} + +.panel-success > .panel-heading+.panel-collapse > .panel-body { + border-top-color: #2ecc71; +} + +.panel-success > .panel-footer+.panel-collapse > .panel-body { + border-bottom-color: #2ecc71; +} + +.panel-info { + border-color: #00bfef; +} + +.panel-info > .panel-heading { + color: #ffffff; + background-color: #00bfef; + border-color: #00bfef; +} + +.panel-info > .panel-heading+.panel-collapse > .panel-body { + border-top-color: #00bfef; +} + +.panel-info > .panel-footer+.panel-collapse > .panel-body { + border-bottom-color: #00bfef; +} + +.panel-warning { + border-color: #f39d12; +} + +.panel-warning > .panel-heading { + color: #ffffff; + background-color: #f39d12; + border-color: #f39d12; +} + +.panel-warning > .panel-heading+.panel-collapse > .panel-body { + border-top-color: #f39d12; +} + +.panel-warning > .panel-footer+.panel-collapse > .panel-body { + border-bottom-color: #f39d12; +} + +.panel-danger { + border-color: #f56954; +} + +.panel-danger > .panel-heading { + color: #ffffff; + background-color: #f56954; + border-color: #f56954; +} + +.panel-danger > .panel-heading+.panel-collapse > .panel-body { + border-top-color: #f56954; +} + +.panel-danger > .panel-footer+.panel-collapse > .panel-body { + border-bottom-color: #f56954; +} + +/* TYPOGRAPHY */ +.lead { + font-size: 1.6em; + font-weight: 300; + margin-top: 5px; + margin-bottom: 5px; +} + +blockquote { + font-size: 1.2em; +} + +/* FORM */ +.form-group label { + font-weight: 400; +} + +.form-control { + /*-webkit-border-radius: 0px !important; + -moz-border-radius: 0px !important; + border-radius: 0px !important;*/ + box-shadow: none; + font-size: 1em; + height:30px; + padding: 1px 0 1px 12px; +} + +.form-control:focus { + box-shadow: none; +} + +/* INPUT GROUP */ +.input-group .input-group-addon { + border-radius: 0; + background-color: #f4f4f4; +} + +/* CHECKBOX & RADIO */ +.checkbox, +.radio { + padding-left: 0; +} + +.radio label, .checkbox label, +.radio-inline, .checkbox-inline { + /*padding-left: 0;*/ +} + +/* DATETIME PICKER */ +.datetimepicker { + font-size: 0.9em; +} + +/* SELECT2 */ +.select2-container .select2-choice > .select2-chosen { + margin-left: 6px; +} + +.select2-container .select2-choice, +.select2-container .select2-choice .select2-arrow { + border-radius: 0px; + height: 2.8em; + line-height: 2.8em; +} + +.select2-container .select2-choice .select2-arrow b { + margin-top: 4px; +} + +.select2-drop { + font-size: 0.9em; +} + +.select2-container-multi .select2-choices .select2-search-choice { + border-radius: 0px; +} + +/* SLIDER */ +.slider-handle { + opacity: 1; + background-color: #ffffff; + background-image: linear-gradient(to bottom, #ffffff, #f9f9f9); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #ffffff, #f9f9f9); + background-image: -moz-linear-gradient(top, #ffffff, #f9f9f9); + background-image: -o-linear-gradient(top, #ffffff, #f9f9f9); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.39); + height: 23px; + width: 23px; + transition: box-shadow 200ms ease-in-out; +} + +.slider-handle:hover { + box-shadow: 0 1px 5px rgba(0, 0, 0, 0.45); +} + +.slider.slider-horizontal { + margin-top: 10px; +} + +.slider.slider-horizontal .slider-handle { + margin-top: -7px; +} + +.slider.slider-vertical { + margin-right: 13px; + float: left; +} + +.slider.slider-vertical .slider-handle { + margin-left: -6px; +} + +.slider-default .slider-selection{ + background: #f1f1f1; + background-image:none; +} + +.slider-primary .slider-selection{ + background: #428bca; + background-image:none; +} + +.slider-success .slider-selection{ + background: #5cb85c; + background-image:none; +} + +.slider-info .slider-selection{ + background-color: #5bc0de; + background-image:none; +} + +.slider-warning .slider-selection{ + background: #f0ad4e; + background-image:none; +} + +.slider-danger .slider-selection{ + background: #d9534f; + background-image:none; +} + +/* FORM VALIDATION */ +input.error, +input.error:focus { + border: 1px solid #d9534f; +} + +.error { + color: #d9534f; +} + +/* FORM WIZARD */ +#rootwizard .navbar { + position: relative; + border: 0px; + margin-top: 35px; +} + +#rootwizard .navbar ul { + width: 100%; + display: table; + list-style: none; +} + +#rootwizard .navbar li { + text-align: center; + display: table-cell; + float: none; + width: 25%; +} + +@media screen and (max-width: 560px) { + #rootwizard .navbar { + margin-top: 0px; + } + #rootwizard .navbar li { + display: block; + float: none; + width: 100%; + margin-top: 20px; + text-align: left; + } +} + +#rootwizard .navbar li a { + background-color: #eee; + color: #ccc; + border-radius: 50px; + display: inline; + padding: 5px 11px; + font-size: 1.2em; + font-weight: 400; + margin-right: 10px; +} + +#rootwizard .navbar li.active a { + background-color: #428bca; + color: #fff; + padding: 8px 14px; +} + +#rootwizard .navbar li span { + color: #ccc; +} + +#rootwizard .navbar li.active span { + color: #666; +} + +#rootwizard .progress { + width: 95%; + margin: 0 auto; +} + +#rootwizard .tab-content { + border: 0px; + margin: 20px 20px 0px 20px; + padding-left: 0px; + font-size: 1em; +} + +#rootwizard .tab-content .finish { + text-align: center; +} + +#rootwizard .tab-content .finish h1 { + font-weight: 300; + margin-bottom: 30px; +} + +#rootwizard .pager { + font-size: 1em; + padding: 0 20px; +} + +#rootwizard .pager li a { + border-radius: 0px; + background-color: #428bca; + color: #fff; +} + +#rootwizard .pager li.disabled a { + background-color: #eee; + color: #ccc; +} + +/* TABLE */ +.table .fa { + width: 1.5em; + text-align: center; +} + +.table .fa.action { + padding: 5px 0; + width: 2.5em; +} + +.table .label { + border-radius: 2px; + margin-left: 5px; + font-size: 1em; + font-weight: 400; + padding: 2px 6px; +} + +.table .progress { + margin-bottom: 0 !important; + height: 14px; +} +.progress-bar +{ + line-height:13px; +} + +/* DATATABLES */ +.detail-row { + margin: 2px 0px; +} + +.detail-row th, +.detail-row td { + padding: 4px 10px; +} + +.table .fa.link, +.table .fa.link { + cursor: pointer; +} + +/* MAPS */ +.jvectormap-zoomin, +.jvectormap-zoomout { + left: auto !important; + padding: 5px 8px !important; + width: auto !important; + height: auto !important; + background: #007be9 !important; +} + +.jvectormap-zoomin:hover, +.jvectormap-zoomout:hover { + background: #006cce !important; +} + +.jvectormap-zoomin { + right: 33px !important; + border-top-right-radius: 0px !important; + border-bottom-right-radius: 0px !important; +} + +.jvectormap-zoomout { + top: 10px !important; + right: 10px !important; + border-top-left-radius: 0px !important; + border-bottom-left-radius: 0px !important; +} + +/* CHART */ +div.knob-box { + margin: 0 auto; + width: 200px; +} + +/* ERROR PAGE */ +/*.error .outer { + display: table; + position: absolute; + width: 100%; + height: 100%; + background: url('../img/background/05.jpg') no-repeat center center; + background-size: cover; +}*/ + +.error .middle { + display: table-cell; + vertical-align: middle; +} + +.error .inner { + margin-left: auto; + margin-right: auto; + width: 300px; +} + +.error .circle { + height: 300px; + background-color: #fff; + border-radius: 50%; + -webkit-animation: scale 0.5s; + -moz-animation: scale 0.5s; + -o-animation: scale 0.5s; + -ms-animation: scale 0.5s; + animation: scale 0.5s; +} + +@-webkit-keyframes scale { + from { -webkit-transform: scale(0.5, 0.5) } + to { -webkit-transform: scale(1, 1) } +} + +@-moz-keyframes scale { + from { -moz-transform: scale(0.5, 0.5) } + to { -moz-transform: scale(1, 1) } +} + +@-o-keyframes scale { + from { -o-transform: scale(0.5, 0.5) } + to { -o-transform: scale(1, 1) } +} + +@-ms-keyframes scale { + from { -ms-transform: scale(0.5, 0.5) } + to { -ms-transform: scale(1, 1) } +} + +@keyframes scale { + from { transform: scale(0.5, 0.5) } + to { transform: scale(1, 1) } +} + +.error .circle i { + float: right; + font-size: 5em; + margin-top: -0.7em; + margin-right: -0.5em; + text-align: center; + line-height: 1em; + width: 1.6em; + height: 1.6em; + color: #ccc; + padding: 20px; + background-color: #fff; + border-radius: 50%; + box-shadow: 0px 0px 0px 15px #e0d8d6; + -webkit-animation: pace-spinner 0.4s; + -moz-animation: pace-spinner 0.4s; + -ms-animation: pace-spinner 0.4s; + -o-animation: pace-spinner 0.4s; + animation: pace-spinner 0.4s; + -webkit-animation-delay: 0.2s; + -moz-animation-delay: 0.2s; + -ms-animation-delay: 0.2s; + -o-animation-delay: 0.2s; + animation-delay: 0.2s; +} + +.error .circle span { + font-size: 10em; + text-align: center; + line-height: 1.2em; + font-weight: 700; + display: block; + color: #ccc; +} + +.error .status { + margin-top: 20px; + margin-bottom: 5px; + font-size: 1.5em; + font-weight: 400; + color: #666; + text-align: center; + display: block; +} + +.error .detail { + margin-bottom: 10px; + font-size: 1em; + font-weight: 400; + line-height: 1.4em; + color: #666; + text-align: center; + display: block; +} + +/* BLANK PAGE */ +h3.blank { + padding: 40px; + color: #aaaaaa; + text-align: center; + font-weight: 300; +} + +/* CALENDAR */ +#external-events { + padding: 0; +} + +.external-event { + margin: 2px 0; + padding: 5px 10px; + background: #3498db; + color: #fff; + font-size: 1em; + cursor: pointer; +} + +#external-events p { + margin: 1em 0; + font-size: 1em; + color: #666; +} + +#external-events p input { + margin: 0; + vertical-align: middle; +} + +#external-events label { + font-weight: 400; +} + +#calendar { + width: 100%; +} + +.fc-header-title h2 { + margin: -8px 0 25px 0; +} + +.fc-button { + padding: 8px; + display: inline !important; + border: 1px solid rgba(0, 0, 0, 0.1); +} + +.fc-button .fc-icon { + line-height: 0.8em; +} + +.fc-state-default.fc-corner-left { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.fc-state-default.fc-corner-right { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.fc-state-default { + background-image: none; + box-shadow: none; + text-shadow: none; + color: #666; +} + +.fc-state-active, +.fc-state-hover, +.fc-state-active .fc-button-inner, +.fc-state-hover .fc-button-inner, +.fc-button-today .fc-button-inner { + background: #3498db; + color: #fff; + box-shadow: none; + text-shadow: none; +} + +.fc-event { + background: #3498db !important; + color: #fff !important; + border-color: #3498db; +} + +/* CODE EDITOR */ +.code a .fa { + color: #666; + cursor: pointer; +} + +.code .dropdown-menu { + border-radius: 0px; +} + +.code .dropdown-menu a .fa { + width: 1.5em; + +} + +.code .code-menu { + padding-left: 0px; +} + +.code .code-menu li { + padding: 2px 5px; + list-style: none; +} + +.code .code-menu li .fa { + width: 1.5em; + padding-right: 10px; + color: #999; +} + +.code .code-menu li .fa:hover { + color: #444; +} + +.code .code-menu li a { + color: #999; +} + +.code .code-menu li a:hover { + color: #444; +} + +.code .code-menu li.active { + background-color: #eee; +} + +.code .code-menu li.active a { + color: #444; +} + +.code .code-menu .panel-collapse{ + padding-left: 20px; +} + +.CodeMirror { + height: 100%; +} + +/* GALLERY */ +.popup-gallery a img { + margin: 2px 0; +} + +.popup-gallery a img:hover { + opacity: 0.6; + filter: alpha(opacity=60); /* For IE8 and earlier */ +} + +/* Invoice */ +.invoice { + padding: 30px; +} + +.invoice h2 { + margin-top: 0px; + line-height: 0.8em; +} + +.invoice .small { + font-weight: 300; +} + +.invoice hr { + margin-top: 10px; + border-color: #ddd; +} + +.invoice .table tr.line { + border-bottom: 1px solid #ccc; +} + +.invoice .table td { + border: none; +} + +.invoice .identity { + margin-top: 10px; + font-size: 1.1em; + font-weight: 300; +} + +.invoice .identity strong { + font-weight: 600; +} + +/* LOGIN, LOCKSCREEN, & REGISTER */ +.login .outer { + display: table; + position: absolute; + width: 100%; + height: 100%; + background: url('../images/07.jpg') no-repeat center center; /*//background image*/ + background-size: cover; +} + +.login .middle { + display: table-cell; + vertical-align: middle; +} + +.login .inner { + margin-left: auto; + margin-right: auto; + width: 400px; +} + +.login .account-wall { + margin-top: 20px; + padding: 40px 0px 20px 0px; + background-color: #f7f7f7; + -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); +} + +.login .form-login { + max-width: 330px; + padding: 15px; + margin: 0 auto; +} + +.login .form-login .form-control { + position: relative; + font-size: 16px; + height: auto; + padding: 10px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.login .form-login .form-control:focus { + z-index: 2; +} + +.login .form-login .form-control.small { + width: 50%; + float: left; +} + +.login .form-login input[type="text"], +.login .form-login input[type="password"] { + margin-bottom: -1px; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.login .form-login button { + margin-top: 10px; +} + +.login .form-login .form-login-heading, .form-login .checkbox { + margin-bottom: 10px; + margin-left: 20px; +} + +.login .form-login .checkbox { + font-weight: 300; +} + +.login .login-title { + color: #555; + font-size: 1.4em; + font-weight: 300; + display: block; +} + +.login img { + width: 300px; + display: block; + margin: 0 auto; + margin-bottom: 15px; +} + +.login .profile-img { + width: 96px; + height: 96px; + margin: 0 auto 10px; + display: block; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; +} + +.login .need-help { + margin-top: 10px; +} + +.login .new-account { + display: block; + margin: 15px 0 15px 0; +} + +.login .profile-name { + font-size: 1.2em; + font-weight: 600; + text-align: center; + margin: 20px 0 0; + height: 1em; +} + +.login .profile-email { + display: block; + padding: 2px 8px; + color: #404040; + line-height: 2; + font-size: 1em; + text-align: center; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* SEARCH RESULT */ +.search table tr:hover { + cursor: pointer; +} + +.search table tr td.image { + width: 50px; +} + +.search table tr td img { + width: 50px; + height: 50px; +} + +.search table tr td.rate { + color: #f39c12; + line-height: 50px; +} + +.search table tr td.price { + font-size: 1.5em; + line-height: 50px; +} + +.search #price1, +.search #price2 { + display: inline; + font-weight: 600; +} + +/* SUPPORT TICKET */ +.support ul { + list-style: none; + padding: 0px; +} + +.support ul li { + padding: 8px 10px; +} + +.support ul li a { + color: #999; + display: block; +} + +.support ul li a:hover { + color: #666; +} + +.support ul li.active { + background: #0073b7; +} + +.support ul li.active a { + color: #fff; +} + +.support ul.support-label li { + padding: 2px 0px; +} + +.support h2, +.support-content h2 { + margin-top: 5px; +} + +.support-content .list-group li { + padding: 15px 20px 12px 20px; + cursor: pointer; +} + +.support-content .list-group li:hover { + background: #eee; +} + +.support-content .fa-padding .fa { + padding-top: 5px; + width: 1.5em; +} + +.support-content .info { + color: #777; + margin: 0px; +} + +.support-content a { + color: #111; +} + +.support-content .info a:hover { + text-decoration: underline; +} + +.support-content .info .fa { + width: 1.5em; + text-align: center; +} + +.support-content .number { + color: #777; +} + +.support-content img { + margin: 0 auto; + display: block; +} + +.support-content .modal-body { + padding-bottom: 0px; +} + +.support-content-comment { + padding: 10px 10px 10px 30px; + background: #eee; + border-top: 1px solid #ccc; +} + +/* IMAGE */ +img { + vertical-align: middle; +} + +.img-responsive { + display: block; + height: auto; + max-width: 100%; +} + +.img-rounded { + border-radius: 3px; +} + +.img-thumbnail { + background-color: #fff; + border: 1px solid #ededf0; + border-radius: 3px; + display: inline-block; + height: auto; + line-height: 1.428571429; + max-width: 100%; + padding: 2px; + webkit-transition: all .2s ease-in-out; + moz-transition: all .2s ease-in-out; + o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} + +.img-circle { + border-radius: 50%; +} + +/* TIMELINE */ +.timeline-centered { + position: relative; + margin-bottom: 30px; +} + +.timeline-centered:before, .timeline-centered:after, +.timeline-centered .timeline-entry:before, .timeline-centered .timeline-entry:after, +.timeline-centered .timeline-entry .timeline-entry-inner:before, .timeline-centered .timeline-entry .timeline-entry-inner:after { + content: " "; + display: table; +} + +.timeline-centered:after, +.timeline-centered .timeline-entry:after, +.timeline-centered .timeline-entry .timeline-entry-inner:after { + clear: both; +} + +.timeline-centered:before { + content: ''; + position: absolute; + display: block; + width: 4px; + background: #fff; + left: 50%; + top: 20px; + bottom: 20px; + margin-left: -4px; +} + +.timeline-centered .timeline-entry { + position: relative; + width: 50%; + float: right; + margin-bottom: 70px; + clear: both; +} + +.timeline-centered .timeline-entry.begin { + margin-bottom: 0; +} + +.timeline-centered .timeline-entry.left-aligned { + float: left; +} + +.timeline-centered .timeline-entry.left-aligned .timeline-entry-inner { + margin-left: 0; + margin-right: -18px; +} + +.timeline-centered .timeline-entry.left-aligned .timeline-entry-inner .timeline-time { + left: auto; + right: -100px; + text-align: left; +} + +.timeline-centered .timeline-entry.left-aligned .timeline-entry-inner .timeline-icon { + float: right; +} + +.timeline-centered .timeline-entry.left-aligned .timeline-entry-inner .timeline-label { + margin-left: 0; + margin-right: 70px; +} + +.timeline-centered .timeline-entry.left-aligned .timeline-entry-inner .timeline-label:after { + left: auto; + right: 0; + margin-left: 0; + margin-right: -9px; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} + +.timeline-centered .timeline-entry .timeline-entry-inner { + position: relative; + margin-left: -22px; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-time { + position: absolute; + margin-top: -12px; + left: -100px; + text-align: right; + padding: 10px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-time > span { + display: block; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-time > span:first-child { + font-size: 1.2em; + font-weight: 400; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-time > span:last-child { + font-size: 0.9em; + font-weight: 300; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-icon { + background: #fff; + color: #737881; + display: block; + width: 40px; + height: 40px; + line-height: 40px; + font-size: 1.3em; + text-align: center; + float: left; + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + -webkit-box-shadow: 0 0 0 4px #fff; + -moz-box-shadow: 0 0 0 4px #fff; + box-shadow: 0 0 0 4px #fff; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-label:after { + content: ''; + display: block; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 9px 9px 9px 0; + border-color: transparent #eee transparent transparent; + left: 0; + top: 10px; + margin-left: -9px; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-label { + position: relative; + background: #fff; + padding: 1.7em; + margin-left: 70px; + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + border: 1px solid #ddd; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-label h2, .timeline-centered .timeline-entry .timeline-entry-inner .timeline-label p { + color: #666666; + font-size: 0.9em; + line-height: 1.9em; + margin: 0; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-label p + p { + margin-top: 15px; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-label h2 { + font-size: 1.2em; + line-height: 1.2em; + margin-bottom: 10px; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-label h2 span { + color: #999; +} + +.timeline-centered .timeline-entry .timeline-entry-inner blockquote { + font-size: 0.9em; + line-height: 1.9em; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-icon.bg-default { + background-color: #fff; + color: #999; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-icon.bg-primary { + background-color: #428bca; + color: #fff; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-icon.bg-success { + background-color: #5cb85c; + color: #fff; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-icon.bg-info { + background-color: #5bc0de; + color: #fff; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-icon.bg-warning { + background-color: #f0ad4e; + color: #fff; +} + +.timeline-centered .timeline-entry .timeline-entry-inner .timeline-icon.bg-danger { + background-color: #d9534f; + color: #fff; +} + +/* USER PROFILE */ +/*.profile .grid-header { + background: url('../img/background/09.jpg') no-repeat center center; + background-size: cover; + color: #f5f5f5; +}*/ + +.profile img { + max-width: 100%; +} + +.profile .grid-header img { + margin: 2em 1em; +} + +.profile .grid-header h3 { + color: #f5f5f5 !important; + font-weight: 400; + margin: 30px 0 20px 0; +} + +.profile .grid-header p { + margin-bottom: 5px; +} + +.profile .grid-header p a { + color: #f5f5f5; +} + +.profile .grid-body { + font-size: 1em; +} + +.profile .tab-content { + padding-bottom: 0px; +} + +.profile .stats { + margin-top: 20px; + padding: 0px 0px 20px; + background: #eee; + text-align: center; + border-top: 1px solid #ccc; +} + +.profile .stats h1 { + font-weight: 400; + margin-bottom: 0px; +} + +.profile .stats span { + margin: 5px 0 10px 0; + display: block; +} + +.profile .stats .btn { + padding-right: 4em; + padding-left: 4em; +} + +.profile .timeline-centered { + font-size: 1.15em; +} + +.profile .timeline-centered:before { + background: #eee; +} + +.profile .bg-default { + border: 1px solid #bbb; +} + +/* EMAIL */ +.email { + padding: 20px 10px 15px 10px; + font-size: 1em; +} + +.email .btn.search { + font-size: 0.9em; +} + +.email h2 { + margin-top: 0; + padding-bottom: 8px; +} + +.email .nav.nav-pills > li > a { + border-top: 3px solid transparent; +} + +.email .nav.nav-pills > li > a > .fa { + margin-right: 5px; +} + +.email .nav.nav-pills > li.active > a, +.email .nav.nav-pills > li.active > a:hover { + background-color: #f6f6f6; + border-top-color: #3c8dbc; +} + +.email .nav.nav-pills > li.active > a { + font-weight: 600; +} + +.email .nav.nav-pills > li > a:hover { + background-color: #f6f6f6; +} + +.email .nav.nav-pills.nav-stacked > li > a { + color: #666; + border-top: 0; + border-left: 3px solid transparent; + border-radius: 0px; +} + +.email .nav.nav-pills.nav-stacked > li.active > a, +.email .nav.nav-pills.nav-stacked > li.active > a:hover { + background-color: #f6f6f6; + border-left-color: #3c8dbc; + color: #444; +} + +.email .nav.nav-pills.nav-stacked > li.header { + color: #777; + text-transform: uppercase; + position: relative; + padding: 0px 0 10px 0; +} + +.email table { + font-weight: 600; +} + +.email table a { + color: #666; +} + +.email table tr.read > td { + background-color: #f6f6f6; +} + +.email table tr.read > td { + font-weight: 400; +} + +.email table tr td > i.fa { + font-size: 1.2em; + line-height: 1.5em; + text-align: center; +} + +.email table tr td > i.fa-star { + color: #f39c12; +} + +.email table tr td > i.fa-bookmark { + color: #e74c3c; +} + +.email table tr > td.action { + padding-left: 0px; + padding-right: 2px; +} + +.filterdiv +{ + background-color: rgba(9, 27, 39, 0.8); + border: 2px solid #000; + color: #fff; + display: none; + left: 6px; + padding: 4px; + position: absolute; + top: 45px; + width: 1260px; + max-height: 400px; + overflow-y: auto; +} +.filterinner +{ + /*background-color:rgba(255, 255, 255, 0.89);*/ + /*color: #fff;*/ + display: table; + padding: 0; + width: 100%; +} + .filterinner .grid + { + margin:0px; + } + +.filterinner .time +{ + background-color: rgba(255, 255, 255, 0.8); + padding: 5px; + width:30%; + float:left; + margin-right:5px; + border-radius:5px; + font-size:11px; + color: #000; + height:223px; +} +.filterinner .time input +{ + margin-top: 0px; +} +.filterinner .region input +{ + margin-top: 0px; +} +.filterinner .class input +{ + margin-top: 0px; +} + +.filterinner .region +{ + background-color: rgba(255, 255, 255, 0.8); + padding: 5px; + width:25%; + float:left; + margin-right:5px; + border-radius:5px; + font-size:11px; + color: #000; + height:223px; +} +.filterinner .class +{ + background-color: rgba(255, 255, 255, 0.8); + padding: 5px; + width:44%; + float:right; + border-radius:5px; + font-size:11px; + color: #000; + height:223px; +} +.gridinner +{ + padding-left:30px!important; +} +div.tagsinput { + background: none repeat scroll 0 0 #fff; + border: 1px solid #bbb; + height: 100px; + overflow-y: auto; + padding: 5px; + width: 300px; +} +div.tagsinput span.tag { + background: none repeat scroll 0 0 #81befb; + border: 1px solid #70b0f0; + border-radius: 2px; + color: #fff; + display: block; + float: left; + font-family: helvetica; + font-size: 13px; + margin-bottom: 5px; + margin-right: 5px; + padding: 2px 5px; + text-decoration: none; +} +.widget +{ + /*cursor:pointer;*/ +} +a:hover, a:focus { + text-decoration: none; +} +/*Added by chirag for zoomable bubble*/ +.zoomselectbtn { + cursor: pointer; + position: absolute; + right: 21px; + top: 5px; + z-index: 10; +} +.zoomselect +{ + background-color: rgba(255, 255, 255, 0.3); + border: 1px solid #cccccc; + padding: 2px; + position: absolute; + right: 17px; + top: 43px; + width: 20%; + z-index: 10; +} +.zoomheader +{ + background-color: #1F0068; + border-bottom: 1px solid #999; + color: #fff; + float: left; + font-size: 14px; + font-weight: bold; + margin-bottom: 3px; + text-align: center; + text-transform: uppercase; + width: 100%; +} +.zoombody +{ + width:100%; + float:left; +} +.zoomBubbleSlot +{ + width:100%!important; +} + + + +.catdiv +{ + width:150px; + position:absolute; + top:50px; + left:0px; + background-color: rgba(0, 0, 0, 0.7); + padding:5px; + display:none; + color:#fff; + border-radius:3px; + margin-left:52px; + z-index:1000; +} + + +.catdivinner +{ + width:100%; + background-color:rgba(102, 102, 102, 0.74); + padding:10px; + border-radius:3px; + float:left; +} +.catlist +{ + border-bottom: 1px solid #868686; + float: left; + padding: 5px 0; + width: 100%; +} +input[type=checkbox].css-checkbox { + position: absolute; + overflow: hidden; + clip: rect(0 0 0 0); + height:1px; + width:1px; + margin:-1px; + padding:0; + border:0; +} + +input[type=checkbox].css-checkbox + label.css-label { + background-position: 0 0; + background-repeat: no-repeat; + cursor: pointer; + display: inline-block; + font-size: 14px; + font-weight: 400; + height: 15px; + line-height: 15px; + padding-left: 20px; + vertical-align: middle; +} + +input[type=checkbox].css-checkbox:checked + label.css-label { + background-position: 0 -15px; +} + +/*.css-label{ + background-image:url(../img/check.png); +}*/ +.Cat_icon { + float: left; + left: 92px; + margin-right: 10px; + padding: 12px; + position: absolute; + text-align: center; + top: 0; + width: auto; + color:#d0cfcf; + z-index:1000; + cursor:pointer; +} +.Right-header { + background-color: #1F0068; + color: #fff; + font-weight: 600; + margin-bottom: 1px; + padding: 2px 5px; + width: 100%; +} +.subtotalrow { + background-color:#ffffff; + border-bottom:1px solid #ccc; +} +.filterSelection { + float: left; + height: 40px; + margin-right: 20px; + overflow: hidden; + max-width:1000px; +} +.filterarea { + color: #fff; + float: left; + height: 50px; + line-height: 3.5em; + max-width: 250px; + padding-left: 15px; + position: relative; +} +.filterarea > .badge { + background:rgba(247, 7, 7, 0.8); + border-radius: 9px !important; + color: #fff !important; + font-size: 11px !important; + font-weight: 600 !important; + height: 18px; + padding: 3px 5px; + position: absolute; + left: 1px; + top: 2px; + min-width: 18px; +} +.filterarea h3{ + color: #fff; + display: inline-block; + float: left; + font-size: 15px; + font-weight: 600; + line-height: 40px; +} +.filterarea span{ + color: #b9b9b9; + display: inline-block; + float: left; + font-size: 12px; + margin-left: 5px; + max-width: 100px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.Expandarea { + float: left; + padding-top:8px; +} +.Expandarea a { + color: #fff; + float: left; + font-size: 15px; + font-weight: 600; + padding-top: 5px; +} +.Expandarea a:hover { + color: #fca325; + transition: all .25s ease; +} + +.filterdivdetails { + background-color: #fff; + /*color: #fff;*/ + display: none; + /*max-height: 400px;*/ + /*overflow-y: auto;*/ + padding: 1px; + position: absolute; + right: 5px; + top: 49px; + width: 99.8%; + box-shadow:0 5px 10px rgba(0, 0, 0, 0.2); + border:1px solid rgba(0, 0, 0, 0.2); +} + +.filterdivdetails>.arrow { + top: -11px; + left: 40%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0,0,0,.25); +} +.filterdivdetails>.arrow { + border-width: 11px; +} +.filterdivdetails>.arrow, .filterdivdetails>.arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.filterdivdetails.bottom>.arrow { + top: -11px; + /*left: 85px;*/ + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0,0,0,.25); +} +.filterdivdetails.bottom>.arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.filterdivdetails>.arrow:after { + content: ""; + border-width: 10px; +} + +.expandfilterinner +{ + display: table; + padding: 0; + width: 100%; +} +.filterresult { + color: #333; + float: left; + margin-right: 20px; +} +.filterresult strong{ + padding-right:5px; +} +.filterresult_company { + background: #f1f1f1 none repeat scroll 0 0; + padding: 5px 10px; + float: left; + width: 100%; +} +.expandfilterinner .time +{ + background-color: rgba(255, 255, 255, 0.7); + padding: 5px; + width:25%; + float:left; + margin-right:5px; + border-radius:5px; + font-size:11px; + color: #000; +} + +.expandfilterinner .region +{ + background-color: rgba(255, 255, 255, 0.7); + padding: 5px; + width:25%; + float:left; + margin-right:5px; + border-radius:5px; + font-size:11px; + color: #000; +} +.expandfilterinner .class +{ + background-color: rgba(255, 255, 255, 0.7); + padding: 5px; + width:48%; + float:right; + border-radius:5px; + font-size:11px; + color: #000; +} + +.expandfilterinnerheader +{ + float: left; + padding: 5px 5px 1px; + width: 100%; +} +.expandfilterinnerheader p +{ + border-bottom: 1px solid black; + font-weight: bold; + margin-bottom: 0px; +} +.expandfilterinnerbody +{ + float: left; + padding: 5px 5px 1px; + width: 100%; + max-height:200px; + overflow-y:auto; +} + + + + + + + + + + + + + + + + + +.filterdivdetailsinner +{ + background-clip: padding-box; + position: relative; + color:#fff; + width:400px; +} +.filter-header { + padding: 8px 14px; + background: #009bdd; +} +.filter-header .close { + margin-top: -2px; +} +.close { + color: #000; + float: right; + font-size: 21px; + font-weight: 700; + line-height: 1; + opacity: 0.2; + text-shadow: 0 1px 0 #fff; +} +.filter-title { + color: #fff; + font-size: 16px; + font-weight: 600; + line-height: 1.42857; + margin:0; + text-transform: uppercase; +} +.filter-body { + padding: 15px 0; + position: relative; +} +.filter-body h3 { + color: #fff; + display: inline-block; + float: left; + font-size: 16px; + font-weight: 600; +} +.filter-body span { + display: inline-block; + float: left; + line-height: 2em; + padding-left: 10px; +} +.filter-footer { + bottom: 0; + float: left; + margin-bottom: 0; + margin-top: 10px; + padding: 5px; + text-align: right; + width: 100%; +} +.selecteditems { + background: #e2e2e2 none repeat scroll 0 0; + border: 1px solid #dbdbdb; + padding: 3px 8px; + margin-right: 5px; + color: #000; + margin-bottom: 5px; + float:left; +} +.selecteditems i{ +} + +.metrogridheader +{ + background-color:#190153; + color:#fff; +} +.slider360 +{ + display: table; + position: relative; + width: 100%; +} +.slider360 .slider360_header +{ + background: none repeat scroll 0 0 #1f0068; + color: #fff; + height: 40px; + line-height: 36px; +} +.slider360_headertop +{ + background: none repeat scroll 0 0 #000; + color: #fff; + display: block; + height: 46px; + line-height: 3em; + text-align: center; +} +.slider360 .show +{ + border: medium none; + cursor: pointer; + padding: 10px 3px 2px 6px; + position: absolute; + right: 4px; + top: 0; + z-index: 9; +} +/*.slider360 .remove { + background: url("../metro/images/close.gif") no-repeat scroll 0 0 rgba(0, 0, 0, 0); + padding: 9px 12px 12px; +}*/ +.slider360 .title +{ + color: #fff; + /*float: left;*/ + font-size: 22px; + font-weight: 400; + padding-left: 25px; + padding-top: 8px; + text-align:center; +} +.sliderloader +{ + background: url("../images/loader11.gif") no-repeat scroll 50% 20% rgba(0, 0, 0, 0.8); + display: table; + height: 680px; + position: absolute; + width: 100%; + z-index: 2; +} + +.Headertext360 { + color: #fff; + float: left; + height: 40px; + line-height: 3.5em; + max-width: 200px; + padding-left: 15px; +} +.Headertext360 h3{ + color: #fff; + display: inline-block; + float: left; + font-size: 15px; + font-weight: 600; + line-height: 33px; +} +.Headertext360 span{ + color: #b9b9b9; + display: inline-block; + float: left; + font-size: 12px; + margin-left: 5px; + max-width: 100px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.daterange +{ + float: left; + font-size: 16px; + font-weight: 600; +} +.paddingright20 +{ + padding-right:50px; +} +.logoutdiv +{ + height:40px; + position:absolute; + right:20px; + width:50px; +} +.logoutdiv a +{ + color: #ff0000; + float: left; + font-size: 17px; + font-weight: 400; + padding-top: 13px; +} +.display +{ +display:none; +} +.input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn +{ + height:25px; + line-height: 1; +} + +/*-----------------------Bhairab----------------------*/ +.Topfilter +{ + width: auto; + float: left; + color: #fff; + padding: 15px 25px; + padding-top: 15px; + padding-bottom: 0; +} +.Topfilter a +{ + color:#fff!important; +} +.Topfilter a:hover +{ + text-decoration:none; +} +.Topfilter i +{ + font-size:1.5em; +} +.Distribution_inner +{ + height: 78px; + position: absolute; + top: 32px; + width: 100%; + /*z-index: 1;*/ + padding-top: 20px; + border: 1px solid #ccc; + font-weight:400; +} +.Distribution_inner >div +{ + border-right:1px dotted; +} +.Distribution_inner >div:last-child +{ + border-right:0; +} +/*-----------------------/Bhairab----------------------*/ +.modal-backdrop { + background-color: #000; + bottom: 0; + left: 0; + position: fixed; + right: 0; + top: 0; +} +.Selectdate{ + color: #fff; + float: right; + font-size: 15px; + line-height: 49px; + margin-right: 73px; + width: auto; + cursor:pointer; +} +.Selectdate a{ + color: #fff; + font-size: 16px; + font-weight: 600; + padding-right:10px; +} + +#cssmenu { + /*background: #333;*/ + list-style: none; + margin: 0; + padding: 0; + width: 100%; + + min-height:440px; + background: #fff none repeat scroll 0 0; + border: 1px solid #e7e7e7; + border-radius: 2px; +} +#cssmenu .cssmenuheader +{ + background: #1f0068 none repeat scroll 0 0; + color: #fff; + font-weight: 600; + padding: 8px 12px; +} +#cssmenu li { + margin: 0; + padding: 0; + list-style: none; +} +#cssmenu a { + /*background: #333; + border-bottom: 1px solid #393939; + color: #ccc; + display: block; + margin: 0; + padding: 8px 12px; + text-decoration: none; + font-weight: normal;*/ + + background: #fff; + border-bottom: 1px dotted #ccc; + color: #333; + display: block; + margin: 0; + padding: 8px 12px; + text-decoration: none; + font-weight: normal; +} +#cssmenu a:hover { + /*background: #2580a2; + color: #fff;*/ + color:#1F0068; + font-weight:600; + padding-bottom: 8px; + font-weight:600; + background:#F1F1F1; +} +#cssmenu li a.active { + background: #2580a2; + color: #fff; + font-weight:600; +} +#cssmenu a i + { + padding-right:10px; + } + +.indented-0 { + padding-left: 7px !important; +} +.indented-1 { + padding-left: 21px !important; +} +.indented-2 { + padding-left: 35px !important; +} +.indented-3 { + padding-left: 49px !important; +} +.indented-4 { + padding-left: 63px !important; +} +.indented-5 { + padding-left: 77px !important; +} +.Text-white +{ + color:#fff; +} + +.CustomPopup +{ + background-color: #1f0068; + border-radius: 3px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); + color: #fff; + /*overflow: hidden;*/ + padding: 10px; + position: absolute; + right: 2%; + width: 50%; +} +.CustomPopup a + { + background: rgba(0, 0, 0, 0.70); + color: #dd4b39; + font-weight: 700; + height: 30px; + padding: 3px 11px; + position: absolute; + right: -10px; + top: -10px; + width: 30px; + transition: all 1s ease 0s; + border-radius:50%; + } +.CustomPopup a:hover + { + background: #cb2027; + color:#fff; + } + +/*.grid { + background: #fff none repeat scroll 0 0; + border-radius: 2px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); + color: #666666; + margin-bottom: 25px; + position: relative; + width: 100%; +} +.grid .grid-body { + font-size: 0.9em; + line-height: 1.9em; + padding: 15px 20px; +} + +.sidebar .sidebar-menu > li { + border-bottom: 1px solid #ccc; + margin: 0; + padding: 0; +} +.menuheader { + font-size: 18px; + padding: 6px !important; + text-align: center; +} +.sidebar { + background: #fff none repeat scroll 0 0; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); +} +.sidebar .sidebar-menu { + list-style: outside none none; + margin: 0; + padding: 0; +} + +.sidebar .sidebar-menu > li { + border-bottom: 1px solid #ccc; + margin: 0; + padding: 0; +} +.sidebar .sidebar-menu > li > a { + display: block; + padding: 6px; +} + +.sidebar > a { + color:#428bca!important; +}*/ + +/*-------------------------Bhairab------------------------*/ +.inner-rightside { + background-color: #f9f9f9; + color: #666666; + margin-left: 202px; + overflow: hidden; +} +.inner-leftside { + width:100%; + /*position:absolute;*/ + background:#111111 none repeat scroll 0 0; +} +.inner-leftside, .inner-rightside { + display: block; + min-height: 100%; +} +.inner-rightside > .content { + background: #f1f1f1 none repeat scroll 0 0; + padding: 0 0 0 20px; +} +.inner-leftside .sidebar-menu { + list-style: outside none none; + margin: 0; + padding: 0; +} +.innerleftsidemenu { + list-style: outside none none; +} +.innerleftsidemenu > .sidebar-menu > li > a { + color: #a1a1a1; + display: block; + font-size: 10px; + padding: 7px 10px; +} +.innerleftsidemenu > .sidebar-menu > li > a:hover + { + color: #f4f4f4; + background:rgba(0, 123, 233, 0.4); + } +.innerleftsidemenu > .sidebar-menu > li.active > a { + color: #f4f4f4; + font-weight: 600; +} +.innerleftsidemenu > .sidebar-menu > li:first-child { + border-top: 0px; +} +.innerleftsidemenu >.sidebar-menu > li { + border-bottom: 1px solid #000000; + border-top: 1px solid #252525; +} +.menuheader { + font-size: 18px; + font-weight: 300; + padding: 7px 4px; + text-align: center; +} +.padding5 +{ + padding:0 5px!important; +} +.nav-tabs.nav-justified > li > a +{ + border-radius:0; +} +.nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus +{ + color: #3C8DBC; + font-weight: 600; +} +.nav-tabs.nav-justified > li > a { + border: 1px solid #ddd; +} +.Targetval +{ + bottom: 10px; + display: block; + font-size: 18px; + font-weight: 300; + position: absolute; + text-align: center !important; + width: 90%; +} +.toptile +{ + min-height:160px; +} +/*.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar { + background-color: rgba(255, 255, 255, 0.75); +}*/ + +.AvgHeader +{ + color: #3c8dbc; + display: block; + font-weight: 600; + line-height: 28px; + text-align: center; + text-transform: uppercase; +} +.profileimage + { + display:none; + } +.paddingright40 +{ + padding-right:40px; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 0px; +} +.no-item-selected { + font-size: 14px; + padding: 9px 0; + text-align: center; +} +.no-item-selected i{ + font-size: 18px; +} +.circle-orange { + -webkit-border-radius: 25px; + -moz-border-radius: 25px; + padding: 2px 10px; + border-radius: 25px; + float: left; + color: #fff; + background: #ff851b; + min-width:90px; + text-align:center; + } +.circle-blue { + -webkit-border-radius: 25px; + -moz-border-radius: 25px; + padding: 2px 10px; + border-radius: 25px; + float: left; + color: #fff; + background: #0073b7; + min-width:90px; + text-align:center; + } + + .circle-green { + -webkit-border-radius: 25px; + -moz-border-radius: 25px; + padding: 2px 10px; + border-radius: 25px; + float: left; + color: #fff; + background: #00cc00; + min-width:90px; + text-align:center; + } + + .circle-red { + -webkit-border-radius: 25px; + -moz-border-radius: 25px; + padding: 2px 10px; + border-radius: 25px; + float: left; + color: #fff; + background: #ff6666; + min-width:90px; + text-align:center; + } + .circle-gray { + -webkit-border-radius: 25px; + -moz-border-radius: 25px; + padding: 2px 10px; + border-radius: 25px; + float: left; + color: #fff; + background: #eaeaec; + min-width:90px; + text-align:center; + } + .d3-tip { +z-index:1100; +line-height: 1; +font-weight: normal; +font-size:11px; +font-family:'Trebuchet MS'; +padding: 12px; +/*background: #BAE3F6;*/ +background:white; +color: black; +border-radius: 5px; +border:1px solid black; +} + .sliderloader +{ + background: url("../images/loader11.gif") no-repeat scroll 50% 20% rgba(0, 0, 0, 0.8); + display: table; + height: 680px; + position: absolute; + width: 100%; + z-index: 2; +} + +/*---------Draggable---------*/ +.draggable-box { + position: absolute; + top:100px; + width: 190px; + background: #03a9f4; + color: #fff; + /*border-radius: 5px;*/ + margin-bottom: 25px; + /*border: 1px solid #dddddd;*/ + box-shadow:0 3px 10px rgba(0, 0, 0, 0.23), 0 3px 10px rgba(0, 0, 0, 0.16); + z-index:1; +} + +.draggable-box .drag-header { + position: relative; + padding: 6px 10px; + background: #0288d1; + text-align: center; + font-size: 16px; + /*text-transform: uppercase;*/ + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + cursor:move; +} + +.draggable-box .drag-header:before, +.draggable-box .drag-header:after { + display: table; + content: " "; +} + +.draggable-box .drag-header:after { + clear: both; +} + +.draggable-box .drag-body { + padding: 15px 20px 15px 20px; + padding:10px 0; + font-size: 0.9em; + line-height: 1.9em; + padding:5px; + display:table; + width:100%; + font-weight:600; +} +.draggable-box .drag-body span{ + float:left; +} +.column +{ + width: 110px; + /* background: red; */ + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + padding-right: 3px; +} +.datatype +{ + width: 60px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} +.draggable-box .drag-list { + padding: 15px 20px 15px 20px; + padding: 10px 0; + font-size: 0.9em; + line-height: 1.9em; + background: #fff; + padding: 5px; + color: #333; + display: table; + width: 100%; +} +.draggable-box .drag-list p{ + display: table; + width: 100%; + background:rgba(0, 0, 0, 0.20); + color:#333; + margin-bottom:3px; + padding:5px; + border-radius: 3px; + cursor:move; +} +.draggable-box .drag-list p:last-child{ + margin-bottom:0; +} +.draggable-box .drag-list span{ + float:left; +} +.draggable-box .drag-body p span{ + float:left; +} +.settings +{ + +} + +/*==================Wizard=====================*/ +.easyWizardSteps { + list-style: none; + width: 100%; + overflow: hidden; + margin: 0; + padding: 0; + border-bottom: 2px solid #0073b7; + margin-bottom: 20px; +} + +.easyWizardSteps li { + font-size: 16px; + display: inline-block; + padding: 5px 10px; + color: #B0B1B3; + margin-right: 10px; +} + +.easyWizardSteps li.current span { + font-size: 16px; + background: rgba(255,255,255,0.4); + padding: 0px 6px; + border-radius: 50%; + font-weight: 600; +} + +.easyWizardSteps li span { + font-size: 16px; + background: rgba(0,0,0,0.2); + padding: 0px 6px; + border-radius: 50%; + color: #fff; + font-weight: 600; +} + +.easyWizardSteps li.current { + color: #fff; + background: #0073b7; + border-radius: 5px 5px 0 0; +} + +.easyWizardButtons { + overflow: hidden; + padding: 10px 0; +} + +.easyWizardButtons button, .easyWizardButtons .submit { + cursor: pointer; + /*color: #fff; + background-color: #428bca; + border-color: #357ebd;*/ + padding: 6px 12px; + line-height: 1.42857143; + text-align: center; + border: 1px solid transparent; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; +} + +.easyWizardButtons .prev { + float: right; + margin-right:10px; +} + +.easyWizardButtons .next, .easyWizardButtons .submit { + float: right; +} +.Targettopsection +{ + background: #607D8B; + display: table; + width: 100%; + padding: 5px; + color: #fff; +} +.Targettopsection h3 +{ + margin: 0; +} +.Targettopsection p +{ + margin: 0; +} +.TableNametitle +{ + float: left; + width: 50%; + /*font-size: 16px; + color: #0073b7; + font-weight:600; + line-height: 26px; + margin:5px 0;*/ +} +.Tablecolorlegend +{ + float: left; + width: 50%; + line-height: 25px; + margin:5px 8px; +} +.legendkeycolumn +{ + float: right; + padding-right: 20px; + +} +.legendkeycolumn span +{ + width: 10px; + height: 10px; + background: #00BFFF; + float: left; + margin-top: 7px; + margin-right: 6px; +} +.legendTargetcolumn +{ + float: right; + +} +.legendTargetcolumn span +{ + width: 10px; + height: 10px; + background: #FF8C00; + float: left; + margin-top: 7px; + margin-right: 6px; +} +/*=====================Loader====================*/ +.loaderbg + { +background: rgb(181,189,200); /* Old browsers */ +background: -moz-radial-gradient(center, ellipse cover, rgba(181,189,200,1) 0%, rgba(0,0,0,0.9) 5%, rgba(0,0,0,1) 100%); /* FF3.6-15 */ +background: -webkit-radial-gradient(center, ellipse cover, rgba(181,189,200,1) 0%,rgba(0,0,0,0.9) 5%,rgba(0,0,0,1) 100%); /* Chrome10-25,Safari5.1-6 */ +background: radial-gradient(ellipse at center, rgba(181,189,200,1) 0%,rgba(0,0,0,0.9) 5,rgba(0,0,0,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ +filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#b5bdc8', endColorstr='#28343b',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ + + position: fixed; + z-index: 20010; + width: 100%; + height: 100%; + top: 0; + + } +.loader { + position: absolute; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + margin: auto; + width: 175px; + height: 100px; + z-index:20001; +} +.loader span { + display: block; + background: #ccc; + width: 7px; + height: 10%; + border-radius: 14px; + margin-right: 5px; + float: left; + margin-top: 25%; +} +.loader span:last-child { + margin-right: 0px; +} +.loader span:nth-child(1) { + animation: load 2.5s 1.4s infinite linear; +} +.loader span:nth-child(2) { + animation: load 2.5s 1.2s infinite linear; +} +.loader span:nth-child(3) { + animation: load 2.5s 1s infinite linear; +} +.loader span:nth-child(4) { + animation: load 2.5s 0.8s infinite linear; +} +.loader span:nth-child(5) { + animation: load 2.5s 0.6s infinite linear; +} +.loader span:nth-child(6) { + animation: load 2.5s 0.4s infinite linear; +} +.loader span:nth-child(7) { + animation: load 2.5s 0.2s infinite linear; +} +.loader span:nth-child(8) { + animation: load 2.5s 0s infinite linear; +} +.loader span:nth-child(9) { + animation: load 2.5s 0.2s infinite linear; +} +.loader span:nth-child(10) { + animation: load 2.5s 0.4s infinite linear; +} +.loader span:nth-child(11) { + animation: load 2.5s 0.6s infinite linear; +} +.loader span:nth-child(12) { + animation: load 2.5s 0.8s infinite linear; +} +.loader span:nth-child(13) { + animation: load 2.5s 1s infinite linear; +} +.loader span:nth-child(14) { + animation: load 2.5s 1.2s infinite linear; +} +.loader span:nth-child(15) { + animation: load 2.5s 1.4s infinite linear; +} + +@keyframes load { + 0% { + background: #ccc; + margin-top: 25%; + height: 10%; + } + 50% { + background: #444; + height: 100%; + margin-top: 0%; + } + 100% { + background: #ccc; + height: 10%; + margin-top: 25%; + } +} +/*====================/Loader====================*/ +.ovrflw-y +{ + height: 280px; + overflow-y: auto; +} +.no-margin +{ + margin:0; +} +.bg-light +{ + background:#f1f1f1; +} +.popclose +{ + opacity: 0.3; + margin-right: -10px; + margin-top: -10px; + outline:none; +} +.easyWizardButtons +{ + background: #eee; + position: fixed; + /*width: 100%;*/ + bottom: 0px; + right: 0px; + padding: 5px 10px; + border-top: 1px solid #ccc; + z-index:100; + left:50px; +} +.easyWizardElement +{ + margin-bottom:25px; +} +.Planicon +{ + width: 70px; + height: 70px; + /* border: 3px solid rgba(255, 255, 255, 0.3); */ + border: 3px solid #fff; + border-radius: 50%; + margin: 0 auto auto; + padding: 5px; + text-align: center; + background: rgba(0,0,0,0.3); + cursor: pointer; +} +.Planicon img +{ + width:100%; +} +.plan +{ + font-weight:600; +} +.plan-select +{ + background: #f39d12!important; +} +.confirmationdiv +{ + width:100%; + border:2px solid #428bca; + padding:10px; + margin-top:10px; + padding-bottom: 0; + background: #eee; +} +.icondiv +{ + width: 100%; + text-align:center; +} +.icondiv h3 +{ + text-align: center; + font-weight: 600; + margin-top: 10px; +} +.legendarea { + float: left; + padding: 5px 15px; + width: 100%; +} +.legend { + float: left; + margin-right: 20px; +} +.legend span{ + border-radius: 50%; + float: left; + height: 10px; + margin-right: 5px; + margin-top: 5px; + width: 10px; +} +.circle { + border-radius: 50%; + height: 20px; + width: 20px; +} +.btn-default { + background-color: #ddd; +} +.planbody { + display:table; + width:100%; + padding:7px!important; +} +.planbody h3 { + margin-top: 5px; + margin-bottom: 5px; + font-size: 18px; +} +.planbody p { + margin: 0; +} +.sortorder:after { + content: '\25b2'; +} + +.sortorder.reverse:after { + content: '\25bc'; +} + +.sortorder { + cursor:pointer +} + +.ms-pointer { + cursor:pointer +} +.model-lbls +{ + float: left; + padding: 0 20px; + border-right: 1px dotted; +} +.model-lbls:first-child +{ + padding-left: 0; +} +.model-lbls:last-child +{ + border-right: none; +} +.model-lbls strong +{ + padding-left: 10px; + font-size: 16px; +} + +.custompopover +{ + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + width: 450px; + max-width: 450px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0,0,0,.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2); + box-shadow: 0 5px 10px rgba(0,0,0,.2); +} +.custompopover.top { + margin-top: -10px; +} +/*.fade.in { + opacity: 1; +}*/ +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.custompopover.left>.arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0,0,0,.25); +} +.custompopover>.arrow { + border-width: 11px; +} +.custompopover>.arrow, .custompopover>.arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td { + padding: 5px; +} +.back +{ + font-size:14px; + font-weight:600; + text-transform:capitalize; + margin-top: 25px; +} +.nav-tabs>li.active>a, .nav-tabs>li.active>a:hover, .nav-tabs>li.active>a:focus { + font-weight: 600; +} +.modal-xl { + width: 90%; +} +.prediction_legend { + width:auto; + padding-right:10px; + border-right:1px dotted #ccc; + margin-right:10px; + float:left; +} +.prediction_legend strong{ + font-weight:600; + padding-right:3px; +} +.prediction_legend:last-child { + width:auto; + padding-right:0; + border-right:0; + margin-right:0; +} +.report-header{ + position:relative; +} +.report-header h1{ + font-size: 18px; + font-weight: 600; + margin-top: 0; + margin-bottom: 30px; +} +.getreport{ + /* position:absolute;*/ + text-align:center; + top: -12px; + /*left: 50%;*/ +} +.rptbtn { + border-radius:99px; + box-shadow:0 1px 2px rgba(0, 0, 0, 0.22); + min-width:100px; +} +.report-editor{ + position: relative; + background: #fff; + color: #666666; + border-radius: 5px; + /*margin-bottom: 25px;*/ + border: 1px solid #dddddd; + padding: 0; +} + +.shadowed{ + box-shadow:0 2px 2px rgba(0, 0, 0, 0.08); +} + +.flex-full { + -moz-box-flex: 1; + flex: 1 1 0; +} +.flex { + display: flex; +} +.GuiBuilder-row { + /*border-bottom: 1px solid #e0e0e0;*/ +} + +.arrow-right::after, .arrow-right::before { + border: 10px solid transparent; + content: ""; + display: block; + position: absolute; +} +.arrow-right::after, .arrow-right::before { + margin-top: -10px; + top: 50%; +} +.arrow-right::after { + border-left-color: #fff; + right: -19px; +} +.arrow-right { + position: relative; +} +.GuiBuilder-section { + min-height: 55px; + position: relative; +} +.GuiBuilder-section a{ + outline:none; +} +.GuiBuilder-section a:hover{ + outline:none; +} +.GuiBuilder-section-label { + background-color: #fff; + left: 10px; + padding-left: 10px; + padding-right: 10px; + position: absolute; + top: -7px; +} +.Query-label { + color: #aeaeae; + font-size: 10px; + font-weight: 700; + text-transform: uppercase; +} +.filter-option { + display: flex; + color: #333; + font-weight: 600; + padding: 17px; + cursor: pointer; + outline: none; +} +.filter-option span{ + margin-left: 10px; +} +.Addbtn{ + display: flex; +} +.Addbtn span{ + margin-left:0; +} +.disabled { + color:#ccc; + cursor:default; +} +.disabled:hover{ + color:#ccc; +} +.btn-plus{ + border: 1px solid #ccc; + /* margin-right: 10px; */ + height: 28px; + /*margin-left: 10px!important;*/ + width: 28px; + text-align: center; + line-height: 26px; + margin-top: -3px; + border-radius: 3px; +} +.GuiBuilder.GuiBuilder--expand { + -moz-box-direction: normal; + -moz-box-orient: horizontal; + flex-direction: row; +} +.GuiBuilder-data, .GuiBuilder-customfields, .GuiBuilder-filtered-by, .GuiBuilder-view, .GuiBuilder-groupedBy, .GuiBuilder-sortby { + border-right: 1px solid #e0e0e0; +} + +.GuiBuilder-sort-limit { + min-width: 0; + border-left: 1px solid #e0e0e0; +} + +.report-content{ + margin-top: 10px; + margin: 10px -15px 0 -15px; +} +.report-content .left{ + /*width: 300px;*/ + position: absolute; + /*min-height: 100%;*/ + border: 1px solid #e0e0e0; + border-radius: 3px; + /*padding: 10px;*/ + box-shadow: 0 1px 7px rgba(0, 0, 0, 0.18); +} +.report-content .left .left-header{ + padding: 10px; + border-bottom: 1px solid #ccc; + font-weight: 600; +} +.report-content .left .left-body{ + padding: 10px; + max-height:400px; + overflow-y: auto; +} +.report-content .right{ + margin-left:27%; + transition: 0.5s; +} + +.report-content .left::after { + border-bottom-color: #fff!important; + top: -18px; +} +.report-content .left::after, .report-content .left::before { + border: 10px solid transparent; + content: ""; + display: block; + pointer-events: none; + position: absolute; +} +.report-content .left::after, .report-content .left::before { + left: 12px; +} + +.report-list { + max-height: 400px; + overflow-y: auto; + margin: 0; + padding:0; +} +.report-list li{ + border: 2px solid transparent; + border-radius: 6px; + display: flex; + margin-bottom: 2px; + margin-top: 2px; + cursor: pointer; +} +.report-list li.selected, .report-list li:hover{ + background-color: #0073b7; + color:#fff!important; +} +.report-list li.selected a, .report-list li:hover a, .report-list li:hover a i, .report-list li.selected a > i{ + color:#fff!important; +} +.report-list li a{ + padding-bottom: 0.25rem; + padding-top: 0.25rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + display:inline-flex; + color:#666; + outline:none; +} +.report-list li a i{ + margin-right:10px; + font-size:18px; + color:#ccc; +} +.report-list li a h4{ + margin:0; + font-size:14px; + font-weight:400; +} +.popoverdiv{ + width: 300px; + position: absolute; + border: 1px solid #e0e0e0; + border-radius: 3px; + box-shadow: 0 1px 7px rgba(0, 0, 0, 0.18); + background:#fff; + z-index:1; + top:100%; +} +.popoverdiv .popover-header{ + padding: 10px; + border-bottom: 1px solid #ccc; + font-weight: 600; +} +.popoverdiv .popover-body{ + padding: 10px; +} +.popoverdiv::after { + border-bottom-color: #fff!important; + top: -18px; +} +.popoverdiv::after, .popoverdiv::before { + border: 10px solid transparent; + content: ""; + display: block; + pointer-events: none; + position: absolute; +} +.popoverdiv::after, .popoverdiv::before { + left: 12px; +} + .arrow-right::before { + border-left-color: #ddd; + right: -20px; + } + + .report-content .left::before { + border-bottom-color: #ddd; + top: -20px; + left: 12px; + } + + .popoverdiv::before { + border-bottom-color: #ddd; + top: -20px; + left: 12px; + } + + .search button { + height: 30px; + padding: 4px 10px; + } + + .popover__wrapper { + position: relative; + } +.datasource-list{ + display: table; + width: 100%; + /* background: red; */ + padding: 5px 0; + border-bottom: 1px dotted #ccc; +} +.report-content .left .drop{ + width:40%; + float: left; +} +.drop .form-control{ + border: 0; + padding-left: 0; + height: 25px; +} +.material-switch{ + float:left; + width: 60%; + position:relative; +} +.material-switch i{ + position: absolute; + top: 3px; + color: #ccc; + right: 5px; +} +.material-switch a{ + outline: none; + padding-left: 5px; + white-space: nowrap; + overflow: hidden; + width: 70%; + float: left; + text-overflow: ellipsis; +} +.material-switch > input[type="checkbox"] { + display: none; +} + +.material-switch > label { + cursor: pointer; + height: 0px; + position: relative; + width: 30px; + float: left; + margin-top: 10px; +} + +.material-switch > label::before { + background: rgb(0, 0, 0); + box-shadow: inset 0px 0px 10px rgba(0, 0, 0, 0.5); + border-radius: 8px; + content: ''; + height: 16px; + margin-top: -8px; + position:absolute; + opacity: 0.3; + transition: all 0.4s ease-in-out; + width: 30px; +} +.material-switch > label::after { + background: rgb(255, 255, 255); + border-radius: 16px; + box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.3); + content: ''; + height: 20px; + left: -4px; + margin-top: -8px; + position: absolute; + top: -2px; + transition: all 0.3s ease-in-out; + width: 20px; +} +.material-switch > input[type="checkbox"]:checked + label::before { + background: inherit; + opacity: 0.5; +} +.material-switch > input[type="checkbox"]:checked + label::after { + background: inherit; + left: 12px; +} +.address{ + +} +.address .top{ + border-bottom: 1px solid #ccc; + display: flex; + margin-bottom: 10px; +} +.address .top a{ + border: 1px solid #ddd; + padding: 6px 10px; + margin-right: 5px; + background: #fbfcfd; + margin-bottom: 5px; + border-radius: 5px; + color: #333; +} +.address .top a.selected{ + background: #0073b7; + color: #fff; +} +.address .middle{ + display: flex; + margin-bottom:10px; +} +.address .footer{ + +} +.AdminList { + background-color: #f9fbfc; + border: 1px solid #f0f0f0; + border-radius: 4px; + box-shadow: -1px -1px 3px rgba(0, 0, 0, 0.05) inset; + padding-bottom: 0.75em; + width: 236px; + min-height: 100%; + position: fixed; + overflow-x: hidden; + transition: 0.5s; +} +.button-hide{ +background-color: #fcf9fb; + left: 10px; + padding-left: 10px; + padding-right: 10px; + top: -2px; +} + +.AdminSmallList { + background-color: #f9fbfc; + border: 1px solid #f0f0f0; + border-radius: 4px; + box-shadow: -1px -1px 3px rgba(0, 0, 0, 0.05) inset; + padding-bottom: 0.75em; + width: 42px; + min-height: 100%; + position: fixed; + overflow-x: hidden; + transition: 0.5s; +} +.AdminList-items { + list-style-type: none; + padding: 10px 0 0; + margin: 0; +} +.AdminList-item.selected, .AdminList-item:hover { + background-color: #fff; + border-color: #f0f0f0; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); + margin-left: -0.5em; + margin-right: -0.5em; + padding-left: 1.5em; + padding-right: 1.5em; + outline: none; +} +.AdminList-item.selected { + color: #509ee3; +} + +.justify-between { + -moz-box-pack: justify; + justify-content: space-between; +} + +.AdminList-item { + border: 1px solid transparent; + border-radius: 4px; + margin-bottom: 0.25em; + padding: 0.75em 1em; + text-decoration: none; + color:#333; + cursor:pointer; +} + +.Navbar { + background-color: #f9fbfc; + border: 0px solid #f0f0f0; + border-radius: 4px; + box-shadow: -1px -1px 3px rgba(0, 0, 0, 0.05) inset; + padding-bottom: 0.75em; + width: 0; + min-height: 400px; + position: absolute; + overflow-x: hidden; + transition: 0.5s; + z-index: 1; +} +.Navbar-items { + list-style-type: none; + padding: 10px 0 0; + margin: 0; +} +.Navbar-item.selected, .Navbar-item:hover { + background-color: #fff; + border-color: #f0f0f0; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); + margin-left: -0.5em; + margin-right: -0.5em; + padding-left: 1.5em; + padding-right: 1.5em; + outline: none; +} +.Navbar-item.selected { + color: #509ee3; +} +.Navbar-item { + border: 1px solid transparent; + border-radius: 4px; + margin-bottom: 0.25em; + padding: 0.75em 1em; + text-decoration: none; + color:#333; + cursor:pointer; +} + + +.rightside,#main{ + margin-left: 259px; + margin-top: 1%; + transition:margin-left .5s; +} +.headerTab,#main{ + font-size: 28px; + font-weight: 600; + color: #509ee3; + padding: 0; +} +@media (max-width:767px){ + + .rightside{margin-left:8%!important;margin-right:0!important;transition: 0.5s;} + #navIcon { display: block!important; } /* show it on small screens */ +} +.rightside1{ + margin-top: 1%; + margin-left:5%; + transition: 0.5s; +} +@media (max-width:767px){ + + .rightside1{margin-left:0!important;margin-right:0!important;transition: 0.5s;} + .contentsmall{padding: 0!important;} +} +.optionDiv,main{ + width: 105px; + transition: 0.5s; +} +.divhover:hover,main { + color: #23527c!important; + font-weight: 600; + font-size: 35px; + transition: 0.2s; + margin-top: -5px; + position: absolute; +} + +@media (max-width:591px){ + .optionDiv{width:89px!important;margin-left: -28px;} + .headerTab{font-size: 18px!important;font-weight: 600!important;} + .divhover:hover{ font-weight: 600!important;font-size: 23px!important;} + .divhover1:hover{ font-weight: 600!important;font-size: 23px!important;} + .btn{font-size: 11px!important;} + + +} + + +@media (max-width:400px){ + .headerTab{font-size: 15px!important;font-weight: 600!important;} + .divhover:hover{ font-weight: 600!important;font-size: 21px!important;} + .divhover1:hover{ font-weight: 600!important;font-size: 21px!important;} + body{font-size: 9px!important;} + .btn{font-size: 9px!important;} + .Navbar{min-height: 250px!important;} + #reportsPop{width: 137px!important;} + #customFieldPop1{width: 252px!important} + #customFieldPop2{width: 118px!important;} + #filterPop{width: 195px!important; } + #lable{font-size: 16px!important;} + .user-name .icon{width: 22px!important;height: 22px!important;line-height: 22px!important;} +} + + +@media (max-width:990px){ + #reportListId{display: block!important; + border: 0px!important ;border-radius: 0!important; + } + .report-editor-1{ + position: relative; + background: #fff; + color: #666666; + border-radius: 5px; + border: 1px solid #dddddd; + margin-top: 10px;} +} +@media (max-width:1285px){ + .report-content .right{ + margin-left:0%!important; + margin-top:420px; + transition: 0.5s;} + #left{width: 35%;} + #right{width:100%;} +} +.maxReport { + min-width: 100%!important; + margin-left: 0%!important; + margin-top: 0!important; + } +.rightside h3{ + margin-top: 0; + font-weight: 400; +} + +.user-name{ +} + +.user-name .icon{ + width: 35px; + height: 35px; + border-radius: 50%; + text-align: center; + line-height: 35px; + display: inline-block; +} +.user-name .name{ + font-weight: 700; + margin-left: 5px; +} +.group-dropdown{ + display: inline-block; + color: #035889; + font-weight: 600; + cursor: pointer; + outline: none; +} +.group-dropdown:hover{ + outline: none; +} +.EllipsisButton { + font-size: 24px; + position: relative; + color: #dfdfdf; + text-decoration: none; + cursor:pointer; +} +.EllipsisButton:hover { + outline:none; +} +.usertable tr td{ + line-height:30px!important; +} +.visualization{ + position:relative; + display:inline-block; +} +.visualization .title{ + position: absolute; + top: -20px; + font-weight: 600; + text-transform: uppercase; +} +.downloadsection{ + color:#999; +} +.downloadsection a{ + color: #333; + font-size: 16px; + margin-left: 20px; +} +.downloadsection a:hover{ + outline:none; +} +.querypage{ + box-shadow:0 2px 2px rgba(0, 0, 0, 0.08); + position: relative; + width: 100%; + background: #fff; + color: #333; + border-radius: 5px; + /* margin-bottom: 25px; */ + border: 1px solid #dddddd; + padding: 0; +} +.querypage .title{ + position: absolute; + top: -10px; + background: #fff; + padding: 0 5px; + text-transform: uppercase; + font-size: 11px; + font-weight: 600; + left: 10px; + color:#ccc; +} +.querypage .query-header{ + padding: 10px 15px; + border-bottom: 2px solid #ddd; + font-size: 16px; +} +.querypage .query-body{ + min-height:420px; +} +.settings{ + margin-left:10px; + color:#999; + font-size:16px; +} +.settings-datalist{ + min-height: 200px; + max-height: 300px; + overflow-y: auto; +} +.settings-datalist .list{ + display: block; + padding: 7px 0; + font-size: 14px; + border-bottom: 1px dotted #ccc; + font-weight: 600; +} +.settings-datalist .list a{ + /*margin: 0 10px;*/ + font-size: 16px; + font-weight: 700; + padding: 5px; +} +.listbtn{ + +} +.prpaired-field-list{ + background: #286090; + color: white; + padding: 0px 12px 1px 12px; + border-radius: 10px; + font-family: inherit; + display: inline-block; + margin-bottom: 3px; +} \ No newline at end of file diff --git a/src/main/webapp/css/style.css b/src/main/webapp/css/style.css new file mode 100644 index 000000000..5c23faebe --- /dev/null +++ b/src/main/webapp/css/style.css @@ -0,0 +1,603 @@ +body { + background: #e9e9e9; + color: #666666; + margin:0; + padding:0; + font-family: 'RobotoDraft', 'Roboto', sans-serif; + font-size: 14px; +} +.login-big-font { + font-size: 50px !important; +} +.inner-body { + background: #ececec; +} + +/* Pen Title */ +.pen-title { + text-align: center; + letter-spacing: 2px; +} +.pen-title span { + font-size: 12px; +} +.pen-title span .fa { + color: #f7911e; +} +.pen-title span a { + color: #f7911e; + font-weight: 600; + text-decoration: none; +} + +/* Rerun */ +.rerun { + margin: 0 0 30px; + text-align: center; +} +.rerun a { + cursor: pointer; + display: inline-block; + background: #f7911e; + border-radius: 3px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + padding: 10px 20px; + color: #ffffff; + text-decoration: none; + -webkit-transition: 0.3s ease; + transition: 0.3s ease; +} +.rerun a:hover { + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); +} + +/* Scroll To Bottom */ +#codepen, #portfolio { + position: fixed; + bottom: 30px; + right: 30px; + background: #363636; + width: 56px; + height: 56px; + border-radius: 100%; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + -webkit-transition: 0.3s ease; + transition: 0.3s ease; + color: #ffffff; + text-align: center; +} +#codepen i, #portfolio i { + line-height: 56px; +} +#codepen:hover, #portfolio:hover { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +/* CodePen */ +#portfolio { + bottom: 96px; + right: 36px; + background: #f7911e; + width: 44px; + height: 44px; + -webkit-animation: buttonFadeInUp 1s ease; + animation: buttonFadeInUp 1s ease; +} +#portfolio i { + line-height: 44px; +} + +/* Container */ +.container { + position: relative; + max-width: 460px; + width: 100%; + margin: 0 auto 50px; +} +.container.active .card:first-child { + background: #f2f2f2; + margin: 0 15px; +} +.container.active .card:nth-child(2) { + background: #fafafa; + margin: 0 10px; +} +.container.active .card.alt { + top: 20px; + right: 0; + width: 100%; + min-width: 100%; + height: auto; + border-radius: 5px; + padding: 60px 0 40px; + overflow: hidden; +} +.container.active .card.alt .toggle { + position: absolute; + top: 40px; + right: -70px; + box-shadow: none; + -webkit-transform: scale(10); + transform: scale(10); + -webkit-transition: -webkit-transform .3s ease; + transition: -webkit-transform .3s ease; + transition: transform .3s ease; + transition: transform .3s ease, -webkit-transform .3s ease; +} +.container.active .card.alt .toggle:before { + content: ''; +} +.container.active .card.alt .title, +.container.active .card.alt .input-container, +.container.active .card.alt .button-container { + left: 0; + opacity: 1; + visibility: visible; + -webkit-transition: .3s ease; + transition: .3s ease; +} +.container.active .card.alt .title { + -webkit-transition-delay: .3s; + transition-delay: .3s; +} +.container.active .card.alt .input-container { + -webkit-transition-delay: .4s; + transition-delay: .4s; +} +.container.active .card.alt .input-container:nth-child(2) { + -webkit-transition-delay: .5s; + transition-delay: .5s; +} +.container.active .card.alt .input-container:nth-child(3) { + -webkit-transition-delay: .6s; + transition-delay: .6s; +} +.container.active .card.alt .button-container { + -webkit-transition-delay: .7s; + transition-delay: .7s; +} + +/* Card */ +.card { + position: relative; + background: #ffffff; + border-radius: 5px; + padding: 60px 0 20px 0; + box-sizing: border-box; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + -webkit-transition: .3s ease; + transition: .3s ease; + /* Title */ + /* Inputs */ + /* Button */ + /* Footer */ + /* Alt Card */ +} +.card:first-child { + background: #fafafa; + height: 10px; + border-radius: 5px 5px 0 0; + margin: 0 10px; + padding: 0; +} +.card .title { + position: relative; + z-index: 1; + border-left: 5px solid #487db0; + border-right: 5px solid #487db0; + margin: 0 0 35px; + padding: 10px 0 10px 50px; + color: #367db1; + font-size: 18px; + font-weight: 500; + text-transform: uppercase; +} +.card .input-container { + position: relative; + margin: 0 60px 25px; +} +.card .input-container input { + outline: none; + z-index: 1; + position: relative; + background: none; + width: 100%; + height: 50px; + border: 0; + color: #212121; + font-size: 18x; + font-weight: 400; +} +.card .input-container input:focus ~ label { + color: #9d9d9d; + -webkit-transform: translate(-12%, -50%) scale(0.75); + transform: translate(-12%, -50%) scale(0.75); +} +.card .input-container input:focus ~ .bar:before, .card .input-container input:focus ~ .bar:after { + width: 50%; +} +.card .input-container input:valid ~ label { + color: #9d9d9d; + -webkit-transform: translate(-12%, -50%) scale(0.75); + transform: translate(-12%, -50%) scale(0.75); +} +.card .input-container label { + position: absolute; + top: 0; + left: 0; + color: #757575; + font-size: 18px; + font-weight: 300; + line-height: 60px; + -webkit-transition: 0.2s ease; + transition: 0.2s ease; +} +.card .input-container .bar { + position: absolute; + left: 0; + bottom: 0; + background: #757575; + width: 100%; + height: 1px; +} +.card .input-container .bar:before, .card .input-container .bar:after { + content: ''; + position: absolute; + background: #65aacf; /* #f7911e changed*/ + width: 0; + height: 2px; + -webkit-transition: .2s ease; + transition: .2s ease; +} +.card .input-container .bar:before { + left: 50%; +} +.card .input-container .bar:after { + right: 50%; +} +.card .button-container { + margin: 0 60px; +} +.card .button-container button { + outline: 0; + cursor: pointer; + position: relative; + display: inline-block; + background: 0; + width: 121px; + border: 2px solid #a8c6df; + padding: 15px 0; + font-size: 18px; + font-weight: 600; + line-height: 1; + text-transform: uppercase; + overflow: hidden; + -webkit-transition: .3s ease; + transition: .3s ease; +} +.card .button-container button span { + position: relative; + z-index: 1; + color: #ddd; + -webkit-transition: .3s ease; + transition: .3s ease; +} +.card .button-container .reset-butt { + float:right; +} +.card .button-container button:before { + content: ''; + position: absolute; + top: 50%; + left: 50%; + display: block; + background: #65aacf;/* chaged from#f7911e */ + width: 30px; + height: 30px; + border-radius: 100%; + margin: -15px 0 0 -15px; + opacity: 0; + -webkit-transition: .3s ease; + transition: .3s ease; +} +.card .button-container button:hover, .card .button-container button:active, .card .button-container button:focus { + /* border-color: #f7911e;#65aacf */ + border-color: #65aacf; +} +.card .button-container button:hover span, .card .button-container button:active span, .card .button-container button:focus span { + /* color: #f7911e; */ + color: #65aacf; +} +.card .button-container button:active span, .card .button-container button:focus span { + color: #ffffff; +} +.card .button-container button:active:before, .card .button-container button:focus:before { + opacity: 1; + -webkit-transform: scale(10); + transform: scale(10); +} +.card .footer { + margin: 40px 0 0; + color: #d3d3d3; + font-size: 18px; + font-weight: 300; + text-align: center; +} +.card .footer a { + color: inherit; + text-decoration: none; + -webkit-transition: .3s ease; + transition: .3s ease; +} +.card .footer a:hover { + color: #bababa; +} +.card.alt { + position: absolute; + top: 40px; + right: -18px; + z-index: 10; + width: 100px; + height: 100px; + background: none; + border-radius: 100%; + box-shadow: none; + padding: 0; + -webkit-transition: .3s ease; + transition: .3s ease; + /* Toggle */ + /* Title */ + /* Input */ + /* Button */ +} +.card.alt .toggle { + position: relative; + background: #65aacf; + width: 100px; + height: 100px; + border-radius: 100%; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + color: #ffffff; + font-size: 42px; + line-height: 100px; + text-align: center; + cursor: pointer; +} +.card.alt .toggle:before { + content: '\f040'; + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-transform: translate(0, 0); + transform: translate(0, 0); +} +.card.alt .title, +.card.alt .input-container, +.card.alt .button-container { + left: 100px; + opacity: 0; + visibility: hidden; +} +.card.alt .title { + position: relative; + border-color: #ffffff; + color: #ffffff; +} +.card.alt .title .close { + cursor: pointer; + position: absolute; + top: 0; + right: 60px; + display: inline; + color: #ffffff; + font-size: 58px; + font-weight: 400; +} +.card.alt .title .close:before { + content: '\00d7'; +} +.card.alt .input-container input { + color: #ffffff; +} +.card.alt .input-container input:focus ~ label { + color: #ffffff; +} +.card.alt .input-container input:focus ~ .bar:before, .card.alt .input-container input:focus ~ .bar:after { + background: #ffffff; +} +.card.alt .input-container input:valid ~ label { + color: #ffffff; +} +.card.alt .input-container label { + color: rgba(255, 255, 255, 0.8); +} +.card.alt .input-container .bar { + background: rgba(255, 255, 255, 0.8); +} +.card.alt .button-container button { + width: 100%; + background: #ffffff; + border-color: #ffffff; +} +.card.alt .button-container button span { + color: #f7911e; +} +.card.alt .button-container button:hover { + background: rgba(255, 255, 255, 0.9); +} +.card.alt .button-container button:active:before, .card.alt .button-container button:focus:before { + display: none; +} +.page-footer-top { + width: 100%; + text-align: center; +} +.page-footer-top p { + padding:0; + margin:0; + color: #212121; + line-height:24px; +} +.page-footer-top span { + color: #f7911e; +} +.page-footer { + background: #1b1617; + width: 100%; + text-align: center; + bottom: 0; + position: fixed; +} +.page-footer p { + padding:10px; + color:#fff; +} +/* Keyframes */ +@-webkit-keyframes buttonFadeInUp { + 0% { + bottom: 30px; + opacity: 0; + } +} +@keyframes buttonFadeInUp { + 0% { + bottom: 30px; + opacity: 0; + } +} + +/* landing page */ +.nav-sec { + background: #ffffff url("../images/top-bg.jpg") no-repeat right bottom; + border-bottom: #f7911e 3px solid; + min-height: 75px; +} +.navbar-brand { + height:auto; + padding:5px 15px; +} +.navbar-right-text { + margin-top:1px; + font-size:12px; +} +.navbar-right-text > li > a { + padding:2px 15px; + color:#fff !important; + line-height:7px; +} +.contents { + margin:0; + width:100%; + padding:0; +} +.contents .cont-leftside { + width:100%; + margin:0; + padding:0; +} +.contents .cont-leftside .widget { + width: 100%; + position: relative; + margin-bottom:10px; + background:#fff; + border:#e2e0e0 1px solid; + border-radius:8px; +} +.contents .cont-leftside .widget .heading { + width: 100%; + padding: 15px 20px; + margin: 0; + color: #fff; + background: #f7911e; + font-size: 18px; +} +.contents .cont-leftside .widget .widbox { + padding:10px 0 20px 0; + margin:0; +} + .contents .cont-leftside .widget .widbox li { + width: 100%; + padding: 5px 20px; + list-style-type: none; +} +.contents .cont-leftside .widget .widbox h5 { + line-height:24px; + margin:5px 0; +} +.contents .cont-leftside .widget .widbox p { + line-height:24px; + margin: 0; +} +.contents .cont-rightside { + width:100%; + margin:0; + padding:0; +} +.contents .cont-rightside .heading { + color: #337ab7; + font-size: 18px; + margin:15px 0; +} +.contents .cont-rightside .cont-menu-box { + width:100%; + margin:30px 0; + float:left; + padding:0; +} +.contents .cont-rightside .panel-box { + width: 100%; + position: relative; + background: #fff; + border: #e2e0e0 1px solid; + border-radius: 8px; + padding: 25px 15px; + min-height: 145px; + text-align: center; + box-shadow: 1px 2px 2px #dcdcdc; + margin-bottom:30px; + cursor:pointer; +} +.contents .cont-rightside .panel-box h5 { + font-size:18px; + line-height:24px; +} +.contents .cont-rightside .searchbox { + width: 80%; + height: 50px; + padding: 10px; + float: left; + border: #f7911e 1px solid;; + background: #fff; + border-radius: 8px 0 0 8px; + font-size:18px; + outline:none; +} +.contents .cont-rightside .searchsubmit { + overflow: visible; + position: relative; + float: right; + border: 0; + padding: 0; + cursor: pointer; + height: 50px; + width: 20%; + color: white; + font-size:18px; + text-transform: uppercase; + background: #f7911e; + border-radius: 0 8px 8px 0; + outline:none; +} +.contents .cont-rightside .searchsubmit:before { + content: ''; + position: absolute; + border-width: 8px 8px 8px 0; + border-style: solid solid solid none; + border-color: transparent #f7911e transparent; + top: 16px; + left: -8px; + outline:none; +} diff --git a/src/main/webapp/dist/css/AdminLTE.css b/src/main/webapp/dist/css/AdminLTE.css index 31898b2f1..b82e3e002 100644 --- a/src/main/webapp/dist/css/AdminLTE.css +++ b/src/main/webapp/dist/css/AdminLTE.css @@ -2346,8 +2346,8 @@ a:focus { background-color: #e7e7e7; } .btn-primary { - background-color: #3c8dbc; - border-color: #367fa9; + background-color: #337ab7; + border-color: #2e6da4; } .btn-primary:hover, .btn-primary:active, @@ -2355,8 +2355,8 @@ a:focus { background-color: #367fa9; } .btn-success { - background-color: #00a65a; - border-color: #008d4c; + background-color: #337ab7; + border-color: #2e6da4; } .btn-success:hover, .btn-success:active, diff --git a/src/main/webapp/dist/css/skins/skin-dark-black.css b/src/main/webapp/dist/css/skins/skin-dark-black.css new file mode 100644 index 000000000..dd41ab65d --- /dev/null +++ b/src/main/webapp/dist/css/skins/skin-dark-black.css @@ -0,0 +1,413 @@ +/* + * Skin: Black + * ----------- + */ +/* skin-black navbar */ +.skin-black-light .main-header { + -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); +} +.skin-black-light .main-header .navbar-toggle { + color: #333; +} +.skin-black-light .main-header .navbar-brand { + color: white; + background-color: #12507E; + border-right: 1px solid #eee; +} +.skin-black-light .main-header .navbar { + background-color: #252a35; +} +.skin-black-light .main-header .navbar .nav > li > a { + color: #AAB2BD; +} +.skin-black-light .main-header .navbar .nav > li > a:hover, +.skin-black-light .main-header .navbar .nav > li > a:active, +.skin-black-light .main-header .navbar .nav > li > a:focus, +.skin-black-light .main-header .navbar .nav .open > a, +.skin-black-light .main-header .navbar .nav .open > a:hover, +.skin-black-light .main-header .navbar .nav .open > a:focus, +.skin-black-light .main-header .navbar .nav > .active > a { + /* background: #12507E; */ + color: #000; +} +.skin-black-light .main-header .navbar .sidebar-toggle { + color: #AAB2BD; +} +.skin-black-light .main-header .navbar .sidebar-toggle:hover { + /* color: white; + background: #12507E; */ +} +.skin-black-light .main-header .navbar > .sidebar-toggle { + /* color: white; */ + /* border-right: 1px solid #eee; */ +} + +.skin-black-light .main-header .navbar .navbar-nav > li > a { + border-right: 1px solid #eee; +} +.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav > li > a, +.skin-black-light .main-header .navbar .navbar-right > li > a { + border-right-width: 0; +} +.skin-black-light .main-header > .logo { + background-color: #242A34; + color: #fff; + border-bottom: 0 solid transparent; + /* border-right: 1px solid #eee; */ +} +.skin-black-light .main-header > .logo:hover { + /* background-color: #12507E; */ +} +@media (max-width: 767px) { + .skin-black-light .main-header > .logo { + background-color: #222222; + color: #ffffff; + border-bottom: 0 solid transparent; + border-right: none; + } + .skin-black-light .main-header > .logo:hover { + background-color: #1f1f1f; + } +} +.skin-black-light .main-header li.user-header { + background-color: #222; +} +.skin-black-light .content-header { + background: transparent; + box-shadow: none; + color:#333; +} +.skin-black-light .wrapper, +.skin-black-light .main-sidebar, +.skin-black-light .left-side { + background-color: #f9fafc; +} +.skin-black-light .wrapper, .skin-black-light .main-sidebar, .skin-black-light .left-side{ + background: #313940; + /* color: #AAB2BD; */ +} +.skin-black-light .content-wrapper, +.skin-black-light .main-footer { + /* border-left: 1px solid #d2d6de; */ +} +.main-footer { + background: #262b35; + padding: 15px; + color: #AAB2BD; + border-top: 1px solid #000; +} +.skin-black-light .user-panel > .info, +.skin-black-light .user-panel > .info > a { + color: #444444; +} +.skin-black-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-black-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-black-light .sidebar-menu > li > a .navIconColor { + color:#fff; +} +.skin-black-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + /* font-weight: 600; */ + color:#AAB2BD; +} +.skin-black-light .sidebar-menu > li:hover > a, +.skin-black-light .sidebar-menu > li.active > a { + color: #fff; + background: rgba(0,0,0,0.8); +} +.skin-black-light .sidebar-menu > li.active { + border-left-color: #ffffff; +} +.skin-black-light .sidebar-menu > li.active > a { + /* font-weight: 600; */ +} +.sidebar-menu li:hover { + border-right : 2px solid transparent; +} +.sidebar-menu li.active { + border-right : 2px solid #02f1fd; +} +.skin-black-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-black-light .sidebar a { + color: #444444; +} +.skin-black-light .sidebar a:hover { + text-decoration: none; +} +.skin-black-light .treeview-menu > li > a { + color: #777777; +} +.skin-black-light .treeview-menu > li.active > a, +.skin-black-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-black-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-black-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-black-light .sidebar-form input[type="text"], +.skin-black-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; +} +.skin-black-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-black-light .sidebar-form input[type="text"]:focus, +.skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-black-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} +.skin-black-light .dropdown-menu > li.border-top { + border-top: 2px solid #111111 !important; +} +.skin-black-light .user-menu .up-arrow { + border-color: transparent transparent #111111; + border-bottom-color: #111111 !important; + border-top-color: #111111 !important; +} +.skin-black-light .btn-primary { + background-color: #58626b; + border-color: #4a5259; +} +.skin-black-light .btn-primary:hover, .skin-black-light.btn-primary:active, .skin-black-light.btn-primary.hover { + background-color: #313940; + border-color: #313940; +} +.skin-black-light .pagination > .active > a{ + background-color: #000!important; + border-color: #000!important; +} + + + + + + +/* 12-12-2017 */ +.content-wrapper { + background-color: #000000; +} +.box { + background: #31393f; +} +.box-header { + color: #fff; +} +.box-header.with-border { + border-bottom: 1px solid #000000; +} +.sidebar-menu li:hover { + border-right: 2px solid #fff; +} +.form-control { + color: #fff; + background-color: #262b35; + border-color: #0a0b0d; +} +.form-control:focus { + border-color: #0a0b0d; +} +.pagination > li > a { + background: #272b36; + color: #ffffff; + border: 1px solid #000; +} +.pagination > .disabled > a { + background: #272b36; + color: #ffffff; + border: 1px solid #000; +} +.box-body select { + border: 1px solid #000 !important; + background: #262b35; + color: #fff; +} +.box-body select:focus { + border: none !important; +} +.table { + color: #AAB2BD; +} +.table > thead > tr > th { + border-bottom: 2px solid #000000; +} +.table > tbody > tr > td { + border-top: 2px solid #272b36; +} +.table > tbody + tbody { + border-top: 2px solid #262b35; +} +.table-hover > tbody > tr:hover { + background-color: rgba(0,0,0,0.8); + color:#fff; +} +.user-name .name { + font-weight:normal; +} +.user-name .icon { + color:#fff; +} +.nav-tabs-custom > .tab-content { + background: #31393f; + padding: 0; +} +.nav-tabs-custom > .nav-tabs { + background: #262b35; + border-bottom-color: #000000; +} +.nav-tabs-custom > .nav-tabs > li > a { + color:#AAB2BD; +} +.nav-tabs-custom > .nav-tabs > li.active { + border-top-color: #AAB2BD; +} +.nav-tabs-custom > .nav-tabs > li.active > a { + border-right: none; + border-left: none; +} +.nav-tabs-custom > .nav-tabs > li.active > a, .nav-tabs-custom > .nav-tabs > li.active:hover > a { + background-color: #31393f; + color: #AAB2BD; +} +.navbar-custom-menu > .navbar-nav > li > .dropdown-menu { + border: #000 1px solid !important; + background: #262b35; +} +.dropdown-menu > li > a { + color: #fff; +} +.dropdown-menu.box li a { + border-bottom: 1px solid #000 !important; +} +.theme-changer { + padding: 0; +} +.theme-changer a { + border-bottom: none !important; +} +.theme-changer h5 { + margin: 0 0 5px 0; + border-bottom: 1px solid #000; + padding:10px; + color:#fff; +} +.box-header > .box-tools.pull-right .dropdown-menu { + background: #262b35; + border-left: 1px #000 solid !important; + border-right: 1px #000 solid !important; +} +.box.box-solid > .box-header a:hover { + background-color: #e1e3e9; +} +.action-box-dropdown { + background: #262b35 !important; +} +.action-box-dropdown li { + border-left: 1px #000 solid !important; + border-right: 1px #000 solid !important; +} +.modal-dialog h1, .modal-dialog h2, .modal-dialog h3, .modal-dialog h4, .modal-dialogh5, .modal-dialog h6, .modal-dialog p { + color: white; +} +.close { + color: #fff; + opacity: .8; +} +.modal { + background: rgba(0, 0, 0, 0.8); +} +.modal-header { + border-bottom: 1px solid #000000; +} +.cboard-div-border { + background: #31393f; + border: 1px solid #000000; + color: #AAB2BD; +} +.Query-label { + color: #AAB2BD; + background-color: #31393f; +} +.tree li { + color: #fff; +} +.box-footer { + border-top: 1px solid #000000; + background-color: #31393f; +} +.box-body { + color: #fff; +} +.box-body hr { + border-top: 1px solid #000; +} +.cron-select-wrap .cron-select { + color: #fff !important; + background-color: #272b36 !important; + border: 1px solid #000 !important; +} +.form-control[disabled] { + background-color: #4d4d4d; +} +.modal-warning .modal-header, .modal-warning .modal-footer { + color:#fff !important; +} +.skin-black-light .main-header .navbar .nav > li > a:hover, +.skin-black-light .main-header .navbar .nav > li > a:active, +.skin-black-light .main-header .navbar .nav > li > a:focus { + background: #31393f; + color: #fff!important; +} +/* pop-over color */ + +.popover { + background: black; +} +.popover.bottom .arrow:after { + border-bottom-color: black; +} +.popover-title{ + color:white; + background: #313a3e; +} + +/* drag out image remover */ +.tree-bg-dragout{ +background: none !important; +} \ No newline at end of file diff --git a/src/main/webapp/dist/css/skins/skin-white-light.css b/src/main/webapp/dist/css/skins/skin-white-light.css new file mode 100644 index 000000000..22387477b --- /dev/null +++ b/src/main/webapp/dist/css/skins/skin-white-light.css @@ -0,0 +1,173 @@ +/* + * Skin: Black + * ----------- + */ +/* skin-black navbar */ +.skin-black-light .main-header { + -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); +} +.skin-black-light .main-header .navbar-toggle { + color: #333; +} +.skin-black-light .main-header .navbar-brand { + color: white; + background-color: #12507E; + border-right: 1px solid #eee; +} +.skin-black-light .main-header .navbar { + background-color: #12507E; +} +.skin-black-light .main-header .navbar .nav > li > a { + color: white; +} +.skin-black-light .main-header .navbar .nav > li > a:hover, +.skin-black-light .main-header .navbar .nav > li > a:active, +.skin-black-light .main-header .navbar .nav > li > a:focus, +.skin-black-light .main-header .navbar .nav .open > a, +.skin-black-light .main-header .navbar .nav .open > a:hover, +.skin-black-light .main-header .navbar .nav .open > a:focus, +.skin-black-light .main-header .navbar .nav > .active > a { + background: #12507E; + color: white; +} +.skin-black-light .main-header .navbar .sidebar-toggle { + color: #333333; +} +.skin-black-light .main-header .navbar .sidebar-toggle:hover { + color: white; + background: #12507E; +} +.skin-black-light .main-header .navbar > .sidebar-toggle { + color: white; + /* border-right: 1px solid #eee; */ +} +.skin-black-light .main-header .navbar .navbar-nav > li > a { + border-right: 1px solid #eee; +} +.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav > li > a, +.skin-black-light .main-header .navbar .navbar-right > li > a { + border-right-width: 0; +} +.skin-black-light .main-header > .logo { + background-color: #12507E; + color: white; + border-bottom: 0 solid transparent; + /* border-right: 1px solid #eee; */ +} +.skin-black-light .main-header > .logo:hover { + background-color: #12507E; +} +@media (max-width: 767px) { + .skin-black-light .main-header > .logo { + background-color: #222222; + color: #ffffff; + border-bottom: 0 solid transparent; + border-right: none; + } + .skin-black-light .main-header > .logo:hover { + background-color: #1f1f1f; + } +} +.skin-black-light .main-header li.user-header { + background-color: #222; +} +.skin-black-light .content-header { + background: transparent; + box-shadow: none; +} +.skin-black-light .wrapper, +.skin-black-light .main-sidebar, +.skin-black-light .left-side { + background-color: #f9fafc; +} +.skin-black-light .content-wrapper, +.skin-black-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-black-light .user-panel > .info, +.skin-black-light .user-panel > .info > a { + color: #444444; +} +.skin-black-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-black-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-black-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-black-light .sidebar-menu > li:hover > a, +.skin-black-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-black-light .sidebar-menu > li.active { + border-left-color: #ffffff; +} +.skin-black-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-black-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-black-light .sidebar a { + color: #444444; +} +.skin-black-light .sidebar a:hover { + text-decoration: none; +} +.skin-black-light .treeview-menu > li > a { + color: #777777; +} +.skin-black-light .treeview-menu > li.active > a, +.skin-black-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-black-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-black-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-black-light .sidebar-form input[type="text"], +.skin-black-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; +} +.skin-black-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-black-light .sidebar-form input[type="text"]:focus, +.skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-black-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} diff --git a/src/main/webapp/i18n/en/cboard.json b/src/main/webapp/i18n/en/cboard.json index 5fb439915..1d15f2532 100644 --- a/src/main/webapp/i18n/en/cboard.json +++ b/src/main/webapp/i18n/en/cboard.json @@ -8,7 +8,7 @@ "REFRESH": "Refresh", "EDIT": "Edit", "EDIT_DEFAULT_VALUE": "Edit Default Value", - "CONFIRM_DELETE": "Confirm to Delete?", + "CONFIRM_DELETE": "Are you sure you want to delete ", "CONFIRM_RESET": "Confirm to Reset?", "CONFIRM_SAVE_BEFORE_PREVIEW": "Need save board before preview, confirm to save?", "NOT_ALLOWED_TO_DELETE_BECAUSE_BE_DEPENDENT": "Not allowed to delete, because be dependent", @@ -19,6 +19,7 @@ "NOT_EMPTY": " can not be empty.", "NEW": "New", "COPY": "Copy", + "RESOURCE":"Grant Resource", "DELETE": "Delete", "EXPORT": "Export", "LOG": "Log", @@ -30,7 +31,7 @@ "LAST60MIN_TIMESTAMP": "Last 60 Hours(Timestamp)", "LOGIN_NAME": "Current Login Name", "USER_NAME": "Current User Name", - "USER_ROLES": "Roles of Current User", + "USER_ROLES": "Current User Name", "FILTER_GROUP": "Filter Group", "SAVE_AS": "Save As", "PARAM": "Parameter", @@ -52,6 +53,9 @@ "UPDATE_TIM": "last update time", "FOLD_TREE": "Fold all nodes", "UNFOLD_TREE": "Unflod all nodes", + "PREVIEW" : "Preview", + "ACTION" : "Actions", + "CLOSE" : "Close", "MUST_SELECT_ONE_BOARD": "Please choose one board first", "SKIP_TO": "Skip to", "SKIP": "Skip" @@ -68,16 +72,18 @@ }, "SIDEBAR": { "MENU": "MENU", - "C_DASHBOARD": "Dashboard", - "MY_DASHBOARD": "My DashBoard", + "C_DASHBOARD": "My Dashboard", + "MY_DASHBOARD": "Dashboard", "CONFIG": "Configuration", "DATA_SOURCE": "DataSource", "DATASET": "Dataset", "WIDGET": "Widget", + "DASHBOARD_CONFIG": "Dashboard Config", "DASHBOARD": "Dashboard", "DASHBOARD_CATEGORY": "Dashboard Category", "ADMIN": "Admin", - "USER_ADMIN": "User Admin", + "USER_ADMIN": "User", + "ROLE_ADMIN": "Role", "RES_ADMIN": "Resource Admin", "JOB": "Job", "SHARE_RESOURCE": "Share Resource", @@ -89,7 +95,8 @@ "CHANGE_PASSWORD": "Change Password", "CURRENT_PASSWORD": "Current Password", "NEW_PASSWORD": "New Password", - "CONFIRM_PASSWORD": "Confirm Password" + "CONFIRM_PASSWORD": "Confirm Password", + "CHANGE_THEME" : "Change Theme" }, "FOOTER": { "COPYRIGHT": "CBoard OpenSource Team", @@ -111,7 +118,8 @@ }, "CONFIG": { "COMMON": { - "CUSTOM_EXPRESSION": "Calculated Measures" + "CUSTOM_EXPRESSION": "Calculated Measures", + "NEW": "New" }, "DATA_SOURCE": { "DATA_SOURCE_HEADER": "Data Source", @@ -121,8 +129,9 @@ }, "WIDGET": { "WIDGET": "Widget", + "NAME" : "Name", "DATA_SOURCE": "Data Source", - "DATASET": "Cube", + "DATASET": "Dataset", "LOAD_DATA": "Load Data", "WIDGET_NAME": "Widget Name", "AXIS_NAME": "Axis Name", @@ -133,6 +142,8 @@ "PREVIEW": "Preview", "EXIST_QUERY": "Exist Cube", "NEW_QUERY": "New Query", + "QUERY_TAB" :"Query", + "OPTION_TAB":"Option", "SWITCH": "Switch", "ROW": "Row", "GROUP": "Column", @@ -154,6 +165,7 @@ "FUNNEL": "Funnel", "SANKEY": "Sankey", "TABLE": "Table", + "GRID": "Grid", "KPI": "KPI", "PIE": "Pie", "DOUGHNUT": "Doughnut", @@ -305,10 +317,10 @@ }, "CATEGORY": { "NAME": "Category Name", - "CATEGORY": "Category" + "CATEGORY": "Dashboard Category" }, "DATASET": { - "DATASET": "Cube", + "DATASET": "Dataset", "NAME": "Name", "CATEGORY": "Category", "LOAD_DATA": "Load Data", @@ -380,7 +392,7 @@ "BOARD": "Dashboard", "MENU": "Menu", "DATASOURCE": "Datasource", - "DATASET": "Cube", + "DATASET": "Dataset", "WIDGET": "Widget", "JOB": "Job", "CONTACT_ADMIN": "Please contact the administrator to apply the following resources' access", @@ -390,7 +402,7 @@ "GRANT": "Grant", "DELETE_USER_IN_ROLE": "Revoke User's Role(s)", "ADD_USER2ROLE": "Grant User Role(s)", - "ADD_RES2ROLE": "Upate Resource of Role", + "ADD_RES2ROLE": "Grant", "TOGGLE_UPDATE": "Toggle UDATE", "TOGGLE_DELETE": "Toggle DELETE" }, diff --git a/src/main/webapp/imgs/syncGrid-active.png b/src/main/webapp/imgs/syncGrid-active.png new file mode 100644 index 000000000..04e2b76d4 Binary files /dev/null and b/src/main/webapp/imgs/syncGrid-active.png differ diff --git a/src/main/webapp/imgs/syncGrid.png b/src/main/webapp/imgs/syncGrid.png new file mode 100644 index 000000000..e07106115 Binary files /dev/null and b/src/main/webapp/imgs/syncGrid.png differ diff --git a/src/main/webapp/lib/dirPagination.js b/src/main/webapp/lib/dirPagination.js new file mode 100644 index 000000000..d5103ff17 --- /dev/null +++ b/src/main/webapp/lib/dirPagination.js @@ -0,0 +1,641 @@ +/** + * dirPagination - AngularJS module for paginating (almost) anything. + * + * + * Credits + * ======= + * + * Daniel Tabuenca: https://groups.google.com/d/msg/angular/an9QpzqIYiM/r8v-3W1X5vcJ + * for the idea on how to dynamically invoke the ng-repeat directive. + * + * I borrowed a couple of lines and a few attribute names from the AngularUI Bootstrap project: + * https://github.com/angular-ui/bootstrap/blob/master/src/pagination/pagination.js + * + * Copyright 2014 Michael Bromley + */ + +(function() { + + /** + * Config + */ + var moduleName = 'angularUtils.directives.dirPagination'; + var DEFAULT_ID = '__default'; + + /** + * Module + */ + angular.module(moduleName, []) + .directive('dirPaginate', ['$compile', '$parse', 'paginationService', dirPaginateDirective]) + .directive('dirPaginateNoCompile', noCompileDirective) + .directive('dirPaginationControls', ['paginationService', 'paginationTemplate', dirPaginationControlsDirective]) + .filter('itemsPerPage', ['paginationService', itemsPerPageFilter]) + .service('paginationService', paginationService) + .provider('paginationTemplate', paginationTemplateProvider) + .run(['$templateCache',dirPaginationControlsTemplateInstaller]); + + function dirPaginateDirective($compile, $parse, paginationService) { + + return { + terminal: true, + multiElement: true, + priority: 100, + compile: dirPaginationCompileFn + }; + + function dirPaginationCompileFn(tElement, tAttrs){ + + var expression = tAttrs.dirPaginate; + // regex taken directly from https://github.com/angular/angular.js/blob/v1.4.x/src/ng/directive/ngRepeat.js#L339 + var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/); + + var filterPattern = /\|\s*itemsPerPage\s*:\s*(.*\(\s*\w*\)|([^\)]*?(?=\s+as\s+))|[^\)]*)/; + if (match[2].match(filterPattern) === null) { + throw 'pagination directive: the \'itemsPerPage\' filter must be set.'; + } + var itemsPerPageFilterRemoved = match[2].replace(filterPattern, ''); + var collectionGetter = $parse(itemsPerPageFilterRemoved); + + addNoCompileAttributes(tElement); + + // If any value is specified for paginationId, we register the un-evaluated expression at this stage for the benefit of any + // dir-pagination-controls directives that may be looking for this ID. + var rawId = tAttrs.paginationId || DEFAULT_ID; + paginationService.registerInstance(rawId); + + return function dirPaginationLinkFn(scope, element, attrs){ + + // Now that we have access to the `scope` we can interpolate any expression given in the paginationId attribute and + // potentially register a new ID if it evaluates to a different value than the rawId. + var paginationId = $parse(attrs.paginationId)(scope) || attrs.paginationId || DEFAULT_ID; + + // (TODO: this seems sound, but I'm reverting as many bug reports followed it's introduction in 0.11.0. + // Needs more investigation.) + // In case rawId != paginationId we deregister using rawId for the sake of general cleanliness + // before registering using paginationId + // paginationService.deregisterInstance(rawId); + paginationService.registerInstance(paginationId); + + var repeatExpression = getRepeatExpression(expression, paginationId); + addNgRepeatToElement(element, attrs, repeatExpression); + + removeTemporaryAttributes(element); + var compiled = $compile(element); + + var currentPageGetter = makeCurrentPageGetterFn(scope, attrs, paginationId); + paginationService.setCurrentPageParser(paginationId, currentPageGetter, scope); + + if (typeof attrs.totalItems !== 'undefined') { + paginationService.setAsyncModeTrue(paginationId); + scope.$watch(function() { + return $parse(attrs.totalItems)(scope); + }, function (result) { + if (0 <= result) { + paginationService.setCollectionLength(paginationId, result); + } + }); + } else { + paginationService.setAsyncModeFalse(paginationId); + scope.$watchCollection(function() { + return collectionGetter(scope); + }, function(collection) { + if (collection) { + var collectionLength = (collection instanceof Array) ? collection.length : Object.keys(collection).length; + paginationService.setCollectionLength(paginationId, collectionLength); + } + }); + } + + // Delegate to the link function returned by the new compilation of the ng-repeat + compiled(scope); + + // (TODO: Reverting this due to many bug reports in v 0.11.0. Needs investigation as the + // principle is sound) + // When the scope is destroyed, we make sure to remove the reference to it in paginationService + // so that it can be properly garbage collected + // scope.$on('$destroy', function destroyDirPagination() { + // paginationService.deregisterInstance(paginationId); + // }); + }; + } + + /** + * If a pagination id has been specified, we need to check that it is present as the second argument passed to + * the itemsPerPage filter. If it is not there, we add it and return the modified expression. + * + * @param expression + * @param paginationId + * @returns {*} + */ + function getRepeatExpression(expression, paginationId) { + var repeatExpression, + idDefinedInFilter = !!expression.match(/(\|\s*itemsPerPage\s*:[^|]*:[^|]*)/); + + if (paginationId !== DEFAULT_ID && !idDefinedInFilter) { + repeatExpression = expression.replace(/(\|\s*itemsPerPage\s*:\s*[^|\s]*)/, "$1 : '" + paginationId + "'"); + } else { + repeatExpression = expression; + } + + return repeatExpression; + } + + /** + * Adds the ng-repeat directive to the element. In the case of multi-element (-start, -end) it adds the + * appropriate multi-element ng-repeat to the first and last element in the range. + * @param element + * @param attrs + * @param repeatExpression + */ + function addNgRepeatToElement(element, attrs, repeatExpression) { + if (element[0].hasAttribute('dir-paginate-start') || element[0].hasAttribute('data-dir-paginate-start')) { + // using multiElement mode (dir-paginate-start, dir-paginate-end) + attrs.$set('ngRepeatStart', repeatExpression); + element.eq(element.length - 1).attr('ng-repeat-end', true); + } else { + attrs.$set('ngRepeat', repeatExpression); + } + } + + /** + * Adds the dir-paginate-no-compile directive to each element in the tElement range. + * @param tElement + */ + function addNoCompileAttributes(tElement) { + angular.forEach(tElement, function(el) { + if (el.nodeType === 1) { + angular.element(el).attr('dir-paginate-no-compile', true); + } + }); + } + + /** + * Removes the variations on dir-paginate (data-, -start, -end) and the dir-paginate-no-compile directives. + * @param element + */ + function removeTemporaryAttributes(element) { + angular.forEach(element, function(el) { + if (el.nodeType === 1) { + angular.element(el).removeAttr('dir-paginate-no-compile'); + } + }); + element.eq(0).removeAttr('dir-paginate-start').removeAttr('dir-paginate').removeAttr('data-dir-paginate-start').removeAttr('data-dir-paginate'); + element.eq(element.length - 1).removeAttr('dir-paginate-end').removeAttr('data-dir-paginate-end'); + } + + /** + * Creates a getter function for the current-page attribute, using the expression provided or a default value if + * no current-page expression was specified. + * + * @param scope + * @param attrs + * @param paginationId + * @returns {*} + */ + function makeCurrentPageGetterFn(scope, attrs, paginationId) { + var currentPageGetter; + if (attrs.currentPage) { + currentPageGetter = $parse(attrs.currentPage); + } else { + // If the current-page attribute was not set, we'll make our own. + // Replace any non-alphanumeric characters which might confuse + // the $parse service and give unexpected results. + // See https://github.com/michaelbromley/angularUtils/issues/233 + // Adding the '_' as a prefix resolves an issue where paginationId might be have a digit as its first char + // See https://github.com/michaelbromley/angularUtils/issues/400 + var defaultCurrentPage = '_' + (paginationId + '__currentPage').replace(/\W/g, '_'); + scope[defaultCurrentPage] = 1; + currentPageGetter = $parse(defaultCurrentPage); + } + return currentPageGetter; + } + } + + /** + * This is a helper directive that allows correct compilation when in multi-element mode (ie dir-paginate-start, dir-paginate-end). + * It is dynamically added to all elements in the dir-paginate compile function, and it prevents further compilation of + * any inner directives. It is then removed in the link function, and all inner directives are then manually compiled. + */ + function noCompileDirective() { + return { + priority: 5000, + terminal: true + }; + } + + function dirPaginationControlsTemplateInstaller($templateCache) { + $templateCache.put('angularUtils.directives.dirPagination.template', ''); + } + + function dirPaginationControlsDirective(paginationService, paginationTemplate) { + + var numberRegex = /^\d+$/; + + var DDO = { + restrict: 'AE', + scope: { + maxSize: '=?', + onPageChange: '&?', + paginationId: '=?', + autoHide: '=?' + }, + link: dirPaginationControlsLinkFn + }; + + // We need to check the paginationTemplate service to see whether a template path or + // string has been specified, and add the `template` or `templateUrl` property to + // the DDO as appropriate. The order of priority to decide which template to use is + // (highest priority first): + // 1. paginationTemplate.getString() + // 2. attrs.templateUrl + // 3. paginationTemplate.getPath() + var templateString = paginationTemplate.getString(); + if (templateString !== undefined) { + DDO.template = templateString; + } else { + DDO.templateUrl = function(elem, attrs) { + return attrs.templateUrl || paginationTemplate.getPath(); + }; + } + return DDO; + + function dirPaginationControlsLinkFn(scope, element, attrs) { + + // rawId is the un-interpolated value of the pagination-id attribute. This is only important when the corresponding dir-paginate directive has + // not yet been linked (e.g. if it is inside an ng-if block), and in that case it prevents this controls directive from assuming that there is + // no corresponding dir-paginate directive and wrongly throwing an exception. + var rawId = attrs.paginationId || DEFAULT_ID; + var paginationId = scope.paginationId || attrs.paginationId || DEFAULT_ID; + + if (!paginationService.isRegistered(paginationId) && !paginationService.isRegistered(rawId)) { + var idMessage = (paginationId !== DEFAULT_ID) ? ' (id: ' + paginationId + ') ' : ' '; + if (window.console) { + console.warn('Pagination directive: the pagination controls' + idMessage + 'cannot be used without the corresponding pagination directive, which was not found at link time.'); + } + } + + if (!scope.maxSize) { scope.maxSize = 9; } + scope.autoHide = scope.autoHide === undefined ? true : scope.autoHide; + scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : true; + scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : false; + + var paginationRange = Math.max(scope.maxSize, 5); + scope.pages = []; + scope.pagination = { + last: 1, + current: 1 + }; + scope.range = { + lower: 1, + upper: 1, + total: 1 + }; + + scope.$watch('maxSize', function(val) { + if (val) { + paginationRange = Math.max(scope.maxSize, 5); + generatePagination(); + } + }); + + scope.$watch(function() { + if (paginationService.isRegistered(paginationId)) { + return (paginationService.getCollectionLength(paginationId) + 1) * paginationService.getItemsPerPage(paginationId); + } + }, function(length) { + if (0 < length) { + generatePagination(); + } + }); + + scope.$watch(function() { + if (paginationService.isRegistered(paginationId)) { + return (paginationService.getItemsPerPage(paginationId)); + } + }, function(current, previous) { + if (current != previous && typeof previous !== 'undefined') { + goToPage(scope.pagination.current); + } + }); + + scope.$watch(function() { + if (paginationService.isRegistered(paginationId)) { + return paginationService.getCurrentPage(paginationId); + } + }, function(currentPage, previousPage) { + if (currentPage != previousPage) { + goToPage(currentPage); + } + }); + + scope.setCurrent = function(num) { + if (paginationService.isRegistered(paginationId) && isValidPageNumber(num)) { + num = parseInt(num, 10); + paginationService.setCurrentPage(paginationId, num); + } + }; + + /** + * Custom "track by" function which allows for duplicate "..." entries on long lists, + * yet fixes the problem of wrongly-highlighted links which happens when using + * "track by $index" - see https://github.com/michaelbromley/angularUtils/issues/153 + * @param id + * @param index + * @returns {string} + */ + scope.tracker = function(id, index) { + return id + '_' + index; + }; + + function goToPage(num) { + if (paginationService.isRegistered(paginationId) && isValidPageNumber(num)) { + var oldPageNumber = scope.pagination.current; + + scope.pages = generatePagesArray(num, paginationService.getCollectionLength(paginationId), paginationService.getItemsPerPage(paginationId), paginationRange); + scope.pagination.current = num; + updateRangeValues(); + + // if a callback has been set, then call it with the page number as the first argument + // and the previous page number as a second argument + if (scope.onPageChange) { + scope.onPageChange({ + newPageNumber : num, + oldPageNumber : oldPageNumber + }); + } + } + } + + function generatePagination() { + if (paginationService.isRegistered(paginationId)) { + var page = parseInt(paginationService.getCurrentPage(paginationId)) || 1; + scope.pages = generatePagesArray(page, paginationService.getCollectionLength(paginationId), paginationService.getItemsPerPage(paginationId), paginationRange); + scope.pagination.current = page; + scope.pagination.last = scope.pages[scope.pages.length - 1]; + if (scope.pagination.last < scope.pagination.current) { + scope.setCurrent(scope.pagination.last); + } else { + updateRangeValues(); + } + } + } + + /** + * This function updates the values (lower, upper, total) of the `scope.range` object, which can be used in the pagination + * template to display the current page range, e.g. "showing 21 - 40 of 144 results"; + */ + function updateRangeValues() { + if (paginationService.isRegistered(paginationId)) { + var currentPage = paginationService.getCurrentPage(paginationId), + itemsPerPage = paginationService.getItemsPerPage(paginationId), + totalItems = paginationService.getCollectionLength(paginationId); + + scope.range.lower = (currentPage - 1) * itemsPerPage + 1; + scope.range.upper = Math.min(currentPage * itemsPerPage, totalItems); + scope.range.total = totalItems; + } + } + function isValidPageNumber(num) { + return (numberRegex.test(num) && (0 < num && num <= scope.pagination.last)); + } + } + + /** + * Generate an array of page numbers (or the '...' string) which is used in an ng-repeat to generate the + * links used in pagination + * + * @param currentPage + * @param rowsPerPage + * @param paginationRange + * @param collectionLength + * @returns {Array} + */ + function generatePagesArray(currentPage, collectionLength, rowsPerPage, paginationRange) { + var pages = []; + var totalPages = Math.ceil(collectionLength / rowsPerPage); + var halfWay = Math.ceil(paginationRange / 2); + var position; + + if (currentPage <= halfWay) { + position = 'start'; + } else if (totalPages - halfWay < currentPage) { + position = 'end'; + } else { + position = 'middle'; + } + + var ellipsesNeeded = paginationRange < totalPages; + var i = 1; + while (i <= totalPages && i <= paginationRange) { + var pageNumber = calculatePageNumber(i, currentPage, paginationRange, totalPages); + + var openingEllipsesNeeded = (i === 2 && (position === 'middle' || position === 'end')); + var closingEllipsesNeeded = (i === paginationRange - 1 && (position === 'middle' || position === 'start')); + if (ellipsesNeeded && (openingEllipsesNeeded || closingEllipsesNeeded)) { + pages.push('...'); + } else { + pages.push(pageNumber); + } + i ++; + } + return pages; + } + + /** + * Given the position in the sequence of pagination links [i], figure out what page number corresponds to that position. + * + * @param i + * @param currentPage + * @param paginationRange + * @param totalPages + * @returns {*} + */ + function calculatePageNumber(i, currentPage, paginationRange, totalPages) { + var halfWay = Math.ceil(paginationRange/2); + if (i === paginationRange) { + return totalPages; + } else if (i === 1) { + return i; + } else if (paginationRange < totalPages) { + if (totalPages - halfWay < currentPage) { + return totalPages - paginationRange + i; + } else if (halfWay < currentPage) { + return currentPage - halfWay + i; + } else { + return i; + } + } else { + return i; + } + } + } + + /** + * This filter slices the collection into pages based on the current page number and number of items per page. + * @param paginationService + * @returns {Function} + */ + function itemsPerPageFilter(paginationService) { + + return function(collection, itemsPerPage, paginationId) { + if (typeof (paginationId) === 'undefined') { + paginationId = DEFAULT_ID; + } + if (!paginationService.isRegistered(paginationId)) { + throw 'pagination directive: the itemsPerPage id argument (id: ' + paginationId + ') does not match a registered pagination-id.'; + } + var end; + var start; + if (angular.isObject(collection)) { + itemsPerPage = parseInt(itemsPerPage) || 9999999999; + if (paginationService.isAsyncMode(paginationId)) { + start = 0; + } else { + start = (paginationService.getCurrentPage(paginationId) - 1) * itemsPerPage; + } + end = start + itemsPerPage; + paginationService.setItemsPerPage(paginationId, itemsPerPage); + + if (collection instanceof Array) { + // the array just needs to be sliced + return collection.slice(start, end); + } else { + // in the case of an object, we need to get an array of keys, slice that, then map back to + // the original object. + var slicedObject = {}; + angular.forEach(keys(collection).slice(start, end), function(key) { + slicedObject[key] = collection[key]; + }); + return slicedObject; + } + } else { + return collection; + } + }; + } + + /** + * Shim for the Object.keys() method which does not exist in IE < 9 + * @param obj + * @returns {Array} + */ + function keys(obj) { + if (!Object.keys) { + var objKeys = []; + for (var i in obj) { + if (obj.hasOwnProperty(i)) { + objKeys.push(i); + } + } + return objKeys; + } else { + return Object.keys(obj); + } + } + + /** + * This service allows the various parts of the module to communicate and stay in sync. + */ + function paginationService() { + + var instances = {}; + var lastRegisteredInstance; + + this.registerInstance = function(instanceId) { + if (typeof instances[instanceId] === 'undefined') { + instances[instanceId] = { + asyncMode: false + }; + lastRegisteredInstance = instanceId; + } + }; + + this.deregisterInstance = function(instanceId) { + delete instances[instanceId]; + }; + + this.isRegistered = function(instanceId) { + return (typeof instances[instanceId] !== 'undefined'); + }; + + this.getLastInstanceId = function() { + return lastRegisteredInstance; + }; + + this.setCurrentPageParser = function(instanceId, val, scope) { + instances[instanceId].currentPageParser = val; + instances[instanceId].context = scope; + }; + this.setCurrentPage = function(instanceId, val) { + instances[instanceId].currentPageParser.assign(instances[instanceId].context, val); + }; + this.getCurrentPage = function(instanceId) { + var parser = instances[instanceId].currentPageParser; + return parser ? parser(instances[instanceId].context) : 1; + }; + + this.setItemsPerPage = function(instanceId, val) { + instances[instanceId].itemsPerPage = val; + }; + this.getItemsPerPage = function(instanceId) { + return instances[instanceId].itemsPerPage; + }; + + this.setCollectionLength = function(instanceId, val) { + instances[instanceId].collectionLength = val; + }; + this.getCollectionLength = function(instanceId) { + return instances[instanceId].collectionLength; + }; + + this.setAsyncModeTrue = function(instanceId) { + instances[instanceId].asyncMode = true; + }; + + this.setAsyncModeFalse = function(instanceId) { + instances[instanceId].asyncMode = false; + }; + + this.isAsyncMode = function(instanceId) { + return instances[instanceId].asyncMode; + }; + } + + /** + * This provider allows global configuration of the template path used by the dir-pagination-controls directive. + */ + function paginationTemplateProvider() { + + var templatePath = 'angularUtils.directives.dirPagination.template'; + var templateString; + + /** + * Set a templateUrl to be used by all instances of + * @param {String} path + */ + this.setPath = function(path) { + templatePath = path; + }; + + /** + * Set a string of HTML to be used as a template by all instances + * of . If both a path *and* a string have been set, + * the string takes precedence. + * @param {String} str + */ + this.setString = function(str) { + templateString = str; + }; + + this.$get = function() { + return { + getPath: function() { + return templatePath; + }, + getString: function() { + return templateString; + } + }; + }; + } +})(); diff --git a/src/main/webapp/login.html b/src/main/webapp/login.html index 2605ea84b..13df7801a 100644 --- a/src/main/webapp/login.html +++ b/src/main/webapp/login.html @@ -1,93 +1,144 @@ - - - CBoard | Starter - - - - - - - - + + +CBoard | Starter + + + + + + + + - - - + + + + + + + + - + + + - - - - - - - + + + + + + + diff --git a/src/main/webapp/org/cboard/controller/admin/userAdminCtrl.js b/src/main/webapp/org/cboard/controller/admin/userAdminCtrl.js index bce68ef3b..4c11cb3de 100644 --- a/src/main/webapp/org/cboard/controller/admin/userAdminCtrl.js +++ b/src/main/webapp/org/cboard/controller/admin/userAdminCtrl.js @@ -1,16 +1,28 @@ + + /** * Created by yfyuan on 2016/12/5. */ -cBoard.controller('userAdminCtrl', function ($scope, $http, ModalUtils, $filter) { +cBoard.controller('userAdminCtrl', function ($scope, $http, ModalUtils, $filter,$uibModal) { + + $scope.readyCB = function() { + }; + + $scope.choosenRole = {}; + $scope.role = {selected : ""}; var translate = $filter('translate'); $scope.optFlag; $scope.curUser; $scope.filterByRole = false; $scope.userKeyword = ''; - + $scope.dashboardData1 = []; $scope.tab = 'menu'; + //colorArray declared here + $scope.colorArray = ['#5d9fe6','#9fc173','#a789c7','#e88b8a','#f5d451','#ecb44d','#aee8f4','#7272af','#7c8798', + '#90c3c6','#bc7676','#8b9bc7','#c189ba','#bb8cf2']; + $http.get("admin/isAdmin.do").success(function (response) { $scope.isAdmin = response; }); @@ -78,59 +90,173 @@ cBoard.controller('userAdminCtrl', function ($scope, $http, ModalUtils, $filter) state: {disabled: true} }]; + $scope.boardListArr = []; + $scope.boardListInMultiselect = []; var getBoardList = function () { return $http.get("admin/getBoardList.do").success(function (response) { - _.each(buildNodeByCategory(_.filter(response, function (e) { - return e.categoryId; - }), 'Dashboard', 'board', 'fa fa-puzzle-piece'), function (e) { - $scope.tree.board.resList.push(e); - }) + $scope.boardList = response; + _.each(response, function (e) { + if(e.parentId != -1 ){ + $scope.boardListArr.push(e); + } + }); + _.each($scope.boardList, function (e) { + $scope.tree.board.resList.push({ + id: e.id, + text: translate(e.name), + resId: e.id, + type: 'board' + }); + }); + _.each($scope.tree.board.resList, function (f) { + if(f.id != 'Dashboard') + { + $scope.boardListInMultiselect.push(f); + } + }); }); }; + $scope.menuListArr = []; + $scope.menuListInMultiselect = []; var getMenuList = function () { return $http.get("admin/getMenuList.do").success(function (response) { $scope.menuList = response; _.each(response, function (e) { + if(e.parentId != -1 ){ + $scope.menuListArr.push(e); + } + }); + + _.each($scope.menuListArr, function (e) { $scope.tree.menu.resList.push({ - id: 'menu_' + e.menuId, - text: translate(e.menuName), + id: e.menuId, + text: translate(e.menuName), parent: e.parentId == -1 ? 'Menu' : ('menu_' + e.parentId), - resId: e.menuId, - type: 'menu', icon: 'fa fa-cog' + resId: e.menuId, + type: 'menu', icon: 'fa fa-cog' }); }); + + _.each($scope.tree.menu.resList, function (f) { + if(f.id != 'Menu') + { + $scope.menuListInMultiselect.push(f); + } + }); }); }; + $scope.datasourceListArr = []; + $scope.datasourceListInMultiselect = []; var getDatasourceList = function () { return $http.get("admin/getDatasourceList.do").success(function (response) { - _.each(buildNodeByCategory(response, 'Datasource', 'datasource', 'fa fa-database'), function (e) { - $scope.tree.datasource.resList.push(e); + $scope.dataSourceList = response; + _.each(response, function (e) { + if(e.parentId != -1 ){ + $scope.datasourceListArr.push(e); + } + }); + _.each($scope.dataSourceList, function (e) { + $scope.tree.datasource.resList.push({ + id: e.id, + text: translate(e.name), + resId: e.id, + type: 'datasource' + }); + }); + _.each($scope.tree.datasource.resList, function (f) { + if(f.id != 'Datasource') + { + $scope.datasourceListInMultiselect.push(f); + } }); }); }; + $scope.datasetListArr = []; + $scope.datasetListInMultiselect = []; var getDatasetList = function () { return $http.get("admin/getDatasetList.do").success(function (response) { - _.each(buildNodeByCategory(response, 'Dataset', 'dataset', 'fa fa-table'), function (e) { - $scope.tree.dataset.resList.push(e); + $scope.datasetList = response; + _.each(response, function (e) { + if(e.parentId != -1 ){ + $scope.datasetListArr.push(e); + } + }); + + _.each($scope.datasetList, function (e) { + $scope.tree.dataset.resList.push({ + id: e.id, + text: translate(e.name), + resId: e.id, + type: 'dataset' + }); + }); + + _.each($scope.tree.dataset.resList, function (f) { + if(f.id != 'Dataset') + { + $scope.datasetListInMultiselect.push(f); + } }); }); }; + $scope.widgetListArr = []; + $scope.widgetListInMultiselect = []; var getWidgetList = function () { return $http.get("admin/getWidgetList.do").success(function (response) { - _.each(buildNodeByCategory(response, 'Widget', 'widget', 'fa fa-line-chart'), function (e) { - $scope.tree.widget.resList.push(e); + $scope.widgetList = response; + _.each(response, function (e) { + if(e.parentId != -1 ){ + $scope.datasetListArr.push(e); + } + }); + + _.each($scope.widgetList, function (e) { + $scope.tree.widget.resList.push({ + id: e.id, + text: translate(e.name), + resId: e.id, + type: 'widget' + }); + }); + + _.each($scope.tree.widget.resList, function (f) { + if(f.id != 'Widget') + { + $scope.widgetListInMultiselect.push(f); + } }); }); }; + $scope.jobListArr = []; + $scope.jobListinMultiselect = []; var getJobList = function () { return $http.get("admin/getJobList.do").success(function (response) { - _.each(buildNodeByCategory(response, 'Job', 'job', 'fa fa-clock-o'), function (e) { - $scope.tree.job.resList.push(e); + $scope.jobList = response; + _.each(response, function (e) { + if(e.parentId != -1 ){ + $scope.jobListArr.push(e); + } + }); + + _.each($scope.jobList, function (e) { + $scope.tree.job.resList.push({ + id: e.id, + text: translate(e.name), + resId: e.id, + type: 'job' + }); + }); + + _.each($scope.tree.job.resList, function (f) { + if(f.id != 'Job') + { + $scope.jobListinMultiselect.push(f); + } }); }); }; @@ -266,31 +392,7 @@ cBoard.controller('userAdminCtrl', function ($scope, $http, ModalUtils, $filter) }).then(function () { return getJobList(); }).then(function () { - var config = { - core: { - multiple: true, - animation: true, - error: function (error) { - }, - check_callback: true, - worker: true - }, - checkbox: { - three_state: true - }, - contextmenu: { - items: getContextMenu, - select_node: false - }, - version: 1, - plugins: ['types', 'checkbox', 'unique', 'contextmenu'] - }; - var configMenu = angular.copy(config); - configMenu.checkbox.three_state = false; - delete configMenu.contextmenu; - configMenu.plugins = ['types', 'checkbox', 'unique']; - $scope.treeConfig = config; - $scope.treeMenuConfig = configMenu; + }); }(); @@ -345,24 +447,60 @@ cBoard.controller('userAdminCtrl', function ($scope, $http, ModalUtils, $filter) $scope.newUser = function () { $scope.optFlag = 'newUser'; $scope.curUser = {}; + $uibModal.open({ + templateUrl: 'org/cboard/view/admin/modal/newUser.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + scope: $scope, + controller: ('userAdminCtrl',function ($scope, $uibModalInstance) { + $scope.close = function () { + $uibModalInstance.close(); + }; + $scope.saveUser = function() { + saveUser(); + $uibModalInstance.close(); + } + }) + }); + }; + + $scope.reqRole = {}; + $scope.getRoleForParticularUser = function(userObj){ + $http.get("admin/getUserRoleList.do").success(function (response) { + $scope.userRoleList = response; + }); + $scope.userRoleList.forEach(function(element) { + if(element.userId == userObj.userId ){ + $scope.reqRole.roleId = element.roleId; + } + }); }; $scope.editUser = function (user) { $scope.optFlag = 'editUser'; $scope.curUser = angular.copy(user); - }; - - $scope.newRole = function () { - $scope.optFlag = 'newRole'; - $scope.curRole = {}; - }; + $uibModal.open({ + templateUrl: 'org/cboard/view/admin/modal/editUser.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + scope: $scope, + controller: ('userAdminCtrl',function ($scope, $uibModalInstance) { + $scope.close = function () { + $uibModalInstance.close(); + }; + $scope.saveUser = function() { + saveUser(); + $uibModalInstance.close(); + } + }) - $scope.editRole = function (role) { - $scope.optFlag = 'editRole'; - $scope.curRole = angular.copy(role); + }); }; - $scope.saveUser = function () { + var storeRolIdToUpdate; + var saveUser = function () { // if(!validate()){ // return; // } @@ -370,17 +508,49 @@ cBoard.controller('userAdminCtrl', function ($scope, $http, ModalUtils, $filter) $http.post("admin/saveNewUser.do", {user: angular.toJson($scope.curUser)}).success(function (serviceStatus) { if (serviceStatus == '1') { $scope.optFlag = 'none'; - getUserList(); + $http.get("admin/getUserList.do").success(function (response) { + $scope.userList = response; + var filterUserObj = $scope.userList.filter(function(data) { + if(data.loginName == $scope.curUser.loginName && data.userName == $scope.curUser.userName) { + return true; + } else { + return false; + } + }); + var reqUser = {}; + // to avoid duplicacy + if(filterUserObj instanceof Array) { + reqUser = filterUserObj[0]; + }else { + reqUser = filterUserObj; + } + reqUser.roleId = $scope.curUser.roleId; + grantRole(reqUser); + }); + $scope.verify = {dsName: true}; - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + getUserList(); + + var filterUserObj = $scope.userList.filter(function(data) { + if(data.loginName == $scope.curUser.loginName && data.userName == $scope.curUser.userName) { + return true; + } else { + return false; + } + }); } else { $scope.alerts = [{msg: serviceStatus.msg, type: 'danger'}]; } }); - } else { + } + else { $http.post("admin/updateUser.do", {user: angular.toJson($scope.curUser)}).success(function (serviceStatus) { if (serviceStatus == '1') { $scope.optFlag = 'none'; + var requser = {}; + requser.roleId = $scope.reqRole.roleId; + requser.userId = $scope.curUser.userId; + grantRole(requser); getUserList(); $scope.verify = {dsName: true}; ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); @@ -389,13 +559,51 @@ cBoard.controller('userAdminCtrl', function ($scope, $http, ModalUtils, $filter) } }); } + }; + $scope.newRole = function () { + $scope.optFlag = 'newRole'; + $scope.curRole = {}; + $uibModal.open({ + templateUrl: 'org/cboard/view/admin/modal/newRole.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + scope: $scope, + controller: ('userAdminCtrl',function ($scope, $uibModalInstance) { + $scope.close = function () { + $uibModalInstance.close(); + }; + $scope.saveRole = function() { + saveRole(); + $uibModalInstance.close(); + } + }) + }); }; - $scope.saveRole = function () { - // if(!validate()){ - // return; - // } + $scope.editRole = function (role) { + $scope.optFlag = 'editRole'; + $scope.curRole = angular.copy(role); + $uibModal.open({ + templateUrl: 'org/cboard/view/admin/modal/editRole.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + scope: $scope, + controller: ('userAdminCtrl',function ($scope, $uibModalInstance) { + $scope.close = function () { + $uibModalInstance.close(); + }; + $scope.saveRole = function() { + saveRole(); + $uibModalInstance.close(); + } + }) + }); + }; + + var saveRole = function () { if ($scope.optFlag == 'newRole') { $http.post("admin/saveRole.do", {role: angular.toJson($scope.curRole)}).success(function (serviceStatus) { if (serviceStatus == '1') { @@ -422,13 +630,9 @@ cBoard.controller('userAdminCtrl', function ($scope, $http, ModalUtils, $filter) }; - $scope.grantRole = function () { - var userIds = _.map($scope.selectUser, function (e) { - return e.userId; - }); - var roleIds = _.map($scope.selectRole, function (e) { - return e.roleId; - }); + var grantRole = function (userObj) { + var userIds = [userObj.userId]; + var roleIds = [userObj.roleId]; $http.post("admin/updateUserRole.do", { userIdArr: angular.toJson(userIds), roleIdArr: angular.toJson(roleIds) @@ -466,13 +670,55 @@ cBoard.controller('userAdminCtrl', function ($scope, $http, ModalUtils, $filter) }); }; - $scope.changeResSelect = function () { - changeResSelectByTree($scope.tree.menu); - changeResSelectByTree($scope.tree.board); - changeResSelectByTree($scope.tree.dataset); - changeResSelectByTree($scope.tree.datasource); - changeResSelectByTree($scope.tree.job); - changeResSelectByTree($scope.tree.widget); + $scope.resData = {}; + var roleIdSelected; + $scope.changeResSelect = function (roleId) { + roleIdSelected = roleId; + $scope.menuObj = {menuData : []}; + $scope.dashboardObj = {dashboardData : []}; + $scope.datasourceObj = {datasourceData : []}; + $scope.datasetObj = {datasetData : []}; + $scope.widgetObj = {widgetData : []}; + $scope.jobObj = {jobData : []}; + + $scope.roleResList.forEach(function(r){ + if(roleIdSelected == r.roleId ){ + if(r.resType == 'menu'){ + $scope.menuObj.menuData.push(r.resId); + } + if(r.resType == 'board'){ + $scope.dashboardObj.dashboardData.push(r.resId); + } + if(r.resType == 'datasource'){ + $scope.datasourceObj.datasourceData.push(r.resId); + } + if(r.resType == 'dataset'){ + $scope.datasetObj.datasetData.push(r.resId); + } + if(r.resType == 'widget'){ + $scope.widgetObj.widgetData.push(r.resId); + } + if(r.resType == 'job'){ + $scope.jobObj.jobData.push(r.resId); + } + } + }); + $uibModal.open({ + templateUrl: 'org/cboard/view/admin/modal/grantResource.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'md', + scope: $scope, + controller: ('userAdminCtrl',function ($scope, $uibModalInstance) { + $scope.close = function () { + $uibModalInstance.close(); + }; + $scope.grantRes = function() { + grantRes(); + $uibModalInstance.close(); + } + }) + }); }; var changeResSelectByTree = function (tree) { @@ -509,32 +755,86 @@ cBoard.controller('userAdminCtrl', function ($scope, $http, ModalUtils, $filter) } }; - $scope.grantRes = function () { - var roleIds = _.map($scope.selectRole, function (e) { - return e.roleId; - }); - var resIds = []; - for (var key in $scope.tree) { - _.each(_.filter($scope.tree[key].treeInstance.jstree(true).get_checked(true), function (e) { - return !_.isUndefined(e.original.resId); - }), function (e) { - resIds.push({ - resId: e.original.resId, - resType: e.original.type, - edit: e.original.edit, - delete: e.original.delete + $scope.menuObj = {menuData : []}; + $scope.dashboardObj = {dashboardData : []}; + $scope.datasourceObj = {datasourceData : []}; + $scope.datasetObj = {datasetData : []}; + $scope.widgetObj = {widgetData : []}; + $scope.jobObj = {jobData : []}; + $scope.roleObj = {roleData : []}; + var grantRes = function () { + var roleIds = []; + roleIds.push(roleIdSelected); + $scope.dataForSaveResource = []; + // for menu tab + if($scope.menuObj.menuData.length > 0) { + _.each($scope.menuObj.menuData, function (m) { + _.each($scope.menuListInMultiselect, function (r) { + if(m == r.resId){ + $scope.dataForSaveResource.push({"resId":r.resId,"resType":r.type}); + } + }); + }); + } + // for dashboard tab + if($scope.dashboardObj.dashboardData.length > 0) { + _.each($scope.dashboardObj.dashboardData, function (m) { + _.each($scope.boardListInMultiselect, function (r) { + if(m == r.resId){ + $scope.dataForSaveResource.push({"resId":r.resId,"resType":r.type}); + } + }); + }); + } + // for datasource tab + if($scope.datasourceObj.datasourceData.length > 0) { + _.each($scope.datasourceObj.datasourceData, function (m) { + _.each($scope.datasourceListInMultiselect, function (r) { + if(m == r.resId){ + $scope.dataForSaveResource.push({"resId":r.resId,"resType":r.type}); + } + }); + }); + } + // for dataset tab + if($scope.datasetObj.datasetData.length > 0) { + _.each($scope.datasetObj.datasetData, function (m) { + _.each($scope.datasetListInMultiselect, function (r) { + if(m == r.resId){ + $scope.dataForSaveResource.push({"resId":r.resId,"resType":r.type}); + } + }); + }); + } + // for widget tab + if($scope.widgetObj.widgetData.length > 0) { + _.each($scope.widgetObj.widgetData, function (m) { + _.each($scope.widgetListInMultiselect, function (r) { + if(m == r.resId){ + $scope.dataForSaveResource.push({"resId":r.resId,"resType":r.type}); + } + }); + }); + } + // for job tab + if($scope.jobObj.jobData.length > 0) { + _.each($scope.jobObj.jobData, function (m) { + _.each($scope.jobListinMultiselect, function (r) { + if(m == r.resId){ + $scope.dataForSaveResource.push({"resId":r.resId,"resType":r.type}); + } }); }); } $http.post("admin/updateRoleRes.do", { roleIdArr: angular.toJson(roleIds), - resIdArr: angular.toJson(resIds) + resIdArr: angular.toJson($scope.dataForSaveResource) }).success(function (serviceStatus) { if (serviceStatus == '1') { $scope.selectRole = null; $scope.selectRes = null; getRoleResList(); - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + ModalUtils.alert(translate('COMMON.SUCCESS'), 'modal-success', 'sm'); } else { $scope.alerts = [{msg: serviceStatus.msg, type: 'danger'}]; } @@ -542,17 +842,18 @@ cBoard.controller('userAdminCtrl', function ($scope, $http, ModalUtils, $filter) }; - $scope.deleteRole = function () { - ModalUtils.confirm(translate("COMMON.CONFIRM_DELETE"), "modal-info", "lg", function () { + $scope.deleteRole = function (roleObj) { + var roleName = roleObj.roleName; + ModalUtils.confirm(translate('COMMON.CONFIRM_DELETE')+roleName, 'modal-info', 'lg', function () { $http.post("admin/deleteRole.do", { - roleId: $scope.selectRole[0].roleId + roleId: roleObj.roleId }).success(function (serviceStatus) { if (serviceStatus == '1') { $scope.selectRole = null; $scope.selectRes = null; getRoleList(); getRoleResList(); - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + ModalUtils.alert(translate('COMMON.SUCCESS'), 'modal-success', 'sm'); } else { $scope.alerts = [{msg: serviceStatus.msg, type: 'danger'}]; } @@ -560,19 +861,53 @@ cBoard.controller('userAdminCtrl', function ($scope, $http, ModalUtils, $filter) }); } - $scope.deleteUser = function () { - ModalUtils.confirm(translate("COMMON.CONFIRM_DELETE"), "modal-info", "lg", function () { + $scope.deleteUser = function (userObj) { + var username=userObj.loginName; + ModalUtils.confirm(translate('COMMON.CONFIRM_DELETE')+username, 'modal-info', 'lg', function () { $http.post("admin/deleteUser.do", { - userId: $scope.selectUser[0].userId + userId: userObj.userId }).success(function (serviceStatus) { if (serviceStatus == '1') { $scope.selectUser = null; getUserList(); - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + ModalUtils.alert(translate('COMMON.SUCCESS'), 'modal-success', 'sm'); } else { $scope.alerts = [{msg: serviceStatus.msg, type: 'danger'}]; } }); }); } + /* + * Code for pagination + */ + + $scope.pageSize = 10; + $scope.currentPage = 1; + + var pageSizeArr = [5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100, 'ALL']; + $scope.pageSizeArr = pageSizeArr; + + + var changePageSizeForUser = function(pagesize) { + if($scope.pageSize == 'ALL') { + $scope.pageSize = $scope.userList.length; + } + else { + $scope.pageSize = pagesize; + } + } + $scope.changePageSizeForUser = changePageSizeForUser; + + + var changePageSizeForRole = function() { + if($scope.pageSize == 'ALL') { + $scope.pageSize = $scope.roleList.length; + } + else { + $scope.pageSize = pagesize; + } + } + + $scope.changePageSizeForRole = changePageSizeForRole; + }); \ No newline at end of file diff --git a/src/main/webapp/org/cboard/controller/cboard/cBoardCtrl.js b/src/main/webapp/org/cboard/controller/cboard/cBoardCtrl.js index 99041db20..b7581c26b 100644 --- a/src/main/webapp/org/cboard/controller/cboard/cBoardCtrl.js +++ b/src/main/webapp/org/cboard/controller/cboard/cBoardCtrl.js @@ -3,6 +3,11 @@ */ cBoard.controller('cBoardCtrl', function ($rootScope, $scope, $location, $http, $q, $filter, $uibModal, ModalUtils) { + $scope.colorArray = ['#5d9fe6','#9fc173','#a789c7','#e88b8a','#f5d451','#ecb44d','#aee8f4','#7272af','#7c8798', + '#90c3c6','#bc7676','#8b9bc7','#c189ba','#bb8cf2']; + + $scope.colorArrayLength = $scope.colorArray.length; + var translate = $filter('translate'); $rootScope.alert = function (msg) { @@ -78,4 +83,28 @@ cBoard.controller('cBoardCtrl', function ($rootScope, $scope, $location, $http, } }); } + + + + $scope.choosenTheme = "skin-white-light.css"; + window ["changeTheme"]('vintage'); + window ["changeTheme1"]('vintage'); + $scope.changeTheme = function (theme) { + if (theme == 0) { + $scope.choosenTheme = "skin-dark-black.css"; + window ["changeTheme"]('dark'); + window ["changeTheme1"]('dark'); + + } else if (theme == 1){ + $scope.choosenTheme = "skin-white-light.css"; + window ["changeTheme"]('vintage'); + window ["changeTheme1"]('vintage'); + } else if (theme == 2){ + $scope.choosenTheme = "skin-black-light.css"; + window ["changeTheme"]('dark'); + window ["changeTheme1"]('dark'); + } + $rootScope.refreshPreview(); + } + }); \ No newline at end of file diff --git a/src/main/webapp/org/cboard/controller/cboard/renderCtrl.js b/src/main/webapp/org/cboard/controller/cboard/renderCtrl.js index bec431bdd..7889cffa0 100644 --- a/src/main/webapp/org/cboard/controller/cboard/renderCtrl.js +++ b/src/main/webapp/org/cboard/controller/cboard/renderCtrl.js @@ -49,8 +49,8 @@ cBoard.controller('renderCtrl', function ($timeout, $rootScope, $scope, $state, onrendered: function (canvas) { result['img'] = canvas.toDataURL("image/jpeg"); var obj = { - persistId: $location.search().pid, - data: result + persistId: $location.search().pid, + data: result }; var xmlhttp = new XMLHttpRequest(); xmlhttp.open("POST", "commons/persist.do", false); diff --git a/src/main/webapp/org/cboard/controller/config/boardCtrl.js b/src/main/webapp/org/cboard/controller/config/boardCtrl.js index bb015d9af..1ed5aaf92 100644 --- a/src/main/webapp/org/cboard/controller/config/boardCtrl.js +++ b/src/main/webapp/org/cboard/controller/config/boardCtrl.js @@ -3,160 +3,167 @@ */ 'use strict'; cBoard.controller('boardCtrl', - function ($rootScope, $scope, $http, ModalUtils, $filter, updateService, $uibModal, - $timeout, dataService, $state, $window, $stateParams) { - var translate = $filter('translate'); - - $scope.optFlag = 'none'; - $scope.curBoard = {layout: {rows: []}}; - $scope.alerts = []; - $scope.verify = {boardName: true}; - $rootScope.freeLayout = false; - $scope.treeData = []; - - var treeID = "boardTreeID"; - var originalData = []; - var updateUrl = "dashboard/updateBoard.do"; - - var getBoardList = function () { - return $http.get("dashboard/getBoardList.do").success(function (response) { - $scope.boardList = response; - originalData = jstree_CvtVPath2TreeData( + function ($rootScope, $scope, $http, ModalUtils, $filter, updateService, $uibModal, + $timeout, dataService, $state, $window, $stateParams) { + var translate = $filter('translate'); + + $scope.optFlag = 'none'; + $scope.curBoard = {layout: {rows: []}}; + $scope.alerts = []; + $scope.verify = {boardName: true}; + $rootScope.freeLayout = false; + $scope.treeData = []; + $scope.hideList = true; + + $scope.colorArray = ['#5d9fe6','#9fc173','#a789c7','#e88b8a','#f5d451','#ecb44d','#aee8f4','#7272af','#7c8798', + '#90c3c6','#bc7676','#8b9bc7','#c189ba','#bb8cf2']; + + var treeID = "boardTreeID"; + var originalData = []; + var updateUrl = "dashboard/updateBoard.do"; + + var getBoardList = function () { + return $http.get('dashboard/getBoardList.do').success(function (response) { + $scope.boardList = response; + originalData = jstree_CvtVPath2TreeData( $scope.boardList.map(function (ds) { var categoryName = ds.categoryName == null ? translate('CONFIG.DASHBOARD.MY_DASHBOARD') : ds.categoryName; return { - "id": ds.id, - "name": ds.name, - "categoryName": categoryName + 'id': ds.id, + 'name': ds.name, + 'categoryName': categoryName }; }) - ); - jstree_ReloadTree(treeID, originalData); - }); - }; + ); + //ignoring the tree + //jstree_ReloadTree(treeID, originalData); + }); + }; - var getCategoryList = function () { - $http.get("dashboard/getCategoryList.do").success(function (response) { - $scope.categoryList = [{id: null, name: translate('CONFIG.DASHBOARD.MY_DASHBOARD')}]; - _.each(response, function (o) { - $scope.categoryList.push(o); - }); + var getCategoryList = function () { + $http.get("dashboard/getCategoryList.do").success(function (response) { + $scope.categoryList = [{id: null, name: translate('CONFIG.DASHBOARD.MY_DASHBOARD')}]; + _.each(response, function (o) { + $scope.categoryList.push(o); }); - }; - - var getDatasetList = function () { - $http.get("dashboard/getDatasetList.do") - .then(function (response) { - $scope.datasetList = response.data; - return $http.get("dashboard/getWidgetList.do"); - }) - .then(function (response) { - $scope.widgetList = response.data; - $scope.widgetList = $scope.widgetList.map(function (w) { - if (w.data.datasetId != null) { - var dataset = _.find($scope.datasetList, function (ds) { - return ds.id == w.data.datasetId; - }); - w.dataset = dataset == null ? 'Lost DataSet' : dataset.name; - } else { - w.dataset = "Query"; - } - return w; - }); - } - ); - }; - - var loadBoardDataset = function (status) { - var datasetIdArr = []; - var widgetArr = []; - _.each($scope.curBoard.layout.rows, function (row) { - _.each(row.widgets, function (widget) { - var w = _.find($scope.widgetList, function (w) { - return w.id == widget.widgetId + }); + }; + + var getDatasetList = function () { + $http.get("dashboard/getDatasetList.do") + .then(function (response) { + $scope.datasetList = response.data; + return $http.get("dashboard/getWidgetList.do"); + }) + .then(function (response) { + $scope.widgetList = response.data; + $scope.widgetList = $scope.widgetList.map(function (w) { + if (w.data.datasetId != null) { + var dataset = _.find($scope.datasetList, function (ds) { + return ds.id == w.data.datasetId; }); - if (w.data.datasetId) { - datasetIdArr.push(w.data.datasetId); - } else { - widgetArr.push(w); - } + w.dataset = dataset == null ? 'Lost DataSet' : dataset.name; + } else { + w.dataset = "Query"; + } + return w; + }); + } + ); + }; + + var loadBoardDataset = function (status) { + var datasetIdArr = []; + var widgetArr = []; + _.each($scope.curBoard.layout.rows, function (row) { + _.each(row.widgets, function (widget) { + var w = _.find($scope.widgetList, function (w) { + return w.id == widget.widgetId }); + if (w.data.datasetId) { + datasetIdArr.push(w.data.datasetId); + } else { + widgetArr.push(w); + } }); - datasetIdArr = _.union(datasetIdArr); - $scope.boardDataset = []; - _.each(datasetIdArr, function (d) { - status.i++; - dataService.getColumns({ - datasource: null, - query: null, - datasetId: d, - callback: function (dps) { - $scope.alerts = []; - if (dps.msg == "1") { - var dataset = _.find($scope.datasetList, function (ds) { - return ds.id == d; + }); + datasetIdArr = _.union(datasetIdArr); + $scope.boardDataset = []; + _.each(datasetIdArr, function (d) { + status.i++; + dataService.getColumns({ + datasource: null, + query: null, + datasetId: d, + callback: function (dps) { + $scope.alerts = []; + if (dps.msg == "1") { + var dataset = _.find($scope.datasetList, function (ds) { + return ds.id == d; + }); + if (dataset != undefined) { + $scope.boardDataset.push({ + name: dataset.name, + columns: dps.columns, + datasetId: dataset.id }); - if (dataset != undefined) { - $scope.boardDataset.push({ - name: dataset.name, - columns: dps.columns, - datasetId: dataset.id - }); - } - status.i--; - } else { - $scope.alerts = [{msg: dps.msg, type: 'danger'}]; } + status.i--; + } else { + $scope.alerts = [{msg: dps.msg, type: 'danger'}]; } - }); + } }); - _.each(widgetArr, function (w) { - status.i++; - dataService.getColumns({ - datasource: w.data.datasource, - query: w.data.query, - datasetId: null, - callback: function (dps) { - if (dps.msg == "1") { - $scope.boardDataset.push({name: w.name, columns: dps.columns, widgetId: w.id}); - status.i--; - } else { - $scope.alerts = [{msg: dps.msg, type: 'danger'}]; - } - + }); + _.each(widgetArr, function (w) { + status.i++; + dataService.getColumns({ + datasource: w.data.datasource, + query: w.data.query, + datasetId: null, + callback: function (dps) { + if (dps.msg == "1") { + $scope.boardDataset.push({name: w.name, columns: dps.columns, widgetId: w.id}); + status.i--; + } else { + $scope.alerts = [{msg: dps.msg, type: 'danger'}]; } - }); + + } }); - }; + }); + }; - var boardChange = function () { - $scope.verify = {boardName: true}; - $scope.$emit("boardChange"); - }; + var boardChange = function () { + $scope.verify = {boardName: true}; + $scope.$emit("boardChange"); + }; - var boardListPromise = getBoardList(); - getCategoryList(); - getDatasetList(); + var boardListPromise = getBoardList(); + getCategoryList(); + getDatasetList(); - $scope.newOperate = function () { - $('div.newBoard').toggleClass('hideOperate'); - }; + $scope.newOperate = function () { + $('div.newBoard').toggleClass('hideOperate'); + }; - $scope.newGridLayout = function () { - $rootScope.freeLayout = false; - $scope.optFlag = 'new'; - $scope.curBoard = {layout: {rows: []}}; - $('div.newBoard').addClass('hideOperate'); - }; + $scope.newGridLayout = function () { + $rootScope.freeLayout = false; + $scope.optFlag = 'new'; + $scope.curBoard = {layout: {rows: []}}; + $('div.newBoard').addClass('hideOperate'); + $scope.hideList = false; + }; - $scope.newCockpitLayout = function () { - $state.go("config.cockpit") - }; + $scope.newCockpitLayout = function () { + $state.go("config.cockpit") + }; - $scope.newTimelineLayout = function () { - $rootScope.freeLayout = false; - $scope.optFlag = 'new'; - $scope.curBoard = { + $scope.newTimelineLayout = function () { + $scope.hideList = false; + $rootScope.freeLayout = false; + $scope.optFlag = 'new'; + $scope.curBoard = { layout: { type: 'timeline', rows: [{ height: '', @@ -164,493 +171,541 @@ cBoard.controller('boardCtrl', type: 'param' }] } - }; - $('div.newBoard').addClass('hideOperate'); - }; - - $scope.newFreeLayout = function () { - $rootScope.freeLayout = true; - $('div.newBoard').addClass('hideOperate'); - }; - - $scope.editBoard = function (board) { - var b = angular.copy(board); - updateService.updateBoard(b); - $scope.curBoard = b; - $scope.optFlag = 'edit'; }; - - $scope.copyBoard = function (board) { - var o = angular.copy(board); - o.name = o.name + '_copy'; - $http.post("dashboard/saveNewBoard.do", {json: angular.toJson(o)}).success(saveBoardCallBack); - }; - - $scope.deleteBoard = function (board) { - ModalUtils.confirm(translate("COMMON.CONFIRM_DELETE"), "modal-warning", "lg", function () { - $http.post("dashboard/deleteBoard.do", {id: board.id}).success(function (serviceStatus) { - if (serviceStatus.status == '1') { - getBoardList(); - boardChange(); - ModalUtils.alert(serviceStatus.msg, "modal-success", "sm"); - } else { - ModalUtils.alert(serviceStatus.msg, "modal-warning", "lg"); - } - $scope.optFlag == 'none'; - }); + $('div.newBoard').addClass('hideOperate'); + }; + + $scope.newFreeLayout = function () { + $rootScope.freeLayout = true; + $('div.newBoard').addClass('hideOperate'); + }; + + $scope.editBoard = function (board) { + var b = angular.copy(board); + updateService.updateBoard(b); + $scope.curBoard = b; + $scope.optFlag = 'edit'; + }; + + $scope.copyBoard = function (board) { + var o = angular.copy(board); + o.name = o.name + '_copy'; + $http.post("dashboard/saveNewBoard.do", {json: angular.toJson(o)}).success(saveBoardCallBack); + }; + + $scope.deleteBoard = function (board) { + ModalUtils.confirm(translate('COMMON.CONFIRM_DELETE')+board.name, 'modal-warning', 'lg', function () { + $http.post('dashboard/deleteBoard.do', {id: board.id}).success(function (serviceStatus) { + if (serviceStatus.status == '1') { + getBoardList(); + boardChange(); + ModalUtils.alert(serviceStatus.msg, 'modal-success', 'sm'); + } else { + ModalUtils.alert(serviceStatus.msg, 'modal-warning', 'lg'); + } + $scope.optFlag == 'none'; }); - }; - - $scope.showInfo = function () { - if (!checkTreeNode("info")) return; - var content = getSelectedBoard(); - ModalUtils.info(content, "modal-info", "lg"); - }; - - $scope.widgetGroup = function (item) { - return item.categoryName; - }; - - $scope.addWidget = function (row) { - var w = {}; - w.name = translate('CONFIG.DASHBOARD.CHART_NAME'); - w.width = 12; - w.widgetId = $scope.widgetList[0].id; - row.widgets.push(w); - }; - - $scope.addRow = function () { - var row = {type: 'widget', widgets: []}; - $scope.curBoard.layout.rows.push(row); - return row; - }; - - $scope.addNode = function (node) { - $scope.curBoard.layout.rows.push({node: node, type: 'widget', widgets: []}); - }; - - $scope.addPramRow = function () { - $scope.curBoard.layout.rows.unshift({type: 'param', params: []}); - }; - - $scope.addRelations = function (widget) { - widget.relations = {}; - widget.relations.relations = []; - $scope.changeSourceCol(widget, widget.widgetId); - }; + }); + }; - $scope.delRelations = function (widget) { - if (widget.relations) { - delete widget.relations; - } - }; - - $scope.addExtenal = function (widget) { - widget.extenal = {}; - }; + $scope.cancelDiv = function () { + $rootScope.freeLayout = false; + $scope.optFlag = 'new'; + $scope.curBoard = {layout: {rows: []}}; + $('div.newBoard').addClass('hideOperate'); + $scope.hideList = true; + }; + + /* $scope.showInfo = function () { + if (!checkTreeNode('info')) return; + var content = getSelectedBoard(); + ModalUtils.info(content, 'modal-info', 'lg'); + };*/ + $scope.showInfo = function (selectedData) { + var content = selectedData; + ModalUtils.info(content, 'modal-info', 'lg'); + }; + + $scope.widgetGroup = function (item) { + return item.categoryName; + }; + + $scope.addWidget = function (row) { + var w = {}; + w.name = translate('CONFIG.DASHBOARD.CHART_NAME'); + w.width = 12; + w.widgetId = $scope.widgetList[0].id; + row.widgets.push(w); + }; + + $scope.addRow = function () { + var row = {type: 'widget', widgets: []}; + $scope.curBoard.layout.rows.push(row); + return row; + }; + + $scope.addNode = function (node) { + $scope.curBoard.layout.rows.push({node: node, type: 'widget', widgets: []}); + }; + + $scope.addPramRow = function () { + $scope.curBoard.layout.rows.unshift({type: 'param', params: []}); + }; + + $scope.addRelations = function (widget) { + widget.relations = {}; + widget.relations.relations = []; + $scope.changeSourceCol(widget, widget.widgetId); + }; + + $scope.delRelations = function (widget) { + if (widget.relations) { + delete widget.relations; + } + }; - $scope.delExtenal = function (widget) { - if (widget.extenal) { - delete widget.extenal; - } - }; + $scope.addExtenal = function (widget) { + widget.extenal = {}; + }; - var validate = function () { - $scope.alerts = []; - if (!$scope.curBoard.name) { - $scope.alerts = [{ - msg: translate('CONFIG.DASHBOARD.NAME') + translate('COMMON.NOT_EMPTY'), - type: 'danger' - }]; - $scope.verify = {boardName: false}; - $("#BoardName").focus(); - return false; - } - return true; - }; + $scope.delExtenal = function (widget) { + if (widget.extenal) { + delete widget.extenal; + } + }; - function saveBoardCallBack(serviceStatus) { - if (serviceStatus.status == '1') { - getBoardList(); - if (!$scope.curBoard.id) { - $scope.curBoard.id = serviceStatus.id; - } - $scope.optFlag = 'edit'; - ModalUtils.alert(serviceStatus.msg, "modal-success", "sm"); - boardChange(); - } else { - ModalUtils.alert(serviceStatus.msg, "modal-warning", "sm"); + var validate = function () { + $scope.alerts = []; + if (!$scope.curBoard.name) { + $scope.alerts = [{ + msg: translate('CONFIG.DASHBOARD.NAME') + translate('COMMON.NOT_EMPTY'), + type: 'danger' + }]; + $scope.verify = {boardName: false}; + $("#BoardName").focus(); + return false; + } + return true; + }; + + function saveBoardCallBack(serviceStatus) { + if (serviceStatus.status == '1') { + getBoardList(); + if (!$scope.curBoard.id) { + $scope.curBoard.id = serviceStatus.id; } + $scope.optFlag = 'edit'; + ModalUtils.alert(serviceStatus.msg, "modal-success", "sm"); + boardChange(); + } else { + ModalUtils.alert(serviceStatus.msg, "modal-warning", "sm"); } + } - $scope.checkBeforPreview = function (Id) { - $scope.isPreview = true; - if (!validate()) { - return; - } - ModalUtils.confirm(translate("COMMON.CONFIRM_SAVE_BEFORE_PREVIEW"), "modal-warning", "lg", function () { - $scope.saveBoard(false) - .then(function () { - if (!Id) { - Id = $scope.curBoard.id; - } - $state.go('mine.view', {id: Id}); - }); + $scope.checkBeforPreview = function (Id) { + $scope.isPreview = true; + if (!validate()) { + return; + } + ModalUtils.saveConfirm(translate('COMMON.CONFIRM_SAVE_BEFORE_PREVIEW'), 'modal-warning', 'lg', function () { + $scope.saveBoard(false) + .then(function () { + if (!Id) { + Id = $scope.curBoard.id; + } + $state.go('mine.view', {id: Id}); }); - }; - - $scope.saveBoard = function (notify) { - if (!validate()) { - return; - } - clearDirty(); - var callBack = saveBoardCallBack; - if (notify == false) { - callBack = function () { - }; - } - if ($scope.optFlag == 'new') { - return $http.post("dashboard/saveNewBoard.do", {json: angular.toJson($scope.curBoard)}).success(callBack); - } else if ($scope.optFlag == 'edit') { - return $http.post(updateUrl, {json: angular.toJson($scope.curBoard)}).success(callBack); - } - }; + }); + }; - var clearDirty = function () { - _.each($scope.curBoard.layout.rows, function (row) { - _.each(row.widgets, function (widget) { - delete widget.sourceId; - if (!_.isUndefined(widget.extenal)) { - if (!_.isUndefined(widget.extenal.name)) { - if(_.isEqual(widget.extenal.name.replace(/\s+/g,""), '')) { - delete widget.extenal.name; - } - } - } - if (!_.isUndefined(widget.relations)) { - delete widget.relations.sourceFields; - _.each(widget.relations.relations, function (relation) { - delete relation.targetFields; - }); + $scope.saveBoard = function (notify) { + if (!validate()) { + return; + } + clearDirty(); + var callBack = saveBoardCallBack; + if (notify == false) { + callBack = function () { + }; + } + if ($scope.optFlag == 'new') { + return $http.post("dashboard/saveNewBoard.do", {json: angular.toJson($scope.curBoard)}).success(callBack); + } else if ($scope.optFlag == 'edit') { + return $http.post(updateUrl, {json: angular.toJson($scope.curBoard)}).success(callBack); + } + }; + + var clearDirty = function () { + _.each($scope.curBoard.layout.rows, function (row) { + _.each(row.widgets, function (widget) { + delete widget.sourceId; + if (!_.isUndefined(widget.extenal)) { + if (!_.isUndefined(widget.extenal.name)) { + if(_.isEqual(widget.extenal.name.replace(/\s+/g,""), '')) { + delete widget.extenal.name; + } } - }); - }) - }; - - $scope.editParam = function (row, index) { - var status = {i: 0}; - loadBoardDataset(status); - var parent = $scope; - var ok; - var param; - if (_.isUndefined(index)) { - param = {col: []}; - ok = function (p) { - if (!row.params) { - row.params = []; + } + if (!_.isUndefined(widget.relations)) { + delete widget.relations.sourceFields; + _.each(widget.relations.relations, function (relation) { + delete relation.targetFields; + }); + } + }); + }) + }; + + $scope.editParam = function (row, index) { + var status = {i: 0}; + loadBoardDataset(status); + var parent = $scope; + var ok; + var param; + if (_.isUndefined(index)) { + param = {col: []}; + ok = function (p) { + if (!row.params) { + row.params = []; + } + row.params.push(p); + }; + } else { + param = angular.copy(row.params[index]); + ok = function (p) { + row.params[index] = p; + }; + } + $uibModal.open({ + templateUrl: 'org/cboard/view/config/board/modal/param.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + controller: function ($scope, $uibModalInstance) { + $scope.param_types = [ + {name: translate('CONFIG.DASHBOARD.PARAM_TYPE_SELECTOR'), value: 'selector'}, + {name: translate('CONFIG.DASHBOARD.PARAM_TYPE_SLIDER'), value: 'slider'} + ]; + $scope.status = status; + $scope.param = param; + if (!$scope.param.paramType) { + $scope.param.paramType = 'selector'; + } + $scope.boardDataset = parent.boardDataset; + $scope.add = function (selectedDataset, column) { + var v = angular.copy(selectedDataset); + delete v.columns; + v.column = column; + var paramCol = $scope.param.col; + var haveCol = null; + for (var i = 0; i < paramCol.length; i++) { + (paramCol[i].column == v.column && paramCol[i].name == v.name) ? haveCol = true : null; } - row.params.push(p); + (!haveCol || $scope.param.col == []) ? $scope.param.col.push(v) : null; }; - } else { - param = angular.copy(row.params[index]); - ok = function (p) { - row.params[index] = p; + $scope.close = function () { + $uibModalInstance.close(); }; - } - $uibModal.open({ - templateUrl: 'org/cboard/view/config/board/modal/param.html', - windowTemplateUrl: 'org/cboard/view/util/modal/window.html', - backdrop: false, - size: 'lg', - controller: function ($scope, $uibModalInstance) { - $scope.param_types = [ - {name: translate('CONFIG.DASHBOARD.PARAM_TYPE_SELECTOR'), value: 'selector'}, - {name: translate('CONFIG.DASHBOARD.PARAM_TYPE_SLIDER'), value: 'slider'} - ]; - $scope.status = status; - $scope.param = param; - if (!$scope.param.paramType) { - $scope.param.paramType = 'selector'; - } - $scope.boardDataset = parent.boardDataset; - $scope.add = function (selectedDataset, column) { - var v = angular.copy(selectedDataset); - delete v.columns; - v.column = column; - var paramCol = $scope.param.col; - var haveCol = null; - for (var i = 0; i < paramCol.length; i++) { - (paramCol[i].column == v.column && paramCol[i].name == v.name) ? haveCol = true : null; + $scope.deleteSelected = function (index) { + var select = $scope.param.col[index].column; + var nodes = $('.cube>span'); + for (var i = 0; i < nodes.length; i++) { + if (($(nodes[i]))[0].innerText == select) { + $(nodes[i]).removeClass('itemSelected'); } - (!haveCol || $scope.param.col == []) ? $scope.param.col.push(v) : null; - }; - $scope.close = function () { + } + $scope.param.col.splice(index, 1); + }; + $scope.ok = function () { + if ($scope.param.name) { + ok($scope.param); $uibModalInstance.close(); - }; - $scope.deleteSelected = function (index) { - var select = $scope.param.col[index].column; - var nodes = $('.cube>span'); - for (var i = 0; i < nodes.length; i++) { - if (($(nodes[i]))[0].innerText == select) { - $(nodes[i]).removeClass('itemSelected'); - } - } - $scope.param.col.splice(index, 1); - }; - $scope.ok = function () { - if ($scope.param.name) { - ok($scope.param); - $uibModalInstance.close(); + } else { + ModalUtils.alert(translate('CONFIG.DASHBOARD.ENTER_PARAMETER_NAME'), "modal-warning", "lg"); + } + }; + $scope.foldCube = function (cube, e) { + var node = (e.target.localName == 'img') ? e.target.parentNode.parentNode : e.target.parentNode; + var imgNode = node.getElementsByTagName("img"); + if (e.target.className == "cubeName ng-binding" || e.target.localName == 'img') { + if (node.style.height == "25px" || node.style.height == "") { + node.style.height = 25 * (cube.columns.length + 1) + "px"; + imgNode[0].style.webkitTransform = "rotate(90deg)"; } else { - ModalUtils.alert(translate('CONFIG.DASHBOARD.ENTER_PARAMETER_NAME'), "modal-warning", "lg"); + node.style.height = "25px"; + imgNode[0].style.webkitTransform = "rotate(0deg)"; } - }; - $scope.foldCube = function (cube, e) { - var node = (e.target.localName == 'img') ? e.target.parentNode.parentNode : e.target.parentNode; - var imgNode = node.getElementsByTagName("img"); - if (e.target.className == "cubeName ng-binding" || e.target.localName == 'img') { - if (node.style.height == "25px" || node.style.height == "") { - node.style.height = 25 * (cube.columns.length + 1) + "px"; - imgNode[0].style.webkitTransform = "rotate(90deg)"; - } else { - node.style.height = "25px"; - imgNode[0].style.webkitTransform = "rotate(0deg)"; + } else if ($(e.target)[0].localName == 'span') { + $(e.target).addClass('itemSelected'); + } + $scope.param.col.map(function (d) { + var columnSelect = d.column; + var cubeName = d.name; + var nodeList = $('.cube>span'); + for (var i = 0; i < nodeList.length; i++) { + var name = nodeList[i].parentNode.firstElementChild.innerText; + if (($(nodeList[i]))[0].innerText == columnSelect && cubeName == name) { + $(nodeList[i]).addClass('itemSelected'); } - } else if ($(e.target)[0].localName == 'span') { - $(e.target).addClass('itemSelected'); } - $scope.param.col.map(function (d) { - var columnSelect = d.column; - var cubeName = d.name; - var nodeList = $('.cube>span'); - for (var i = 0; i < nodeList.length; i++) { - var name = nodeList[i].parentNode.firstElementChild.innerText; - if (($(nodeList[i]))[0].innerText == columnSelect && cubeName == name) { - $(nodeList[i]).addClass('itemSelected'); - } - } - }); - }; - } - }); - }; - - - /** js tree related start **/ - $scope.treeConfig = angular.copy(jsTreeConfig1); - $scope.treeConfig.plugins = ['types', 'unique', 'state', 'sort']; - - $("#" + treeID).keyup(function (e) { - if (e.keyCode == 46) { - $scope.deleteBoard(getSelectedBoard()); + }); + }; } }); + }; - var getSelectedBoard = function () { - var selectedNode = jstree_GetSelectedNodes(treeID)[0]; - return _.find($scope.boardList, function (ds) { - return ds.id == selectedNode.id; - }); - }; - - var checkTreeNode = function (actionType) { - return jstree_CheckTreeNode(actionType, treeID, ModalUtils.alert); - }; - - var switchNode = function (id) { - $scope.ignoreChanges = false; - var dataSetTree = jstree_GetWholeTree(treeID); - dataSetTree.deselect_all(); - dataSetTree.select_node(id); - }; - $scope.applyModelChanges = function () { - return !$scope.ignoreChanges; - }; + /** js tree related start **/ + $scope.treeConfig = angular.copy(jsTreeConfig1); + $scope.treeConfig.plugins = ['types', 'unique', 'state', 'sort']; - $scope.copyNode = function () { - if (!checkTreeNode("copy")) return; - $scope.copyBoard(getSelectedBoard()); - }; - - $scope.editNode = function () { - if (!checkTreeNode("edit")) return; - $scope.editBoard(getSelectedBoard()); - var selectedNode = jstree_GetSelectedNodes(treeID)[0]; - if ($scope.curBoard.layout.type == 'cockpit') { - $state.go('config.cockpit', {boardId: selectedNode.id}); - } else { - $state.go('config.board', {boardId: selectedNode.id}, {notify: false}); - } - }; - - $scope.deleteNode = function () { - if (!checkTreeNode("delete")) return; + $("#" + treeID).keyup(function (e) { + if (e.keyCode == 46) { $scope.deleteBoard(getSelectedBoard()); - }; + } + }); - $scope.treeEventsObj = function () { - var baseEventObj = jstree_baseTreeEventsObj({ - ngScope: $scope, ngHttp: $http, ngTimeout: $timeout, ModalUtils: ModalUtils, - treeID: treeID, listName: "boardList" + var getSelectedBoard = function () { + var selectedNode = jstree_GetSelectedNodes(treeID)[0]; + return _.find($scope.boardList, function (ds) { + return ds.id == selectedNode.id; + }); + }; + + var checkTreeNode = function (actionType) { + return jstree_CheckTreeNode(actionType, treeID, ModalUtils.alert); + }; + + var switchNode = function (id) { + $scope.ignoreChanges = false; + var dataSetTree = jstree_GetWholeTree(treeID); + dataSetTree.deselect_all(); + dataSetTree.select_node(id); + }; + + $scope.applyModelChanges = function () { + return !$scope.ignoreChanges; + }; + + /*$scope.copyNode = function () { + if (!checkTreeNode('copy')) return; + $scope.copyBoard(getSelectedBoard()); + };*/ + $scope.copyNode = function (selectedData) { + $scope.copyBoard(selectedData); + }; + + /*$scope.editNode = function () { + if (!checkTreeNode('edit')) return; + $scope.editBoard(getSelectedBoard()); + var selectedNode = jstree_GetSelectedNodes(treeID)[0]; + $state.go('config.board', {boardId: selectedNode.id}, {notify: false}); + };*/ + + $scope.editNode = function (selectedData) { + $scope.hideList = false; + $scope.editBoard(selectedData); + var selectedNode = jstree_GetSelectedNodes(treeID)[0]; + if ($scope.curBoard.layout.type == 'cockpit') { + $state.go('config.cockpit', {boardId: selectedNode.id}); + } else { + $state.go('config.board', {boardId: selectedNode.id}, {notify: false}); + } + $scope.cancelDiv(); + + }; + + /*$scope.deleteNode = function () { + if (!checkTreeNode('delete')) return; + $scope.deleteBoard(getSelectedBoard()); + };*/ + $scope.deleteNode = function (selectedData) { + $scope.deleteBoard(selectedData); + }; + + $scope.treeEventsObj = function () { + var baseEventObj = jstree_baseTreeEventsObj({ + ngScope: $scope, ngHttp: $http, ngTimeout: $timeout, ModalUtils: ModalUtils, + treeID: treeID, listName: "boardList" //, updateUrl: updateUrl - }); - return baseEventObj; - }(); - /** js tree related start **/ + }); + return baseEventObj; + }(); + /** js tree related start **/ - $scope.changeTargetCol = function (e, widgetId, index, row) { - if (!e.relations) { - return; - } - var w = _.find($scope.widgetList, function (w) { - return w.id == widgetId; - }); - if (!w) { - return; - } - var dataSet = _.find($scope.datasetList, function (e) { - return w.data.datasetId === e.id; - }); - var cols = []; - _.each(dataSet.data.schema.dimension, function (e) { - if (e.type == "column") { + $scope.changeTargetCol = function (e, widgetId, index, row) { + if (!e.relations) { + return; + } + var w = _.find($scope.widgetList, function (w) { + return w.id == widgetId; + }); + if (!w) { + return; + } + var dataSet = _.find($scope.datasetList, function (e) { + return w.data.datasetId === e.id; + }); + var cols = []; + _.each(dataSet.data.schema.dimension, function (e) { + if (e.type == "column") { + if ($.inArray(e, cols) == -1) { + cols.push(e.column); + } + } else if (e.type == "level") { + _.each(e.columns, function (e) { if ($.inArray(e, cols) == -1) { cols.push(e.column); } - } else if (e.type == "level") { - _.each(e.columns, function (e) { - if ($.inArray(e, cols) == -1) { - cols.push(e.column); - } - }); - } - }); - e.relations.relations[index].targetFields = cols; - if (cols.length == 0) { - dataService.getColumns({ - datasource: null, - query: null, - datasetId: w.data.datasetId, - callback: function (dps) { - $scope.alerts = []; - if (dps.msg == "1") { - e.relations.relations[index].targetFields = dps.columns; - } else { - $scope.alerts = [{msg: dps.msg, type: 'danger'}]; - } - } }); } - - //add target widget - var flattenWgts = []; - _.each($scope.curBoard.layout.rows, function (row) { - flattenWgts = flattenWgts.concat(row.widgets); - }); - if (_.where(flattenWgts, {"widgetId": widgetId}).length > 0 || _.isUndefined(row)) { - return; - } - e.relations.relations[index].targetField = []; - var w = {}; - w.name = _.find($scope.widgetList, function (e) { - return e.id === widgetId - }).name; - w.width = 12; - w.widgetId = widgetId; - w.sourceId = e.widgetId; - w.index = index; - row.widgets = _.filter(row.widgets, function (e) { - return e.sourceId !== w.sourceId || e.index !== index; - }); - row.widgets.push(w); - }; - - $scope.changeSourceCol = function (e, widgetId) { - if (!e.relations) { - return; - } - //源表字段默认为原表的group key指定字段 - $http.get("dashboard/dashboardWidget.do?id=" + e.widgetId).then(function (response) { - if (!response) { - return false; - } - var config = response.data.data.config; - var fields = []; - _.each(config.groups, function (e) { - fields.push(e.col); - }); - _.each(config.keys, function (e) { - fields.push(e.col); - }); - if (!e.relations.sourceField || e.relations.sourceField.length <= 0) { - e.relations.sourceField = fields; + }); + e.relations.relations[index].targetFields = cols; + if (cols.length == 0) { + dataService.getColumns({ + datasource: null, + query: null, + datasetId: w.data.datasetId, + callback: function (dps) { + $scope.alerts = []; + if (dps.msg == "1") { + e.relations.relations[index].targetFields = dps.columns; + } else { + $scope.alerts = [{msg: dps.msg, type: 'danger'}]; + } } - e.relations.sourceFields = fields; }); - }; + } - $scope.changeTargetParam = function (e, boardId, index) { - if (!e.relations) { - return; + //add target widget + var flattenWgts = []; + _.each($scope.curBoard.layout.rows, function (row) { + flattenWgts = flattenWgts.concat(row.widgets); + }); + if (_.where(flattenWgts, {"widgetId": widgetId}).length > 0 || _.isUndefined(row)) { + return; + } + e.relations.relations[index].targetField = []; + var w = {}; + w.name = _.find($scope.widgetList, function (e) { + return e.id === widgetId + }).name; + w.width = 12; + w.widgetId = widgetId; + w.sourceId = e.widgetId; + w.index = index; + row.widgets = _.filter(row.widgets, function (e) { + return e.sourceId !== w.sourceId || e.index !== index; + }); + row.widgets.push(w); + }; + + $scope.changeSourceCol = function (e, widgetId) { + if (!e.relations) { + return; + } + //源表字段默认为原表的group key指定字段 + $http.get("dashboard/dashboardWidget.do?id=" + e.widgetId).then(function (response) { + if (!response) { + return false; } - var w = _.find($scope.boardList, function (w) { - return w.id == boardId; + var config = response.data.data.config; + var fields = []; + _.each(config.groups, function (e) { + fields.push(e.col); + }); + _.each(config.keys, function (e) { + fields.push(e.col); }); - if (!w) { - return; + if (!e.relations.sourceField || e.relations.sourceField.length <= 0) { + e.relations.sourceField = fields; } - var cols = []; - _.each(w.layout.rows, function (row) { - if (row.type == "param") { - _.each(row.params, function (param) { - _.each(param.col, function (col) { - if ($.inArray(param.name, cols) == -1) { - cols.push(param.name); //col.column+"("+col.datasetId+")" - } - }); + e.relations.sourceFields = fields; + }); + }; + + $scope.changeTargetParam = function (e, boardId, index) { + if (!e.relations) { + return; + } + var w = _.find($scope.boardList, function (w) { + return w.id == boardId; + }); + if (!w) { + return; + } + var cols = []; + _.each(w.layout.rows, function (row) { + if (row.type == "param") { + _.each(row.params, function (param) { + _.each(param.col, function (col) { + if ($.inArray(param.name, cols) == -1) { + cols.push(param.name); //col.column+"("+col.datasetId+")" + } }); - } + }); + } + }); + //e.relations.relations[index].targetField = []; + e.relations.relations[index].targetFields = cols; + + }; + + $scope.addWidgetRelation = function (widget) { + widget.relations.relations.push({"type": "widget"}); + $('div.newRelation').addClass('hideOperate'); + }; + + $scope.addBoardRelation = function (widget) { + widget.relations.relations.push({"type": "board"}); + $('div.newRelation').addClass('hideOperate'); + }; + + $scope.changeActive = function (rowIndex, widgetIndex, index) { + var prefixId = rowIndex + "_" + widgetIndex + "_"; + var list = $('li[id^=' + prefixId + '].active'); + if (list.length > 0 && list[0].id.split("_")[2] != index) { + return; + } + if (index - 1 < 0) { + index = 0; + } else { + index = index - 1; + } + $("#" + prefixId + index + "_" + "tab").addClass('active'); + $("#" + prefixId + index + "_" + "content").addClass('active'); + }; + + var paramBoardId = $stateParams.boardId; + if (paramBoardId) { + boardListPromise.then(function () { + var board = _.find($scope.boardList, function (ds) { + return ds.id == paramBoardId; }); - //e.relations.relations[index].targetField = []; - e.relations.relations[index].targetFields = cols; + if (board) { + $scope.editBoard(board) + } + }); + } - }; + /* + * Code for pagination + */ - $scope.addWidgetRelation = function (widget) { - widget.relations.relations.push({"type": "widget"}); - $('div.newRelation').addClass('hideOperate'); - }; + $scope.pageSize = 10; + $scope.currentPage = 1; - $scope.addBoardRelation = function (widget) { - widget.relations.relations.push({"type": "board"}); - $('div.newRelation').addClass('hideOperate'); - }; + var pageSizeArr = [5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100, 'ALL']; + $scope.pageSizeArr = pageSizeArr; + var changePageSize = function(pagesize) { + if($scope.pageSize == 'ALL') { + $scope.pageSize = $scope.boardList.length; + } + else { + $scope.pageSize = pagesize; + } + } + $scope.changePageSize = changePageSize; - $scope.changeActive = function (rowIndex, widgetIndex, index) { - var prefixId = rowIndex + "_" + widgetIndex + "_"; - var list = $('li[id^=' + prefixId + '].active'); - if (list.length > 0 && list[0].id.split("_")[2] != index) { - return; - } - if (index - 1 < 0) { - index = 0; - } else { - index = index - 1; - } - $("#" + prefixId + index + "_" + "tab").addClass('active'); - $("#" + prefixId + index + "_" + "content").addClass('active'); - }; - var paramBoardId = $stateParams.boardId; - if (paramBoardId) { - boardListPromise.then(function () { - var board = _.find($scope.boardList, function (ds) { - return ds.id == paramBoardId; - }); - if (board) { - $scope.editBoard(board) - } - }); - } - }); +}); diff --git a/src/main/webapp/org/cboard/controller/config/categoryCtrl.js b/src/main/webapp/org/cboard/controller/config/categoryCtrl.js index 659e56fbb..988a12257 100644 --- a/src/main/webapp/org/cboard/controller/config/categoryCtrl.js +++ b/src/main/webapp/org/cboard/controller/config/categoryCtrl.js @@ -1,13 +1,15 @@ /** * Created by yfyuan on 2016/8/29. */ -cBoard.controller('categoryCtrl', function ($scope, $http, ModalUtils, $filter) { +cBoard.controller('categoryCtrl', function ($scope, $http, ModalUtils, $filter,$uibModal) { var translate = $filter('translate'); $scope.optFlag = 'none'; $scope.categoryList = {}; $scope.alerts = []; $scope.verify = {categoryName:true}; + $scope.colorArray = ['#5d9fe6','#9fc173','#a789c7','#e88b8a','#f5d451','#ecb44d','#aee8f4','#7272af','#7c8798', + '#90c3c6','#bc7676','#8b9bc7','#c189ba','#bb8cf2']; var getCategoryList = function () { $http.get("dashboard/getCategoryList.do").success(function (response) { @@ -25,13 +27,47 @@ cBoard.controller('categoryCtrl', function ($scope, $http, ModalUtils, $filter) $scope.newBordCategory = function () { $scope.optFlag = 'new'; $scope.curCategory = {}; + $uibModal.open({ + templateUrl: 'org/cboard/view/config/dashBoardCategory/new.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + scope: $scope, + controller: ('categoryCtrl',function ($scope, $uibModalInstance) { + $scope.close = function () { + $uibModalInstance.close(); + }; + $scope.save = function() { + save(); + $uibModalInstance.close(); + } + }) + + }); }; $scope.editBordCategory = function (ds) { $scope.optFlag = 'edit'; $scope.curCategory = angular.copy(ds); + $uibModal.open({ + templateUrl: 'org/cboard/view/config/dashBoardCategory/edit.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + scope: $scope, + controller: ('categoryCtrl',function ($scope, $uibModalInstance) { + $scope.close = function () { + $uibModalInstance.close(); + }; + $scope.save = function() { + save(); + $uibModalInstance.close(); + } + }) + + }); }; $scope.deleteBordCategory = function (ds) { - ModalUtils.confirm(translate("COMMON.CONFIRM_DELETE"), "modal-warning", "lg", function () { + ModalUtils.confirm(translate('COMMON.CONFIRM_DELETE')+ds.name, 'modal-warning', 'lg', function () { $http.post("dashboard/deleteCategory.do", {id: ds.id}).success(function () { $scope.optFlag = 'none'; getCategoryList(); @@ -51,7 +87,7 @@ cBoard.controller('categoryCtrl', function ($scope, $http, ModalUtils, $filter) return true; } - $scope.save = function () { + var save = function () { if(!validate()){ return; } @@ -81,4 +117,23 @@ cBoard.controller('categoryCtrl', function ($scope, $http, ModalUtils, $filter) }; + /* + * Code for pagination + */ + $scope.pageSize = 10; + $scope.currentPage = 1; + + var pageSizeArr = [5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100, 'ALL']; + $scope.pageSizeArr = pageSizeArr; + var changePageSize = function(pagesize) { + if($scope.pageSize == 'ALL') { + $scope.pageSize = $scope.categoryList.length; + } + else { + $scope.pageSize = pagesize; + } + } + $scope.changePageSize = changePageSize; + + }); \ No newline at end of file diff --git a/src/main/webapp/org/cboard/controller/config/cockpitLayoutCtrl.js b/src/main/webapp/org/cboard/controller/config/cockpitLayoutCtrl.js index 78927304e..23b0d67a8 100644 --- a/src/main/webapp/org/cboard/controller/config/cockpitLayoutCtrl.js +++ b/src/main/webapp/org/cboard/controller/config/cockpitLayoutCtrl.js @@ -193,11 +193,11 @@ cBoard.controller('cockpitLayoutCtrl', function ($stateParams, $state, chartServ vm._data.cockpitChartData = cockpitChartData; cockpitChartDataJSON[domId] = cockpitChartData; var cockpitComponent = { - domId: domId, - componentName: dom.componentName, - componentType: dom.type, - chartData: cockpitChartData, - widgetId: dom.widgetId + domId: domId, + componentName: dom.componentName, + componentType: dom.type, + chartData: cockpitChartData, + widgetId: dom.widgetId }; if (!vm._data.viewType) { @@ -275,16 +275,16 @@ cBoard.controller('cockpitLayoutCtrl', function ($stateParams, $state, chartServ var widgets = layout.rows[i].widgets; for (var j = 0; j < widgets.length; j++) { var componentDom = { - type: "chart", - componentName: "hex-cockpit-chart", - widgetId: widgets[j].widgetId, - chartWidth: widgets[j].chartWidth, - chartHeight: widgets[j].chartHeight, - bgColor: widgets[j].bgColor, - positionX: widgets[j].positionX, - positionY: widgets[j].positionY, - domId: widgets[j].domId, - border: widgets[j].border + type: "chart", + componentName: "hex-cockpit-chart", + widgetId: widgets[j].widgetId, + chartWidth: widgets[j].chartWidth, + chartHeight: widgets[j].chartHeight, + bgColor: widgets[j].bgColor, + positionX: widgets[j].positionX, + positionY: widgets[j].positionY, + domId: widgets[j].domId, + border: widgets[j].border }; hexCockpit.componentDom = componentDom; vm.drop(); @@ -293,16 +293,16 @@ cBoard.controller('cockpitLayoutCtrl', function ($stateParams, $state, chartServ var others = layout.rows[i].others; for (var j = 0; j < others.length; j++) { var componentDom = { - type: others[j].type, - componentName: "hex-cockpit-" + others[j].type, - chartWidth: others[j].chartWidth, - chartHeight: others[j].chartHeight, - positionX: others[j].positionX, - positionY: others[j].positionY, - chartStyle: others[j].chartStyle, - cockpitConfChartCSS: others[j].cockpitConfChartCSS, - jsonData: others[j].jsonData, - domId: others[j].domId + type: others[j].type, + componentName: "hex-cockpit-" + others[j].type, + chartWidth: others[j].chartWidth, + chartHeight: others[j].chartHeight, + positionX: others[j].positionX, + positionY: others[j].positionY, + chartStyle: others[j].chartStyle, + cockpitConfChartCSS: others[j].cockpitConfChartCSS, + jsonData: others[j].jsonData, + domId: others[j].domId }; hexCockpit.componentDom = componentDom; vm.drop(); @@ -339,10 +339,10 @@ cBoard.controller('cockpitLayoutCtrl', function ($stateParams, $state, chartServ //数据封装 var json = { - name: hexCockpitInfo.cockpitConf.viewName, - layout: {rows: [], type: "cockpit"}, - categoryId: hexCockpitInfo.cockpitConf.categoryId, - id: $stateParams.boardId ? $stateParams.boardId : "" + name: hexCockpitInfo.cockpitConf.viewName, + layout: {rows: [], type: "cockpit"}, + categoryId: hexCockpitInfo.cockpitConf.categoryId, + id: $stateParams.boardId ? $stateParams.boardId : "" }; json.layout.cockpitConf = hexCockpitInfo.cockpitConf; json.layout.rows.push({ @@ -493,41 +493,41 @@ cBoard.controller('cockpitLayoutCtrl', function ($stateParams, $state, chartServ //初始化拖拽 function initDrag(domId) { interact('#' + domId) - .draggable({ - onmove: dragMoveListener, - restrict: { - restriction: 'parent', - elementRect: {top: 0, left: 0, bottom: 1, right: 1} - }, - }) - .resizable({ - edges: {left: true, right: true, bottom: true, top: true}, - restrictEdges: {outer: 'parent', endOnly: true}, - restrictSize: { - min: {width: 0, height: 0} - }, - inertia: true, - }) - .on('resizemove', function (event) { - var target = event.target, - x = (parseFloat(target.getAttribute('data-x')) || 0), - y = (parseFloat(target.getAttribute('data-y')) || 0); - - target.style.width = event.rect.width + 'px'; - target.style.height = event.rect.height + 'px'; - x += event.deltaRect.left; - y += event.deltaRect.top; - target.style.webkitTransform = target.style.transform = 'translate(' + x + 'px,' + y + 'px)'; - target.setAttribute('data-x', x); - target.setAttribute('data-y', y); - var domId = target.getAttribute('id'); - domPosition(domId); - }); + .draggable({ + onmove: dragMoveListener, + restrict: { + restriction: 'parent', + elementRect: {top: 0, left: 0, bottom: 1, right: 1} + }, + }) + .resizable({ + edges: {left: true, right: true, bottom: true, top: true}, + restrictEdges: {outer: 'parent', endOnly: true}, + restrictSize: { + min: {width: 0, height: 0} + }, + inertia: true, + }) + .on('resizemove', function (event) { + var target = event.target, + x = (parseFloat(target.getAttribute('data-x')) || 0), + y = (parseFloat(target.getAttribute('data-y')) || 0); + + target.style.width = event.rect.width + 'px'; + target.style.height = event.rect.height + 'px'; + x += event.deltaRect.left; + y += event.deltaRect.top; + target.style.webkitTransform = target.style.transform = 'translate(' + x + 'px,' + y + 'px)'; + target.setAttribute('data-x', x); + target.setAttribute('data-y', y); + var domId = target.getAttribute('id'); + domPosition(domId); + }); function dragMoveListener(event) { var target = event.target, - x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx, - y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy; + x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx, + y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy; target.style.webkitTransform = target.style.transform = diff --git a/src/main/webapp/org/cboard/controller/config/datasetCtrl.js b/src/main/webapp/org/cboard/controller/config/datasetCtrl.js index ac93ba91c..dd745e930 100644 --- a/src/main/webapp/org/cboard/controller/config/datasetCtrl.js +++ b/src/main/webapp/org/cboard/controller/config/datasetCtrl.js @@ -9,11 +9,14 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, $scope.curWidget = {}; $scope.alerts = []; $scope.verify = {dsName: true}; + $scope.loadFromCache = true; $scope.queryAceOpt = cbAcebaseOption; $scope.hierarchy = translate("CONFIG.DATASET.HIERARCHY"); $scope.uuid4 = uuid4; $scope.params = []; - + $scope.colorArray = ['#5d9fe6','#9fc173','#a789c7','#e88b8a','#f5d451','#ecb44d','#aee8f4','#7272af','#7c8798', + '#90c3c6','#bc7676','#8b9bc7','#c189ba','#bb8cf2']; + $scope.showDataSetList=false; //Show and Hide datasetList var treeID = 'dataSetTreeID'; // Set to a same value with treeDom var originalData = []; var updateUrl = "dashboard/updateDataset.do"; @@ -32,16 +35,16 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, }; $scope.dndTransfer = { - dimension: function (list, index, item, type) { - if (type == 'column') { - list[index] = {type: 'column', column: item}; - } - }, - measure: function (list, index, item, type) { - if (type == 'column') { - list[index] = {type: 'column', column: item}; + dimension: function (list, index, item, type) { + if (type == 'column') { + list[index] = {type: 'column', column: item}; + } + }, + measure: function (list, index, item, type) { + if (type == 'column') { + list[index] = {type: 'column', column: item}; + } } - } }; $http.get("dashboard/getDatasourceList.do").success(function (response) { @@ -51,6 +54,7 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, var getDatasetList = function () { $http.get("dashboard/getDatasetList.do").success(function (response) { $scope.datasetList = response; + setPage(1); $scope.searchNode(); if ($stateParams.id) { $scope.editDs(_.find($scope.datasetList, function (ds) { @@ -78,6 +82,7 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, $scope.curWidget = {}; $scope.selects = []; cleanPreview(); + $scope.showDataSetList=true; }; $scope.editDs = function (ds) { @@ -86,9 +91,10 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, doEditDs(ds); $scope.doConfigParams(); } else { - ModalUtils.alert(translate("ADMIN.CONTACT_ADMIN") + ":Datasource/" + response.msg, "modal-danger", "lg"); + ModalUtils.alert(translate('ADMIN.CONTACT_ADMIN') + ":Datasource/" + response.msg, 'modal-danger', 'lg'); } }); + $scope.showDataSetList=true; }; var doEditDs = function (ds) { @@ -146,11 +152,12 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, } if (resDs.length > 0) { - var warnStr = translate("CONFIG.WIDGET.WIDGET") + ":[" + resDs.toString() + "]"; - ModalUtils.alert(translate("COMMON.NOT_ALLOWED_TO_DELETE_BECAUSE_BE_DEPENDENT") + warnStr, "modal-warning", "lg"); + var warnStr = translate('CONFIG.WIDGET.WIDGET') + ":[" + resDs.toString() + "]"; + ModalUtils.alert(translate('COMMON.NOT_ALLOWED_TO_DELETE_BECAUSE_BE_DEPENDENT') + warnStr, 'modal-warning', 'lg'); return false; } - ModalUtils.confirm(translate("COMMON.CONFIRM_DELETE"), "modal-warning", "lg", function () { + + ModalUtils.confirm(translate('COMMON.CONFIRM_DELETE')+ds.name, 'modal-warning', 'lg', function () { $http.post("dashboard/deleteDataset.do", {id: ds.id}).success(function (serviceStatus) { if (serviceStatus.status == '1') { getDatasetList(); @@ -185,7 +192,7 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, $("#DatasetName").focus(); return false; } - for (i in $scope.params) { + for (var i in $scope.params) { var name = $scope.params[i].name; var label = $scope.params[i].label; var required = $scope.params[i].required; @@ -244,6 +251,7 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, } }); } + $scope.cancelDiv(); }; @@ -315,13 +323,24 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, $scope.deleteFilterGroup = function (index) { ModalUtils.confirm(translate("COMMON.FILTER_GROUP") + ": [" + $scope.curDataset.data.filters[index].group + "], " + - translate("COMMON.CONFIRM_DELETE"), "modal-warning", "lg", - function () { - $scope.curDataset.data.filters.splice(index, 1) - } + translate("COMMON.CONFIRM_DELETE"), "modal-warning", "lg", + function () { + $scope.curDataset.data.filters.splice(index, 1) + } ); }; + + $scope.cancelDiv = function () { + $scope.showDataSetList=false; + $scope.optFlag = 'none'; + $scope.curDataset = {data: {expressions: [], filters: [], schema: {dimension: [], measure: []}}}; + $scope.datasource = {}; + $scope.curWidget = {}; + $scope.selects = []; + cleanPreview(); + }; + var schemaToSelect = function (schema, rawSelects) { if (schema.selects) { return angular.copy(schema.selects); @@ -338,11 +357,11 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, } }); _.each(rawSelects, function(col) { - if (_.find(selects, function(o) { return col == o.column;}) === undefined) { + if (_.find(selects, function(o) { return col == o.column;}) === undefined) { selects.push({ column: col }); - } + } }); return angular.copy(selects); } @@ -356,7 +375,7 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, {name: 'max', value: 'max'}, {name: 'min', value: 'min'}, {name: 'distinct', value: 'distinct'} - ]; + ]; var ok; var data = {expression: ''}; if (!col) { @@ -409,7 +428,7 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, var v = verifyAggExpRegx($scope.data.expression); $scope.alerts = [{ msg: v.isValid ? translate("COMMON.SUCCESS") : v.msg, - type: v.isValid ? 'success' : 'danger' + type: v.isValid ? 'success' : 'danger' }]; }; $scope.ok = function () { @@ -427,10 +446,10 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, $scope.deleteExp = function (index) { ModalUtils.confirm(translate("CONFIG.COMMON.CUSTOM_EXPRESSION") + ": [" + $scope.curDataset.data.expressions[index].alias + "], " + - translate("COMMON.CONFIRM_DELETE"), "modal-warning", "lg", - function () { - $scope.curDataset.data.expressions.splice(index, 1) - } + translate("COMMON.CONFIRM_DELETE"), "modal-warning", "lg", + function () { + $scope.curDataset.data.expressions.splice(index, 1) + } ); }; @@ -450,7 +469,8 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, $scope.curDataset.data.schema.dimension.push(o); }; - $scope.toDimension = function (o) { + $scope.toDimension = function (o,index) { + $scope.curDataset.data.schema.dimension.push($scope.createNode(o)); }; @@ -472,12 +492,7 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, }); }; - $scope.loadData = function (reload) { - - if (reload != true) { - reload = false; - } - + $scope.loadData = function () { cleanPreview(); $scope.loading = true; @@ -485,7 +500,7 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, datasource: $scope.datasource.id, query: $scope.curWidget.query, datasetId: null, - reload: reload, + reload: !$scope.loadFromCache, callback: function (dps) { $scope.loading = false; $scope.toChartDisabled = false; @@ -497,15 +512,15 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, } var widget = { - chart_type: "table", - filters: [], - groups: [], - keys: [], - selects: [], - values: [{ - cols: [] - } - ] + chart_type: "table", + filters: [], + groups: [], + keys: [], + selects: [], + values: [{ + cols: [] + } + ] }; _.each($scope.selects, function (c) { widget.keys.push({ @@ -570,10 +585,13 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, if (!checkTreeNode("delete")) return; $scope.deleteDs(getSelectedDataSet()); }; - $scope.showInfo = function () { - if (!checkTreeNode("info")) return; - var content = getSelectedDataSet(); - ModalUtils.info(content,"modal-info", "lg"); + $scope.showInfo = function (o) { + if(o == undefined){ + if (!checkTreeNode("info")) return; + var content = getSelectedDataSet(); + ModalUtils.info(content,'modal-info', 'lg'); + }else + ModalUtils.info(o,'modal-info', 'lg'); }; $scope.searchNode = function () { var para = {dsName: '', dsrName: ''}; @@ -608,7 +626,7 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, } //filter data by keywords originalData = jstree_CvtVPath2TreeData( - $filter('filter')(list, {name: para.dsName, datasourceName: para.dsrName}) + $filter('filter')(list, {name: para.dsName, datasourceName: para.dsrName}) ); jstree_ReloadTree(treeID, originalData); @@ -644,7 +662,7 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, } }).then(function (response) { $scope.params = response.data; - for (i in $scope.params) { + for (var i in $scope.params) { var name = $scope.params[i].name; var value = $scope.params[i].value; var checked = $scope.params[i].checked; @@ -658,6 +676,10 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, $scope.curWidget.query[name] = value; } } + + //focus on the div + var editor = ace.edit("aceEditor");//ace_editor aceEditor + editor.focus(); }); }; @@ -667,4 +689,21 @@ cBoard.controller('datasetCtrl', function ($scope, $http, $state, $stateParams, /** Ace Editor Starer... **/ $scope.queryAceOpt = datasetEditorOptions(); + /* + * Code for pagination + */ + $scope.pageSize = 10; + $scope.currentPage = 1; + + var pageSizeArr = [5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100, 'ALL']; + $scope.pageSizeArr = pageSizeArr; + var changePageSize = function(pagesize) { + if($scope.pageSize == 'ALL') { + $scope.pageSize = $scope.datasetList.length; + } + else { + $scope.pageSize = pagesize; + } + } + $scope.changePageSize = changePageSize; }); \ No newline at end of file diff --git a/src/main/webapp/org/cboard/controller/config/datasourceCtrl.js b/src/main/webapp/org/cboard/controller/config/datasourceCtrl.js index 0af3530db..5da9dcf9d 100644 --- a/src/main/webapp/org/cboard/controller/config/datasourceCtrl.js +++ b/src/main/webapp/org/cboard/controller/config/datasourceCtrl.js @@ -1,5 +1,6 @@ /** * Created by yfyuan on 2016/8/19. + * Updated by BI Pros 21-06-2019 */ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $http, ModalUtils, $uibModal, $filter, $q) { @@ -10,7 +11,10 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt $scope.alerts = []; $scope.verify = {dsName:true,provider:true}; $scope.params = []; - + $scope.colorArray = ['#5d9fe6','#9fc173','#a789c7','#e88b8a','#f5d451','#ecb44d','#aee8f4','#7272af','#7c8798', + '#90c3c6','#bc7676','#8b9bc7','#c189ba','#bb8cf2']; + + var getDatasourceList = function () { $http.get("dashboard/getDatasourceList.do").success(function (response) { $scope.datasourceList = response; @@ -28,18 +32,55 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt $scope.providerList = response; }); + $scope.newDs = function () { - $scope.optFlag = 'new'; $scope.curDatasource = {config: {}}; $scope.dsView = ''; + $uibModal.open({ + templateUrl: 'org/cboard/view/config/datasource/new.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + scope: $scope, + controller: ('datasourceCtrl',function ($scope, $uibModalInstance) { + $scope.close = function () { + $uibModalInstance.close(); + }; + $scope.saveNew = function() { + saveNew(); + $uibModalInstance.close(); + } + }) + + }); }; + + $scope.editDs = function (ds) { - $scope.optFlag = 'edit'; $scope.curDatasource = angular.copy(ds); $scope.changeDsView(); $scope.doDatasourceParams(); $state.go('config.datasource', {id: ds.id}, {notify: false}); + $uibModal.open({ + templateUrl: 'org/cboard/view/config/datasource/edit.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + scope: $scope, + controller: ('datasourceCtrl',function ($scope, $uibModalInstance) { + $scope.close = function () { + $uibModalInstance.close(); + }; + $scope.saveEdit = function() { + saveEdit(); + $uibModalInstance.close(); + } + }) + + }); }; + + $scope.deleteDs = function (ds) { // var isDependent = false; var resDs = []; @@ -73,20 +114,20 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt if (resDs.length > 0 || resWdg.length > 0) { var warnStr = ' '; if (resDs.length > 0) { - warnStr += " " + translate("CONFIG.DATASET.DATASET") + ": [" + resDs.toString() + "]"; + warnStr += " " + translate('CONFIG.DATASET.DATASET') + ": [" + resDs.toString() + "]"; } if (resWdg.length > 0) { - warnStr += " " + translate("CONFIG.WIDGET.WIDGET") + ": [" + resWdg.toString() + "]"; + warnStr += " " + translate('CONFIG.WIDGET.WIDGET') + ": [" + resWdg.toString() + "]"; } - ModalUtils.alert(translate("COMMON.NOT_ALLOWED_TO_DELETE_BECAUSE_BE_DEPENDENT") + warnStr, "modal-warning", "lg"); + ModalUtils.alert(translate('COMMON.NOT_ALLOWED_TO_DELETE_BECAUSE_BE_DEPENDENT') + warnStr, 'modal-warning', 'lg'); return false; } - ModalUtils.confirm(translate("COMMON.CONFIRM_DELETE"), "modal-warning", "lg", function () { + ModalUtils.confirm(translate('COMMON.CONFIRM_DELETE')+ds.name, 'modal-warning', 'lg', function () { $http.post("dashboard/deleteDatasource.do", {id: ds.id}).success(function (serviceStatus) { if (serviceStatus.status == '1') { getDatasourceList(); } else { - ModalUtils.alert(serviceStatus.msg, "modal-warning", "lg"); + ModalUtils.alert(serviceStatus.msg, 'modal-warning', 'lg'); } $scope.optFlag = 'none'; }); @@ -101,14 +142,14 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt if (serviceStatus.status == '1') { $scope.optFlag = 'none'; getDatasourceList(); - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + ModalUtils.alert(translate('COMMON.SUCCESS'), 'modal-success', 'sm'); } else { - ModalUtils.alert(serviceStatus.msg, "modal-warning", "lg"); + ModalUtils.alert(serviceStatus.msg, 'modal-warning', 'lg'); } }); }; $scope.showInfo = function (ds) { - ModalUtils.info(ds,"modal-info", "lg"); + ModalUtils.info(ds,'modal-info', 'lg'); }; $scope.changeDsView = function () { $scope.dsView = 'dashboard/getDatasourceView.do?type=' + $scope.curDatasource.type; @@ -140,7 +181,7 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt } }); }; - + var validate = function () { $scope.alerts = []; if($scope.curDatasource.type == null){ @@ -154,7 +195,7 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt $("#DatasetName").focus(); return false; } - for (i in $scope.params) { + for (var i in $scope.params) { var name = $scope.params[i].name; var label = $scope.params[i].label; var required = $scope.params[i].required; @@ -174,7 +215,7 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt return true; }; - $scope.saveNew = function () { + var saveNew = function () { if(!validate()){ return; } @@ -183,14 +224,14 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt $scope.optFlag = 'none'; getDatasourceList(); $scope.verify = {dsName:true,provider:true}; - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + ModalUtils.alert(translate('COMMON.SUCCESS'), 'modal-success', 'sm'); } else { $scope.alerts = [{msg: serviceStatus.msg, type: 'danger'}]; } }); }; - $scope.saveEdit = function () { + var saveEdit = function () { if(!validate()){ return; } @@ -199,7 +240,7 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt $scope.optFlag = 'none'; getDatasourceList(); $scope.verify = {dsName:true,provider:true}; - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + ModalUtils.alert(translate('COMMON.SUCCESS'), 'modal-success', 'sm'); } else { $scope.alerts = [{msg: serviceStatus.msg, type: 'danger'}]; } @@ -222,7 +263,7 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt $scope.curWidget = {query: {}}; $http.get('dashboard/getConfigParams.do?type=' + $scope.datasource.type + '&page=test.html').then(function (response) { $scope.params = response.data; - for(i in $scope.params){ + for(var i in $scope.params){ var name = $scope.params[i].name; var value = $scope.params[i].value; var checked = $scope.params[i].checked; @@ -237,7 +278,7 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt } }); var validate = function () { - for(i in $scope.params){ + for(var i in $scope.params){ var name = $scope.params[i].name; var label = $scope.params[i].label; var required = $scope.params[i].required; @@ -270,7 +311,7 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt }]; } else { $scope.alerts = [{ - msg: translate("COMMON.SUCCESS"), + msg: translate('COMMON.SUCCESS'), type: 'success' }]; } @@ -280,4 +321,22 @@ cBoard.controller('datasourceCtrl', function ($scope, $state, $stateParams, $htt }); }; -}); \ No newline at end of file + /* + * Code for pagination + */ + $scope.pageSize = 10; + $scope.currentPage = 1; + + var pageSizeArr = [5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100, 'ALL']; + $scope.pageSizeArr = pageSizeArr; + var changePageSize = function(pagesize) { + if($scope.pageSize == 'ALL') { + $scope.pageSize = $scope.datasourceList.length; + } + else { + $scope.pageSize = pagesize; + } + } + $scope.changePageSize = changePageSize; + +}); diff --git a/src/main/webapp/org/cboard/controller/config/homepageSettingCtrl.js b/src/main/webapp/org/cboard/controller/config/homepageSettingCtrl.js index 293f4db8a..ad488e7ac 100644 --- a/src/main/webapp/org/cboard/controller/config/homepageSettingCtrl.js +++ b/src/main/webapp/org/cboard/controller/config/homepageSettingCtrl.js @@ -3,25 +3,25 @@ */ 'use strict'; cBoard.controller('homepageSettingCtrl', - function ($rootScope, $scope, $http, ModalUtils, $filter, updateService, $uibModal, - $timeout, dataService, $state, $window, $stateParams) { - var translate = $filter('translate'); + function ($rootScope, $scope, $http, ModalUtils, $filter, updateService, $uibModal, + $timeout, dataService, $state, $window, $stateParams) { + var translate = $filter('translate'); - $scope.optFlag = 'none'; - $scope.curBoard = {layout: {rows: []}}; - $scope.alerts = []; - $scope.verify = {boardName: true}; - $rootScope.freeLayout = false; - $scope.treeData = []; + $scope.optFlag = 'none'; + $scope.curBoard = {layout: {rows: []}}; + $scope.alerts = []; + $scope.verify = {boardName: true}; + $rootScope.freeLayout = false; + $scope.treeData = []; - var treeID = "boardTreeID"; - var originalData = []; - var updateUrl = "dashboard/updateBoard.do"; + var treeID = "boardTreeID"; + var originalData = []; + var updateUrl = "dashboard/updateBoard.do"; - var getBoardList = function () { - return $http.get("dashboard/getBoardList.do").success(function (response) { - $scope.boardList = response; - originalData = jstree_CvtVPath2TreeData( + var getBoardList = function () { + return $http.get("dashboard/getBoardList.do").success(function (response) { + $scope.boardList = response; + originalData = jstree_CvtVPath2TreeData( $scope.boardList.map(function (ds) { var categoryName = ds.categoryName == null ? translate('CONFIG.DASHBOARD.MY_DASHBOARD') : ds.categoryName; return { @@ -30,94 +30,94 @@ cBoard.controller('homepageSettingCtrl', "categoryName": categoryName }; }) - ); - jstree_ReloadTree(treeID, originalData); - $timeout(function() { - $('#saveHomepage').removeClass('disabled'); - $('#resetHomepage').removeClass('disabled'); - $scope.treeInstance.jstree(true).open_all(); - $http.get("homepage/selectHomepage.do").success(function (response) { - if(response != null) { - $("#"+response+"_anchor").css("font-weight","bold"); - } - }); - }, 500); + ); + jstree_ReloadTree(treeID, originalData); + $timeout(function() { + $('#saveHomepage').removeClass('disabled'); + $('#resetHomepage').removeClass('disabled'); + $scope.treeInstance.jstree(true).open_all(); + $http.get("homepage/selectHomepage.do").success(function (response) { + if(response != null) { + $("#"+response+"_anchor").css("font-weight","bold"); + } + }); + }, 500); + }); + }; + + var getCategoryList = function () { + $http.get("dashboard/getCategoryList.do").success(function (response) { + $scope.categoryList = [{id: null, name: translate('CONFIG.DASHBOARD.MY_DASHBOARD')}]; + _.each(response, function (o) { + $scope.categoryList.push(o); }); - }; + }); + }; + + var boardChange = function () { + $scope.verify = {boardName: true}; + $scope.$emit("boardChange"); + }; - var getCategoryList = function () { - $http.get("dashboard/getCategoryList.do").success(function (response) { - $scope.categoryList = [{id: null, name: translate('CONFIG.DASHBOARD.MY_DASHBOARD')}]; - _.each(response, function (o) { - $scope.categoryList.push(o); + $('#saveHomepage').addClass('disabled'); + $('#resetHomepage').addClass('disabled'); + var boardListPromise = getBoardList(); + getCategoryList(); + + $scope.resetHomepage = function () { + if(!$('#resetHomepage').hasClass('disabled')) { + ModalUtils.confirm(translate("COMMON.CONFIRM_RESET"), "modal-warning", "lg", function () { + $http.post("homepage/resetHomepage.do", {}).success(function (serviceStatus) { + if (serviceStatus.status == '1') { + $(".jstree-anchor").css("font-weight", ""); + ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + } else { + ModalUtils.alert(translate("COMMON.FAIL"), "modal-danger", "sm"); + } }); }); - }; - - var boardChange = function () { - $scope.verify = {boardName: true}; - $scope.$emit("boardChange"); - }; + } + }; - $('#saveHomepage').addClass('disabled'); - $('#resetHomepage').addClass('disabled'); - var boardListPromise = getBoardList(); - getCategoryList(); - - $scope.resetHomepage = function () { - if(!$('#resetHomepage').hasClass('disabled')) { - ModalUtils.confirm(translate("COMMON.CONFIRM_RESET"), "modal-warning", "lg", function () { - $http.post("homepage/resetHomepage.do", {}).success(function (serviceStatus) { - if (serviceStatus.status == '1') { - $(".jstree-anchor").css("font-weight", ""); - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); - } else { - ModalUtils.alert(translate("COMMON.FAIL"), "modal-danger", "sm"); - } - }); - }); - } - }; + $scope.saveHomepage = function () { + if(!$('#saveHomepage').hasClass('disabled')) { + var board = getSelectedBoard(); + if(board == null) { + ModalUtils.alert(translate("COMMON.MUST_SELECT_ONE_BOARD"), "modal-warning", "sm"); + } else { + $http.post("homepage/saveHomepage.do", { + boardId: board.id, + }).success(function (serviceStatus) { + if (serviceStatus.status == '1') { + $(".jstree-anchor").css("font-weight", ""); + $("#"+board.id+"_anchor").css("font-weight","bold"); + ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + } else { + ModalUtils.alert(translate("COMMON.FAIL"), "modal-danger", "sm"); + } + }); + } + } + }; - $scope.saveHomepage = function () { - if(!$('#saveHomepage').hasClass('disabled')) { - var board = getSelectedBoard(); - if(board == null) { - ModalUtils.alert(translate("COMMON.MUST_SELECT_ONE_BOARD"), "modal-warning", "sm"); - } else { - $http.post("homepage/saveHomepage.do", { - boardId: board.id, - }).success(function (serviceStatus) { - if (serviceStatus.status == '1') { - $(".jstree-anchor").css("font-weight", ""); - $("#"+board.id+"_anchor").css("font-weight","bold"); - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); - } else { - ModalUtils.alert(translate("COMMON.FAIL"), "modal-danger", "sm"); - } - }); - } - } - }; + /** js tree related start **/ + $scope.treeConfig = angular.copy(jsTreeConfig1); + $scope.treeConfig.plugins = ['types', 'unique', 'state', 'sort']; - /** js tree related start **/ - $scope.treeConfig = angular.copy(jsTreeConfig1); - $scope.treeConfig.plugins = ['types', 'unique', 'state', 'sort']; + $("#" + treeID).keyup(function (e) { + if (e.keyCode == 46) { + $scope.deleteBoard(getSelectedBoard()); + } + }); - $("#" + treeID).keyup(function (e) { - if (e.keyCode == 46) { - $scope.deleteBoard(getSelectedBoard()); - } + var getSelectedBoard = function () { + var selectedNode = jstree_GetSelectedNodes(treeID)[0]; + if(selectedNode == null) { + return null; + } + return _.find($scope.boardList, function (ds) { + return ds.id == selectedNode.id; }); + }; - var getSelectedBoard = function () { - var selectedNode = jstree_GetSelectedNodes(treeID)[0]; - if(selectedNode == null) { - return null; - } - return _.find($scope.boardList, function (ds) { - return ds.id == selectedNode.id; - }); - }; - - }); +}); diff --git a/src/main/webapp/org/cboard/controller/config/jobCtrl.js b/src/main/webapp/org/cboard/controller/config/jobCtrl.js index c9ba50a8d..4e2d45c90 100644 --- a/src/main/webapp/org/cboard/controller/config/jobCtrl.js +++ b/src/main/webapp/org/cboard/controller/config/jobCtrl.js @@ -5,6 +5,8 @@ cBoard.controller('jobCtrl', function ($scope, $rootScope, $http, dataService, $ var translate = $filter('translate'); $scope.jobTypes = [{name: 'Send Mail', type: 'mail'}]; + $scope.colorArray = ['#5d9fe6','#9fc173','#a789c7','#e88b8a','#f5d451','#ecb44d','#aee8f4','#7272af','#7c8798', + '#90c3c6','#bc7676','#8b9bc7','#c189ba','#bb8cf2']; $scope.interval = $interval(function () { $http.get("dashboard/getJobList.do").success(function (response) { @@ -19,10 +21,10 @@ cBoard.controller('jobCtrl', function ($scope, $rootScope, $http, dataService, $ }, 5000); $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState) { - if (fromState.controller == 'jobCtrl') { - $interval.cancel($scope.interval); - } + if (fromState.controller == 'jobCtrl') { + $interval.cancel($scope.interval); } + } ); $scope.loadJobList = function () { @@ -93,16 +95,16 @@ cBoard.controller('jobCtrl', function ($scope, $rootScope, $http, dataService, $ scope: $scope, controller: function ($scope, $uibModalInstance) { $scope.cronConfig = { - quartz: true, - allowMultiple: true, - options: { - allowYear: false - } + quartz: true, + allowMultiple: true, + options: { + allowYear: false + } }; $scope.dateRangeCfg = { - locale: { - format: "YYYY-MM-DD" - } + locale: { + format: "YYYY-MM-DD" + } }; if (job) { $scope.job = angular.copy(job); @@ -153,7 +155,8 @@ cBoard.controller('jobCtrl', function ($scope, $rootScope, $http, dataService, $ }; $scope.deleteJob = function (job) { - ModalUtils.confirm(translate("COMMON.CONFIRM_DELETE"), "modal-info", "lg", function () { + var jobName = job.name; + ModalUtils.confirm(translate('COMMON.CONFIRM_DELETE')+jobName, 'modal-info', 'lg', function () { $http.post("dashboard/deleteJob.do", {id: job.id}).success(function (serviceStatus) { if (serviceStatus.status == '1') { $scope.loadJobList(); @@ -163,4 +166,22 @@ cBoard.controller('jobCtrl', function ($scope, $rootScope, $http, dataService, $ }); }); }; + + /* + * Code for pagination + */ + $scope.pageSize = 10; + $scope.currentPage = 1; + + var pageSizeArr = [5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100, 'ALL']; + $scope.pageSizeArr = pageSizeArr; + var changePageSize = function(pagesize) { + if($scope.pageSize == 'ALL') { + $scope.pageSize = $scope.jobList.length; + } + else { + $scope.pageSize = pagesize; + } + } + $scope.changePageSize = changePageSize; }); \ No newline at end of file diff --git a/src/main/webapp/org/cboard/controller/config/shareResCtrl.js b/src/main/webapp/org/cboard/controller/config/shareResCtrl.js index 7990c01b5..27f092b0f 100644 --- a/src/main/webapp/org/cboard/controller/config/shareResCtrl.js +++ b/src/main/webapp/org/cboard/controller/config/shareResCtrl.js @@ -1,12 +1,19 @@ /** * Created by yfyuan on 2017/04/10. */ -cBoard.controller('shareResCtrl', function ($scope, $http, ModalUtils, $filter) { +cBoard.controller('shareResCtrl', function ($scope, $http, ModalUtils, $filter, $uibModal) { var translate = $filter('translate'); $scope.curUser; $scope.userKeyword = ''; + //tab active on default + $scope.tab = 'board'; + + //colorArray declared here + $scope.colorArray = ['#5d9fe6','#9fc173','#a789c7','#e88b8a','#f5d451','#ecb44d','#aee8f4','#7272af','#7c8798', + '#90c3c6','#bc7676','#8b9bc7','#c189ba','#bb8cf2']; + var getRoleList = function () { $http.get("admin/getRoleListAll.do").success(function (response) { $scope.roleList = response; @@ -42,6 +49,7 @@ cBoard.controller('shareResCtrl', function ($scope, $http, ModalUtils, $filter) var getBoardList = function () { return $http.get("admin/getBoardListUser.do").success(function (response) { + $scope.dashboardList = response; _.each(buildNodeByCategory(_.filter(response, function (e) { return e.categoryId; }), 'Dashboard', 'board', 'fa fa-puzzle-piece'), function (e) { @@ -52,6 +60,7 @@ cBoard.controller('shareResCtrl', function ($scope, $http, ModalUtils, $filter) var getDatasetList = function () { return $http.get("admin/getDatasetListUser.do").success(function (response) { + $scope.datasetList = response; _.each(buildNodeByCategory(response, 'Dataset', 'dataset', 'fa fa-table'), function (e) { $scope.resList.push(e); }); @@ -60,6 +69,7 @@ cBoard.controller('shareResCtrl', function ($scope, $http, ModalUtils, $filter) var getWidgetList = function () { return $http.get("admin/getWidgetListUser.do").success(function (response) { + $scope.widgetList = response; _.each(buildNodeByCategory(response, 'Widget', 'widget', 'fa fa-line-chart'), function (e) { $scope.resList.push(e); }); @@ -124,23 +134,20 @@ cBoard.controller('shareResCtrl', function ($scope, $http, ModalUtils, $filter) return getWidgetList(); }).then(function () { $scope.treeConfig = { - core: { - multiple: true, - animation: true, - error: function (error) { + core: { + multiple: true, + animation: true, + error: function (error) { + }, + check_callback: true, + worker: true + }, + checkbox: { + three_state: true }, - check_callback: true, - worker: true - }, - checkbox: { - three_state: true - }, - version: 1, - plugins: ['types', 'checkbox', 'unique'] + version: 1, + plugins: ['types', 'checkbox', 'unique'] }; - _.delay(function () { - $scope.treeInstance.jstree(true); - }, 500); }); }(); @@ -152,28 +159,28 @@ cBoard.controller('shareResCtrl', function ($scope, $http, ModalUtils, $filter) }; getRoleResList(); + //method declared to get all the selected roleIds + $scope.selectedRoleId = ""; + $scope.getRoleIds = function (roleObj) { + $scope.selectedRoleId = roleObj.roleId; + }; - $scope.grantRes = function () { - var roleIds = _.map($scope.selectRole, function (e) { - return e.roleId; - }); - var resIds = _.map(_.filter($scope.treeInstance.jstree(true).get_selected(true), function (e) { - return !_.isUndefined(e.original.resId); - }), function (e) { - return { - resId: e.original.resId, - resType: e.original.type, - }; - }); + $scope.reqRole = []; + $scope.data = {multipleSelect: []}; + var grantRes = function () { + $scope.resIds = []; + $scope.role = { "resId":$scope.storeResourceObj.id, "resType":$scope.resTypeObj} + $scope.resIds.push($scope.role); $http.post("admin/updateRoleResUser.do", { - roleIdArr: angular.toJson(roleIds), - resIdArr: angular.toJson(resIds), + roleIdArr: angular.toJson($scope.data.multipleSelect), + resIdArr: angular.toJson($scope.resIds), }).success(function (serviceStatus) { if (serviceStatus == '1') { $scope.selectRole = null; $scope.selectRes = null; getRoleResList(); - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + $scope.resourceIds = []; + ModalUtils.alert(translate('COMMON.SUCCESS'), 'modal-success', 'sm'); } else { $scope.alerts = [{msg: serviceStatus.msg, type: 'danger'}]; } @@ -199,8 +206,84 @@ cBoard.controller('shareResCtrl', function ($scope, $http, ModalUtils, $filter) $scope.jstree_open_all = function () { $scope.treeInstance.jstree(true).open_all(); }; - + $scope.jstree_close_all = function () { $scope.treeInstance.jstree(true).close_all(); } + + //method declared to open modal for RoleList + $scope.storeResourceObj; + $scope.resTypeObj; + $scope.openModalForRoleList = function(resourceObj,resType) { + $scope.data = {multipleSelect: []}; + $scope.storeResourceObj = resourceObj; + $scope.resTypeObj = resType; + $scope.roleResList.forEach(function(r){ + if(resourceObj.id == r.resId && resType == r.resType ){ + $scope.roleList.forEach(function(k){ + if(k.roleId == r.roleId){ + $scope.data.multipleSelect.push(k.roleId); + } + }); + } + }); + $uibModal.open({ + templateUrl: 'org/cboard/view/config/modal/shareResource/showRoleList.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'md', + scope: $scope, + controller: ('shareResCtrl',function ($scope, $uibModalInstance) { + $scope.close = function () { + $uibModalInstance.close(); + $scope.resourceIds = []; + }; + $scope.grantRes = function() { + grantRes(); + $uibModalInstance.close(); + } + }) + }); + } + /* + * Code for pagination + */ + $scope.pageSizeForDashBoard = 10; + $scope.pageSizeForDataset = 10; + $scope.pageSizeForWidget = 10; + + var pageSizeArr = [5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100, 'ALL']; + $scope.pageSizeArr = pageSizeArr; + + var changePageSizeForDashboard = function(pagesize) { + if($scope.pageSizeForDashBoard == 'ALL') { + $scope.pageSizeForDashBoard = $scope.dashboardList.length; + } + else { + $scope.pageSizeForDashBoard = pagesize; + } + } + $scope.changePageSizeForDashboard = changePageSizeForDashboard; + + var changePageSizeForDataset = function(pagesize) { + if($scope.pageSizeForDataset == 'ALL') { + $scope.pageSizeForDataset = $scope.datasetList.length; + } + else { + $scope.pageSizeForDataset = pagesize; + } + } + + $scope.changePageSizeForDataset = changePageSizeForDataset; + + var changePageSizeForWidget = function(pagesize) { + if($scope.pageSizeForWidget == 'ALL'){ + $scope.pageSizeForWidget = $scope.widgetList.length; + } + else { + $scope.pageSizeForWidget = pagesize; + } + } + + $scope.changePageSizeForWidget = changePageSizeForWidget; }); \ No newline at end of file diff --git a/src/main/webapp/org/cboard/controller/config/widgetCtrl.js b/src/main/webapp/org/cboard/controller/config/widgetCtrl.js index 13afa92e0..34cb697ed 100644 --- a/src/main/webapp/org/cboard/controller/config/widgetCtrl.js +++ b/src/main/webapp/org/cboard/controller/config/widgetCtrl.js @@ -2,241 +2,252 @@ * Created by yfyuan on 2016/8/12. */ 'use strict'; -cBoard.controller('widgetCtrl', function ($scope, $state, $stateParams, $http, $uibModal, dataService, ModalUtils, updateService, $filter, chartService, $timeout) { - - var translate = $filter('translate'); - var updateUrl = "dashboard/updateWidget.do"; - $scope.liteMode = false; - $scope.tab = 'preview_widget2'; - //图表类型初始化 - $scope.chart_types = [ - { - name: translate('CONFIG.WIDGET.TABLE'), value: 'table', class: 'cTable', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE') - }, - { - name: translate('CONFIG.WIDGET.LINE_BAR'), value: 'line', class: 'cLine', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') - }, - { - name: translate('CONFIG.WIDGET.CONTRAST'), value: 'contrast', class: 'cContrast', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_2') - }, - { - name: translate('CONFIG.WIDGET.SCATTER'), value: 'scatter', class: 'cScatter', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') - }, - { - name: translate('CONFIG.WIDGET.PIE'), value: 'pie', class: 'cPie', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') - }, - { - name: translate('CONFIG.WIDGET.KPI'), value: 'kpi', class: 'cKpi', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') - }, - { - name: translate('CONFIG.WIDGET.FUNNEL'), value: 'funnel', class: 'cFunnel', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') - }, - { - name: translate('CONFIG.WIDGET.SANKEY'), value: 'sankey', class: 'cSankey', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') - }, - { - name: translate('CONFIG.WIDGET.RADAR'), value: 'radar', class: 'cRadar', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') - }, - { - name: translate('CONFIG.WIDGET.MAP'), value: 'map', class: 'cMap', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') - }, - { - name: translate('CONFIG.WIDGET.GAUGE'), value: 'gauge', class: 'cGauge', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') - }, - { - name: translate('CONFIG.WIDGET.WORD_CLOUD'), value: 'wordCloud', class: 'cWordCloud', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') - }, - { - name: translate('CONFIG.WIDGET.TREE_MAP'), value: 'treeMap', class: 'cTreeMap', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') - }, - { - name: translate('CONFIG.WIDGET.HEAT_MAP_CALENDER'), value: 'heatMapCalendar', class: 'cHeatMapCalendar', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') - }, - { - name: translate('CONFIG.WIDGET.HEAT_MAP_TABLE'), value: 'heatMapTable', class: 'cHeatMapTable', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') - }, - { - name: translate('CONFIG.WIDGET.LIQUID_FILL'), value: 'liquidFill', class: 'cLiquidFill', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') - }, - { - name: translate('CONFIG.WIDGET.AREA_MAP'), value: 'areaMap', class: 'cAreaMap', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') - }, - { - name: translate('CONFIG.WIDGET.CHINA_MAP'), value: 'chinaMap', class: 'cChinaMap', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') - }, - { - name: translate('CONFIG.WIDGET.CHINA_MAP_BMAP'), value: 'chinaMapBmap', class: 'cChinaMapBmap', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') - }, - { - name: translate('CONFIG.WIDGET.RELATION'), value: 'relation', class: 'cRelation', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_2'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_2'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') - }, - { - name: translate('CONFIG.WIDGET.WORLD_MAP'), value: 'worldMap', class: 'cWorldMap', - row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), - column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), - measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') - } +cBoard.controller('widgetCtrl', function ($rootScope,$scope, $state, $stateParams, $http, $uibModal, dataService, ModalUtils, updateService, $filter, chartService, chartGridService, $timeout, $location) { + $scope.showWidgetList = false; + + var translate = $filter('translate'); + var updateUrl = "dashboard/updateWidget.do"; + $scope.liteMode = false; + $scope.tab = 'preview_widget2'; + $scope.colorArray = ['#5d9fe6', '#9fc173', '#a789c7', '#e88b8a', '#f5d451', '#ecb44d', '#aee8f4', '#7272af', '#7c8798', + '#90c3c6', '#bc7676', '#8b9bc7', '#c189ba', '#bb8cf2']; + //图表类型初始化 + $scope.chart_types = [ + + { + name: translate('CONFIG.WIDGET.TABLE'), value: 'table', class: 'cTable', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') + }, + { + name: translate('CONFIG.WIDGET.GRID'), value: 'grid', class: 'cGrid', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') + }, + { + name: translate('CONFIG.WIDGET.LINE_BAR'), value: 'line', class: 'cLine', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') + }, + { + name: translate('CONFIG.WIDGET.CONTRAST'), value: 'contrast', class: 'cContrast', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_2') + }, + { + name: translate('CONFIG.WIDGET.SCATTER'), value: 'scatter', class: 'cScatter', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') + }, + { + name: translate('CONFIG.WIDGET.PIE'), value: 'pie', class: 'cPie', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') + }, + { + name: translate('CONFIG.WIDGET.KPI'), value: 'kpi', class: 'cKpi', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') + }, + { + name: translate('CONFIG.WIDGET.FUNNEL'), value: 'funnel', class: 'cFunnel', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') + }, + { + name: translate('CONFIG.WIDGET.SANKEY'), value: 'sankey', class: 'cSankey', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') + }, + { + name: translate('CONFIG.WIDGET.RADAR'), value: 'radar', class: 'cRadar', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') + }, + { + name: translate('CONFIG.WIDGET.MAP'), value: 'map', class: 'cMap', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') + }, + { + name: translate('CONFIG.WIDGET.GAUGE'), value: 'gauge', class: 'cGauge', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') + }, + { + name: translate('CONFIG.WIDGET.WORD_CLOUD'), value: 'wordCloud', class: 'cWordCloud', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') + }, + { + name: translate('CONFIG.WIDGET.TREE_MAP'), value: 'treeMap', class: 'cTreeMap', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') + }, + { + name: translate('CONFIG.WIDGET.HEAT_MAP_CALENDER'), value: 'heatMapCalendar', class: 'cHeatMapCalendar', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') + }, + { + name: translate('CONFIG.WIDGET.HEAT_MAP_TABLE'), value: 'heatMapTable', class: 'cHeatMapTable', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') + }, + { + name: translate('CONFIG.WIDGET.LIQUID_FILL'), value: 'liquidFill', class: 'cLiquidFill', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') + }, + { + name: translate('CONFIG.WIDGET.AREA_MAP'), value: 'areaMap', class: 'cAreaMap', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') + }, + { + name: translate('CONFIG.WIDGET.CHINA_MAP'), value: 'chinaMap', class: 'cChinaMap', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') + }, + { + name: translate('CONFIG.WIDGET.CHINA_MAP_BMAP'), value: 'chinaMapBmap', class: 'cChinaMapBmap', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE') + }, + { + name: translate('CONFIG.WIDGET.RELATION'), value: 'relation', class: 'cRelation', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_2'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_2'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') + }, + { + name: translate('CONFIG.WIDGET.WORLD_MAP'), value: 'worldMap', class: 'cWorldMap', + row: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1_MORE'), + column: translate('CONFIG.WIDGET.TIPS_DIM_NUM_0_MORE'), + measure: translate('CONFIG.WIDGET.TIPS_DIM_NUM_1') + } ]; - $scope.chart_types_status = { - "line": true, "pie": true, "kpi": true, "table": true, + $scope.chart_types_status = { + "line": true, "pie": true, "kpi": true, "table": true, "grid": true, "funnel": true, "sankey": true, "radar": true, "map": true, "scatter": true, "gauge": true, "wordCloud": true, "treeMap": true, "heatMapCalendar": true, "heatMapTable": true, "liquidFill": true, "areaMap": true, "contrast": true,"chinaMap":true,"chinaMapBmap":true, "relation":true, "worldMap": true - }; - - $scope.value_series_types = [ - {name: translate('CONFIG.WIDGET.LINE'), value: 'line'}, - {name: translate('CONFIG.WIDGET.AREA_LINE'),value:'arealine'}, - {name: translate('CONFIG.WIDGET.STACKED_LINE'),value:'stackline'}, - {name: translate('CONFIG.WIDGET.PERCENT_LINE'),value:'percentline'}, - {name: translate('CONFIG.WIDGET.BAR'), value: 'bar'}, - {name: translate('CONFIG.WIDGET.STACKED_BAR'), value: 'stackbar'}, - {name: translate('CONFIG.WIDGET.PERCENT_BAR'), value: 'percentbar'} + }; + + $scope.value_series_types = [ + {name: translate('CONFIG.WIDGET.LINE'), value: 'line'}, + {name: translate('CONFIG.WIDGET.AREA_LINE'),value:'arealine'}, + {name: translate('CONFIG.WIDGET.STACKED_LINE'),value:'stackline'}, + {name: translate('CONFIG.WIDGET.PERCENT_LINE'),value:'percentline'}, + {name: translate('CONFIG.WIDGET.BAR'), value: 'bar'}, + {name: translate('CONFIG.WIDGET.STACKED_BAR'), value: 'stackbar'}, + {name: translate('CONFIG.WIDGET.PERCENT_BAR'), value: 'percentbar'} ]; - $scope.china_map_types = [ - {name: translate('CONFIG.WIDGET.SCATTER_MAP'), value: 'scatter'}, - {name: translate('CONFIG.WIDGET.HEAT_MAP'), value: 'heat'}, - {name: translate('CONFIG.WIDGET.MARK_LINE_MAP'), value: 'markLine'} + $scope.china_map_types = [ + {name: translate('CONFIG.WIDGET.SCATTER_MAP'), value: 'scatter'}, + {name: translate('CONFIG.WIDGET.HEAT_MAP'), value: 'heat'}, + {name: translate('CONFIG.WIDGET.MARK_LINE_MAP'), value: 'markLine'} ]; - $scope.value_aggregate_types = [ - {name: 'sum', value: 'sum'}, - {name: 'count', value: 'count'}, - {name: 'avg', value: 'avg'}, - {name: 'max', value: 'max'}, - {name: 'min', value: 'min'}, - {name: 'distinct', value: 'distinct'} + $scope.value_aggregate_types = [ + {name: 'sum', value: 'sum'}, + {name: 'count', value: 'count'}, + {name: 'avg', value: 'avg'}, + {name: 'max', value: 'max'}, + {name: 'min', value: 'min'}, + {name: 'distinct', value: 'distinct'} ]; - $scope.value_pie_types = [ - {name: translate('CONFIG.WIDGET.PIE'), value: 'pie'}, - {name: translate('CONFIG.WIDGET.DOUGHNUT'), value: 'doughnut'}, - {name: translate('CONFIG.WIDGET.COXCOMB'), value: 'coxcomb'} + $scope.value_pie_types = [ + {name: translate('CONFIG.WIDGET.PIE'), value: 'pie'}, + {name: translate('CONFIG.WIDGET.DOUGHNUT'), value: 'doughnut'}, + {name: translate('CONFIG.WIDGET.COXCOMB'), value: 'coxcomb'} ] - $scope.kpi_styles = [ - {name: translate('CONFIG.WIDGET.AQUA'), value: 'bg-aqua'}, - {name: translate('CONFIG.WIDGET.RED'), value: 'bg-red'}, - {name: translate('CONFIG.WIDGET.GREEN'), value: 'bg-green'}, - {name: translate('CONFIG.WIDGET.YELLOW'), value: 'bg-yellow'} + $scope.kpi_styles = [ + {name: translate('CONFIG.WIDGET.AQUA'), value: 'bg-aqua'}, + {name: translate('CONFIG.WIDGET.RED'), value: 'bg-red'}, + {name: translate('CONFIG.WIDGET.GREEN'), value: 'bg-green'}, + {name: translate('CONFIG.WIDGET.YELLOW'), value: 'bg-yellow'} ]; - $.getJSON('plugins/FineMap/mapdata/citycode.json', function (data) { - $scope.provinces = data.provinces; - }); + $.getJSON('plugins/FineMap/mapdata/citycode.json', function (data) { + $scope.provinces = data.provinces; + }); - $scope.treemap_styles = [ - {name: translate('CONFIG.WIDGET.RANDOM'), value: 'random'}, - {name: translate('CONFIG.WIDGET.MULTI'), value: 'multi'}, - {name: translate('CONFIG.WIDGET.BLUE'), value: 'blue'}, - {name: translate('CONFIG.WIDGET.RED'), value: 'red'}, - {name: translate('CONFIG.WIDGET.GREEN'), value: 'green'}, - {name: translate('CONFIG.WIDGET.YELLOW'), value: 'yellow'}, - {name: translate('CONFIG.WIDGET.PURPLE'), value: 'purple'} + $scope.treemap_styles = [ + {name: translate('CONFIG.WIDGET.RANDOM'), value: 'random'}, + {name: translate('CONFIG.WIDGET.MULTI'), value: 'multi'}, + {name: translate('CONFIG.WIDGET.BLUE'), value: 'blue'}, + {name: translate('CONFIG.WIDGET.RED'), value: 'red'}, + {name: translate('CONFIG.WIDGET.GREEN'), value: 'green'}, + {name: translate('CONFIG.WIDGET.YELLOW'), value: 'yellow'}, + {name: translate('CONFIG.WIDGET.PURPLE'), value: 'purple'} ]; - $scope.heatmap_styles = [ - {name: translate('CONFIG.WIDGET.BLUE'), value: 'blue'}, - {name: translate('CONFIG.WIDGET.RED'), value: 'red'}, - {name: translate('CONFIG.WIDGET.GREEN'), value: 'green'}, - {name: translate('CONFIG.WIDGET.YELLOW'), value: 'yellow'}, - {name: translate('CONFIG.WIDGET.PURPLE'), value: 'purple'} + $scope.heatmap_styles = [ + {name: translate('CONFIG.WIDGET.BLUE'), value: 'blue'}, + {name: translate('CONFIG.WIDGET.RED'), value: 'red'}, + {name: translate('CONFIG.WIDGET.GREEN'), value: 'green'}, + {name: translate('CONFIG.WIDGET.YELLOW'), value: 'yellow'}, + {name: translate('CONFIG.WIDGET.PURPLE'), value: 'purple'} ]; - $scope.heatmap_date_format = [ - {name: 'yyyy-MM-dd', value: 'yyyy-MM-dd'}, - {name: 'yyyy/MM/dd', value: 'yyyy/MM/dd'}, - {name: 'yyyyMMdd', value: 'yyyyMMdd'} + $scope.heatmap_date_format = [ + {name: 'yyyy-MM-dd', value: 'yyyy-MM-dd'}, + {name: 'yyyy/MM/dd', value: 'yyyy/MM/dd'}, + {name: 'yyyyMMdd', value: 'yyyyMMdd'} ]; - $scope.liquid_fill_style = [ - {name: translate('CONFIG.WIDGET.CIRCLE'), value: 'circle'}, - {name: translate('CONFIG.WIDGET.PIN'), value: 'pin'}, - {name: translate('CONFIG.WIDGET.RECT'), value: 'rect'}, - {name: translate('CONFIG.WIDGET.ARROW'), value: 'arrow'}, - {name: translate('CONFIG.WIDGET.TRIANGLE'), value: 'triangle'}, - {name: translate('CONFIG.WIDGET.ROUND_RECT'), value: 'roundRect'}, - {name: translate('CONFIG.WIDGET.SQUARE'), value: 'square'}, - {name: translate('CONFIG.WIDGET.DIAMOND'), value: 'diamond'} + $scope.liquid_fill_style = [ + {name: translate('CONFIG.WIDGET.CIRCLE'), value: 'circle'}, + {name: translate('CONFIG.WIDGET.PIN'), value: 'pin'}, + {name: translate('CONFIG.WIDGET.RECT'), value: 'rect'}, + {name: translate('CONFIG.WIDGET.ARROW'), value: 'arrow'}, + {name: translate('CONFIG.WIDGET.TRIANGLE'), value: 'triangle'}, + {name: translate('CONFIG.WIDGET.ROUND_RECT'), value: 'roundRect'}, + {name: translate('CONFIG.WIDGET.SQUARE'), value: 'square'}, + {name: translate('CONFIG.WIDGET.DIAMOND'), value: 'diamond'} ]; - /*************************************** - * 0: None items - * 1: only 1 item - * -1: None Restrict - * 2: 1 or more - ***************************************/ - $scope.configRule = { + /*************************************** + * 0: None items + * 1: only 1 item + * -1: None Restrict + * 2: 1 or more + ***************************************/ + $scope.configRule = { line: {keys: 2, groups: -1, filters: -1, values: 2}, pie: {keys: 2, groups: -1, filters: -1, values: 2}, kpi: {keys: 0, groups: 0, filters: -1, values: 1}, table: {keys: -1, groups: -1, filters: -1, values: -1}, + grid: { keys: -1, groups: -1, filters: -1, values: -1 }, funnel: {keys: -1, groups: 0, filters: -1, values: 2}, sankey: {keys: 2, groups: 2, filters: -1, values: 1}, radar: {keys: 2, groups: -1, filters: -1, values: 2}, @@ -254,1020 +265,1087 @@ cBoard.controller('widgetCtrl', function ($scope, $state, $stateParams, $http, $ chinaMapBmap:{keys: 2, groups: -1, filters: -1, values: 2}, relation: {keys: 2, groups: 2, filters: -1, values: 1}, worldMap: {keys: 2, groups: -1, filters: -1, values: 1} - }; + }; + + $scope.switchLiteMode = function (mode) { + if (mode) { + $scope.liteMode = mode; + $scope.$parent.$parent.liteMode = mode; + } else { + $scope.liteMode = !$scope.liteMode; + $scope.$parent.$parent.liteMode = $scope.liteMode; + } + } - $scope.switchLiteMode = function (mode) { - if (mode) { - $scope.liteMode = mode; - $scope.$parent.$parent.liteMode = mode; - } else { - $scope.liteMode = !$scope.liteMode; - $scope.$parent.$parent.liteMode = $scope.liteMode; + //界面控制 + $scope.loading = false; + $scope.toChartDisabled = true; + $scope.optFlag = ''; + $scope.alerts = []; + $scope.treeData = []; + var originalData = []; + var treeID = 'widgetTreeID'; // Set to a same value with treeDom + + $scope.datasource; + $scope.widgetName; + $scope.widgetCategory; + $scope.widgetId; + $scope.curWidget = {}; + $scope.previewDivWidth = 12; + $scope.expressions = []; + $scope.customDs = false; + $scope.loadFromCache = true; + $scope.filterSelect = {}; + $scope.verify = {widgetName: true}; + $scope.params = []; + $scope.curDataset; + + + var loadDataset = function (callback) { + $http.get("dashboard/getDatasetList.do").success(function (response) { + $scope.datasetList = response; + if (callback) { + callback(); + } + }); + }; + loadDataset(); + + $http.get("dashboard/getDatasourceList.do").success(function (response) { + $scope.datasourceList = response; + getCategoryList(); + getWidgetList(function () { + if ($stateParams.id) { + $scope.editWgt(_.find($scope.widgetList, function (w) { + return w.id == $stateParams.id; + })); + } else if ($stateParams.id == null && $stateParams.datasetId) { + $scope.newWgt({datasetId: parseInt($stateParams.datasetId)}); + $scope.loadData(); } + }); + }); + + $scope.getCurDatasetName = function() { + if ($scope.customDs) { + return translate('CONFIG.WIDGET.NEW_QUERY'); + } else { + var curDS = _.find($scope.datasetList, function (ds) { + return ds.id == $scope.curWidget.datasetId; + }); + return curDS ? curDS.name : null; } + } - //界面控制 - $scope.loading = false; - $scope.toChartDisabled = true; - $scope.optFlag = ''; - $scope.alerts = []; - $scope.treeData = []; - var originalData = []; - var treeID = 'widgetTreeID'; // Set to a same value with treeDom - - $scope.datasource; - $scope.widgetName; - $scope.widgetCategory; - $scope.widgetId; - $scope.curWidget = {}; - $scope.previewDivWidth = 12; - $scope.expressions = []; - $scope.customDs = false; - $scope.loadFromCache = true; - $scope.filterSelect = {}; - $scope.verify = {widgetName: true}; - $scope.params = []; - $scope.curDataset; - + $scope.datasetGroup = function (item) { + return item.categoryName; + }; - var loadDataset = function (callback) { - $http.get("dashboard/getDatasetList.do").success(function (response) { - $scope.datasetList = response; - if (callback) { - callback(); - } - }); - }; - loadDataset(); + var getWidgetList = function (callback) { + $http.get("dashboard/getWidgetList.do").success(function (response) { + $scope.widgetList = response; + getCubeName(); + if (callback) { + callback(); + } + $scope.searchNode(); + }); + }; - $http.get("dashboard/getDatasourceList.do").success(function (response) { - $scope.datasourceList = response; - getCategoryList(); - getWidgetList(function () { - if ($stateParams.id) { - $scope.editWgt(_.find($scope.widgetList, function (w) { - return w.id == $stateParams.id; - })); - } else if ($stateParams.id == null && $stateParams.datasetId) { - $scope.newWgt({datasetId: parseInt($stateParams.datasetId)}); - $scope.loadData(); - } + var getCategoryList = function () { + $http.get("dashboard/getWidgetCategoryList.do").success(function (response) { + $scope.categoryList = response; + $("#widgetName").autocomplete({ + source: $scope.categoryList }); }); + }; - $scope.getCurDatasetName = function() { - if ($scope.customDs) { - return translate('CONFIG.WIDGET.NEW_QUERY'); - } else { - var curDS = _.find($scope.datasetList, function (ds) { - return ds.id == $scope.curWidget.datasetId; - }); - return curDS ? curDS.name : null; - } - } + $scope.viewExp = function (exp) { + ModalUtils.alert({ title: translate('CONFIG.COMMON.CUSTOM_EXPRESSION') + ': ' + exp.alias, body: exp.exp }, + 'modal-info', 'lg'); + } - $scope.datasetGroup = function (item) { - return item.categoryName; - }; - var getWidgetList = function (callback) { - $http.get("dashboard/getWidgetList.do").success(function (response) { - $scope.widgetList = response; - if (callback) { - callback(); - } - $scope.searchNode(); - }); - }; - var getCategoryList = function () { - $http.get("dashboard/getWidgetCategoryList.do").success(function (response) { - $scope.categoryList = response; - $("#widgetName").autocomplete({ - source: $scope.categoryList - }); + function getCubeName () { + if($scope.widgetList != null) { + var wgtList = $scope.widgetList; + wgtList.forEach(function(wgtListVal, index) { + if($scope.datasetList != null) { + $scope.datasetList.forEach(function(dsList, index){ + var wlData = wgtListVal.data; + if(wlData.datasetId == dsList.id) + $scope.cubeNameArr[wgtListVal.data.datasetId] = dsList.name; + }); + } }); - }; - $scope.viewExp = function(exp) { - ModalUtils.alert({title: translate('CONFIG.COMMON.CUSTOM_EXPRESSION') + ': ' + exp.alias, body: exp.exp}, - "modal-info", 'lg'); } + } - $scope.editExp = function (col) { - var columnObjs = schemaToSelect($scope.schema); - var aggregate = $scope.value_aggregate_types; - var curWidget = $scope.curWidget; - var ok; - var data = {expression: ''}; - if (!col) { - ok = function (data) { - $scope.curWidget.expressions.push({ - type: 'exp', - exp: data.expression, - alias: data.alias - }); - } - } else { - data.expression = col.exp; - data.alias = col.alias; - ok = function (data) { - col.exp = data.expression; - col.alias = data.alias; - } + $scope.editExp = function (col) { + var columnObjs = schemaToSelect($scope.schema); + var aggregate = $scope.value_aggregate_types; + var curWidget = $scope.curWidget; + var ok; + var data = {expression: ''}; + if (!col) { + ok = function (data) { + $scope.curWidget.expressions.push({ + type: 'exp', + exp: data.expression, + alias: data.alias + }); } + } else { + data.expression = col.exp; + data.alias = col.alias; + ok = function (data) { + col.exp = data.expression; + col.alias = data.alias; + } + } - $uibModal.open({ - templateUrl: 'org/cboard/view/config/modal/exp.html', - windowTemplateUrl: 'org/cboard/view/util/modal/window.html', - backdrop: false, - size: 'lg', - scope: $scope, - controller: function ($scope, $uibModalInstance) { - $scope.data = data; - $scope.curWidget = curWidget; - $scope.columnObjs = columnObjs; - $scope.aggregate = aggregate; - $scope.expressions = curWidget.expressions; - $scope.alerts = []; - $scope.close = function () { - $uibModalInstance.close(); - }; - var columns = _.map(columnObjs, function (o) { return o.column; }); - $scope.expAceOpt = expEditorOptions($scope.selects, aggregate, function(_editor) { - $scope.expAceEditor = _editor; - $scope.expAceSession = _editor.getSession(); - _editor.focus(); - }); - $scope.addToken = function (str, agg) { - var editor = $scope.expAceEditor; - editor.session.insert(editor.getCursorPosition(), str); - editor.focus(); - if (agg) editor.getSelection().moveCursorLeft(); - }; - $scope.verify = function () { - $scope.alerts = []; - var v = verifyAggExpRegx($scope.data.expression); - $scope.alerts = [{ - msg: v.isValid ? translate("COMMON.SUCCESS") : v.msg, - type: v.isValid ? 'success' : 'danger' - }]; - }; - $scope.ok = function () { - if (!$scope.data.alias) { - ModalUtils.alert(translate('CONFIG.WIDGET.ALIAS') + translate('COMMON.NOT_EMPTY'), "modal-warning", "lg"); - return; - } - $scope.data.expression = $scope.expAceSession.getValue(); - ok($scope.data); - $uibModalInstance.close(); - }; - } - }); - }; - - $scope.loadData = function () { - $scope.toChartDisabled = false; - $scope.newConfig(); - $scope.filterSelect = {}; - loadDataset(function () { - $scope.curWidget.expressions = []; - loadDsExpressions(); - $scope.curWidget.filterGroups = []; - loadDsFilterGroups(); - buildSchema(); - }); - cleanPreview(); - }; - - $scope.newWgt = function (curWidget) { - $scope.curWidget = {}; - if (curWidget) { + $uibModal.open({ + templateUrl: 'org/cboard/view/config/modal/exp.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + scope: $scope, + controller: function ($scope, $uibModalInstance) { + $scope.data = data; $scope.curWidget = curWidget; + $scope.columnObjs = columnObjs; + $scope.aggregate = aggregate; + $scope.expressions = curWidget.expressions; + $scope.alerts = []; + $scope.close = function () { + $uibModalInstance.close(); + }; + var columns = _.map(columnObjs, function (o) { return o.column; }); + $scope.expAceOpt = expEditorOptions($scope.selects, aggregate, function(_editor) { + $scope.expAceEditor = _editor; + $scope.expAceSession = _editor.getSession(); + _editor.focus(); + }); + $scope.addToken = function (str, agg) { + var editor = $scope.expAceEditor; + editor.session.insert(editor.getCursorPosition(), str); + editor.focus(); + if (agg) editor.getSelection().moveCursorLeft(); + }; + $scope.verify = function () { + $scope.alerts = []; + var v = verifyAggExpRegx($scope.data.expression); + $scope.alerts = [{ + msg: v.isValid ? translate("COMMON.SUCCESS") : v.msg, + type: v.isValid ? 'success' : 'danger' + }]; + }; + $scope.ok = function () { + if (!$scope.data.alias) { + ModalUtils.alert(translate('CONFIG.WIDGET.ALIAS') + translate('COMMON.NOT_EMPTY'), "modal-warning", "lg"); + return; + } + $scope.data.expression = $scope.expAceSession.getValue(); + ok($scope.data); + $uibModalInstance.close(); + }; } - $scope.curWidget.config = {}; - $scope.curWidget.config.option = {}; + }); + }; + + $scope.loadData = function () { + $scope.toChartDisabled = false; + $scope.newConfig(); + $scope.filterSelect = {}; + loadDataset(function () { $scope.curWidget.expressions = []; + loadDsExpressions(); $scope.curWidget.filterGroups = []; - $scope.curWidget.query = {}; - $scope.datasource = null; - $scope.widgetName = null; - $scope.widgetCategory = null; - $scope.widgetId = null; - $scope.optFlag = 'new'; - $scope.customDs = false; - $scope.schema = null; - $scope.liteMode = false; - cleanPreview(); - addValidateWatch(); - }; - - var loadDsFilterGroups = function () { - if (!$scope.customDs) { - var fg = _.find($scope.datasetList, function (ds) { - return ds.id == $scope.curWidget.datasetId; - }).data.filters; - if (fg) { - _.each(fg, function (e) { - $scope.curWidget.filterGroups.push(e); - }); - } - } - }; + loadDsFilterGroups(); + buildSchema(); + }); + cleanPreview(); + }; - $scope.isDsExpression = function (o) { - if ($scope.customDs) { - return false; - } else { - var dsExp = _.find($scope.datasetList, function (ds) { - return ds.id == $scope.curWidget.datasetId; - }).data.expressions; - var exp = _.find(dsExp, function (e) { - return (e.id && o.id == e.id) || o.alias == e.alias; + $scope.newWgt = function (curWidget) { + $scope.curWidget = {}; + if (curWidget) { + $scope.curWidget = curWidget; + } + $scope.curWidget.config = {}; + $scope.curWidget.config.option = {}; + $scope.curWidget.expressions = []; + $scope.curWidget.filterGroups = []; + $scope.curWidget.query = {}; + $scope.datasource = null; + $scope.widgetName = null; + $scope.widgetCategory = null; + $scope.widgetId = null; + $scope.optFlag = 'new'; + $scope.showWidgetList = true; + $scope.customDs = false; + $scope.schema = null; + $scope.liteMode = false; + cleanPreview(); + addValidateWatch(); + }; + + var loadDsFilterGroups = function () { + if (!$scope.customDs) { + var fg = _.find($scope.datasetList, function (ds) { + return ds.id == $scope.curWidget.datasetId; + }).data.filters; + if (fg) { + _.each(fg, function (e) { + $scope.curWidget.filterGroups.push(e); }); - return !_.isUndefined(exp); } - }; - - $scope.isDsFilter = function (o) { - if ($scope.customDs) { - return false; - } else { - var fg = _.find($scope.datasetList, function (ds) { - return ds.id == $scope.curWidget.datasetId; - }).data.filters; - var f = _.find(fg, function (e) { - return e.id && o.id == e.id; + } + }; + + $scope.isDsExpression = function (o) { + if ($scope.customDs) { + return false; + } else { + var dsExp = _.find($scope.datasetList, function (ds) { + return ds.id == $scope.curWidget.datasetId; + }).data.expressions; + var exp = _.find(dsExp, function (e) { + return (e.id && o.id == e.id) || o.alias == e.alias; + }); + return !_.isUndefined(exp); + } + }; + + $scope.isDsFilter = function (o) { + if ($scope.customDs) { + return false; + } else { + var fg = _.find($scope.datasetList, function (ds) { + return ds.id == $scope.curWidget.datasetId; + }).data.filters; + var f = _.find(fg, function (e) { + return e.id && o.id == e.id; + }); + return !_.isUndefined(f); + } + }; + + var loadDsExpressions = function () { + if (!$scope.customDs) { + var dsExp = _.find($scope.datasetList, function (ds) { + return ds.id == $scope.curWidget.datasetId; + }).data.expressions; + if (dsExp) { + _.each(dsExp, function (e) { + $scope.curWidget.expressions.push(e); }); - return !_.isUndefined(f); - } - }; - - var loadDsExpressions = function () { - if (!$scope.customDs) { - var dsExp = _.find($scope.datasetList, function (ds) { - return ds.id == $scope.curWidget.datasetId; - }).data.expressions; - if (dsExp) { - _.each(dsExp, function (e) { - $scope.curWidget.expressions.push(e); - }); - } - } - }; - - var addWatch = function () { - $scope.$watch('curWidget.config.keys', changeChartStatus, true); - $scope.$watch('curWidget.config.groups', changeChartStatus, true); - $scope.$watch('curWidget.config.values', changeChartStatus, true); - $scope.$watch('curWidget.config.filters', changeChartStatus, true); - addHelpMessage(); - addValidateWatch(); - }; - - var addHelpMessage = function () { - var rowKey = 'HELP_MESSAGE.' + $scope.curWidget.config.chart_type.toUpperCase() + ".ROW"; - var columnKey = 'HELP_MESSAGE.' + $scope.curWidget.config.chart_type.toUpperCase() + ".COLUMN"; - var filterKey = 'HELP_MESSAGE.' + $scope.curWidget.config.chart_type.toUpperCase() + ".FILTER"; - var valueKey = 'HELP_MESSAGE.' + $scope.curWidget.config.chart_type.toUpperCase() + ".VALUE"; - var row = translate(rowKey) == rowKey ? null : translate(rowKey); - var column = translate(columnKey) == columnKey ? null : translate(columnKey); - var filter = translate(filterKey) == filterKey ? null : translate(filterKey); - var value = translate(valueKey) == valueKey ? null : translate(valueKey); - $scope.helpMessage = {row: row, column: column, filter: filter, value: value}; - }; - - var addValidateWatch = function () { - $scope.$watch('widgetName', clearAlert, true); - $scope.$watch('curWidget.datasetId', clearAlert, true); - }; - var clearAlert = function () { - $scope.alerts = []; - $scope.verify = {widgetName: true}; - }; - var validation = function () { - $scope.alerts = []; - $scope.verify = {widgetName: true}; - if (!$scope.widgetName) { - $scope.alerts = [{ - msg: translate('CONFIG.WIDGET.WIDGET_NAME') + translate('COMMON.NOT_EMPTY'), - type: 'danger' - }]; - $scope.verify = {widgetName: false}; - $("#widgetName").focus(); - return false; } - if ($scope.customDs == false && $scope.curWidget.datasetId == undefined) { - $scope.alerts = [{ - msg: translate('CONFIG.WIDGET.DATASET') + translate('COMMON.NOT_EMPTY'), - type: 'danger' - }]; - return false; - } - if ($scope.customDs == true) { - for (var i = 0; i < $scope.params.length; i++) { - var name = $scope.params[i].name; - var label = $scope.params[i].label; - var required = $scope.params[i].required; - var value = $scope.curWidget.query[name]; - if (required == true && value != 0 && (value == undefined || value == "")) { - var pattern = /([\w_\s\.]+)/; - var msg = pattern.exec(label); - if (msg && msg.length > 0) - msg = translate(msg[0]); - else - msg = label; - $scope.alerts = [{msg: "[" + msg + "]" + translate('COMMON.NOT_EMPTY'), type: 'danger'}]; - $scope.verify[name] = false; - return false; - } + } + }; + + var addWatch = function () { + $scope.$watch('curWidget.config.keys', changeChartStatus, true); + $scope.$watch('curWidget.config.groups', changeChartStatus, true); + $scope.$watch('curWidget.config.values', changeChartStatus, true); + $scope.$watch('curWidget.config.filters', changeChartStatus, true); + addHelpMessage(); + addValidateWatch(); + }; + + var addHelpMessage = function () { + var rowKey = 'HELP_MESSAGE.' + $scope.curWidget.config.chart_type.toUpperCase() + ".ROW"; + var columnKey = 'HELP_MESSAGE.' + $scope.curWidget.config.chart_type.toUpperCase() + ".COLUMN"; + var filterKey = 'HELP_MESSAGE.' + $scope.curWidget.config.chart_type.toUpperCase() + ".FILTER"; + var valueKey = 'HELP_MESSAGE.' + $scope.curWidget.config.chart_type.toUpperCase() + ".VALUE"; + var row = translate(rowKey) == rowKey ? null : translate(rowKey); + var column = translate(columnKey) == columnKey ? null : translate(columnKey); + var filter = translate(filterKey) == filterKey ? null : translate(filterKey); + var value = translate(valueKey) == valueKey ? null : translate(valueKey); + $scope.helpMessage = {row: row, column: column, filter: filter, value: value}; + }; + + var addValidateWatch = function () { + $scope.$watch('widgetName', clearAlert, true); + $scope.$watch('curWidget.datasetId', clearAlert, true); + }; + var clearAlert = function () { + $scope.alerts = []; + $scope.verify = {widgetName: true}; + }; + var validation = function () { + $scope.alerts = []; + $scope.verify = {widgetName: true}; + if (!$scope.widgetName) { + $scope.alerts = [{ + msg: translate('CONFIG.WIDGET.WIDGET_NAME') + translate('COMMON.NOT_EMPTY'), + type: 'danger' + }]; + $scope.verify = {widgetName: false}; + $("#widgetName").focus(); + return false; + } + if ($scope.customDs == false && $scope.curWidget.datasetId == undefined) { + $scope.alerts = [{ + msg: translate('CONFIG.WIDGET.DATASET') + translate('COMMON.NOT_EMPTY'), + type: 'danger' + }]; + return false; + } + if ($scope.customDs == true) { + for (var i = 0; i < $scope.params.length; i++) { + var name = $scope.params[i].name; + var label = $scope.params[i].label; + var required = $scope.params[i].required; + var value = $scope.curWidget.query[name]; + if (required == true && value != 0 && (value == undefined || value == "")) { + var pattern = /([\w_\s\.]+)/; + var msg = pattern.exec(label); + if (msg && msg.length > 0) + msg = translate(msg[0]); + else + msg = label; + $scope.alerts = [{msg: "[" + msg + "]" + translate('COMMON.NOT_EMPTY'), type: 'danger'}]; + $scope.verify[name] = false; + return false; } } - return true; - }; - - var changeChartStatus = function () { - for (var type in $scope.chart_types_status) { - var rule = $scope.configRule[type]; - var config = $scope.curWidget.config; - var flattenValues = []; - _.each(config.values, function (v) { - flattenValues = flattenValues.concat(v.cols); - }); - if (_.size(config.keys) == 0 && _.size(config.groups) == 0 && _.size(flattenValues) == 0) { - r = false; - } else { - for (var k in rule) { - var r = true; - if (rule[k] == 2) { - if (k == 'values') { - r = (_.size(flattenValues) >= 1); - if (type == 'contrast') { - r = (_.size(flattenValues) == 2); //限制values数量为2 - } - } else { - r = (_.size(config[k]) >= 1); - } - } else if (rule[k] != -1) { - if (k == 'values') { - r = (_.size(flattenValues) == rule[k]); - } else { - r = (_.size(config[k]) == rule[k]); + } + return true; + }; + + var changeChartStatus = function () { + for (var type in $scope.chart_types_status) { + var rule = $scope.configRule[type]; + var config = $scope.curWidget.config; + var flattenValues = []; + _.each(config.values, function (v) { + flattenValues = flattenValues.concat(v.cols); + }); + if (_.size(config.keys) == 0 && _.size(config.groups) == 0 && _.size(flattenValues) == 0) { + r = false; + } else { + for (var k in rule) { + var r = true; + if (rule[k] == 2) { + if (k == 'values') { + r = (_.size(flattenValues) >= 1); + if (type == 'contrast') { + r = (_.size(flattenValues) == 2); //限制values数量为2 } + } else { + r = (_.size(config[k]) >= 1); } - if (!r) { - $scope.chart_types_status[type] = r; - break; + } else if (rule[k] != -1) { + if (k == 'values') { + r = (_.size(flattenValues) == rule[k]); + } else { + r = (_.size(config[k]) == rule[k]); } } + if (!r) { + $scope.chart_types_status[type] = r; + break; + } } - $scope.chart_types_status[type] = r; - } - }; - - $scope.changeChart = function (chart_type) { - if (!$scope.chart_types_status[chart_type]) { - return; } - var oldConfig = angular.copy($scope.curWidget.config); - $scope.curWidget.config = {}; - $scope.curWidget.config.option = {}; - $scope.curWidget.config.chart_type = chart_type; - //loadDsExpressions(); - cleanPreview(); - - $scope.curWidget.config.selects = oldConfig.selects; - $scope.curWidget.config.keys = oldConfig.keys; - $scope.curWidget.config.groups = oldConfig.groups; - $scope.curWidget.config.values = []; - - addHelpMessage(); + $scope.chart_types_status[type] = r; + } + }; - $scope.curWidget.config.filters = oldConfig.filters; - switch ($scope.curWidget.config.chart_type) { - case 'line': - $scope.curWidget.config.values.push({name: '', cols: []}); - _.each(oldConfig.values, function (v) { - _.each(v.cols, function (c) { - $scope.curWidget.config.values[0].cols.push(c); - }); - }); - $scope.curWidget.config.valueAxis = 'vertical'; - _.each($scope.curWidget.config.values, function (v) { - v.series_type = 'line'; - v.type = 'value'; - }); - break; - case 'pie': - $scope.curWidget.config.values.push({name: '', cols: []}); - _.each(oldConfig.values, function (v) { - _.each(v.cols, function (c) { - $scope.curWidget.config.values[0].cols.push(c); - }); - }); - _.each($scope.curWidget.config.values, function (v) { - v.series_type = 'pie'; - v.type = 'value'; - }); - break; - case 'kpi': - $scope.curWidget.config.values.push({name: '', cols: []}); - _.each(oldConfig.values, function (v) { - _.each(v.cols, function (c) { - $scope.curWidget.config.values[0].cols.push(c); - }); + $scope.changeChart = function (chart_type) { + if (!$scope.chart_types_status[chart_type]) { + return; + } + var oldConfig = angular.copy($scope.curWidget.config); + $scope.curWidget.config = {}; + $scope.curWidget.config.option = {}; + $scope.curWidget.config.chart_type = chart_type; + //loadDsExpressions(); + cleanPreview(); + + $scope.curWidget.config.selects = oldConfig.selects; + $scope.curWidget.config.keys = oldConfig.keys; + $scope.curWidget.config.groups = oldConfig.groups; + $scope.curWidget.config.values = []; + + addHelpMessage(); + + $scope.curWidget.config.filters = oldConfig.filters; + switch ($scope.curWidget.config.chart_type) { + case 'line': + $scope.curWidget.config.values.push({name: '', cols: []}); + _.each(oldConfig.values, function (v) { + _.each(v.cols, function (c) { + $scope.curWidget.config.values[0].cols.push(c); }); - $scope.curWidget.config.selects = angular.copy($scope.columns); - _.each($scope.curWidget.config.values, function (v) { - v.style = 'bg-aqua'; + }); + $scope.curWidget.config.valueAxis = 'vertical'; + _.each($scope.curWidget.config.values, function (v) { + v.series_type = 'line'; + v.type = 'value'; + }); + break; + case 'pie': + $scope.curWidget.config.values.push({name: '', cols: []}); + _.each(oldConfig.values, function (v) { + _.each(v.cols, function (c) { + $scope.curWidget.config.values[0].cols.push(c); }); - break; - case 'scatter': - var i = 0; - _.each(oldConfig.values, function (v) { - _.each(v.cols, function (c) { - if (i >= 3) { - $scope.curWidget.config.selects.push(c.col); - return; - } - if (!$scope.curWidget.config.values[i]) { - $scope.curWidget.config.values[i] = {name: '', cols: []}; - } - $scope.curWidget.config.values[i].cols.push(c); - i++ - }); + }); + _.each($scope.curWidget.config.values, function (v) { + v.series_type = 'pie'; + v.type = 'value'; + }); + break; + case 'kpi': + $scope.curWidget.config.values.push({name: '', cols: []}); + _.each(oldConfig.values, function (v) { + _.each(v.cols, function (c) { + $scope.curWidget.config.values[0].cols.push(c); }); - for (var i = 0; i < 3; i++) { + }); + $scope.curWidget.config.selects = angular.copy($scope.columns); + _.each($scope.curWidget.config.values, function (v) { + v.style = 'bg-aqua'; + }); + break; + case 'scatter': + var i = 0; + _.each(oldConfig.values, function (v) { + _.each(v.cols, function (c) { + if (i >= 3) { + $scope.curWidget.config.selects.push(c.col); + return; + } if (!$scope.curWidget.config.values[i]) { $scope.curWidget.config.values[i] = {name: '', cols: []}; } + $scope.curWidget.config.values[i].cols.push(c); + i++ + }); + }); + for (var i = 0; i < 3; i++) { + if (!$scope.curWidget.config.values[i]) { + $scope.curWidget.config.values[i] = {name: '', cols: []}; } - break; - case 'gauge': - $scope.curWidget.config.values.push({name: '', cols: []}); - _.each(oldConfig.values, function (v) { - _.each(v.cols, function (c) { - $scope.curWidget.config.values[0].cols.push(c); - }); + } + break; + case 'gauge': + $scope.curWidget.config.values.push({name: '', cols: []}); + _.each(oldConfig.values, function (v) { + _.each(v.cols, function (c) { + $scope.curWidget.config.values[0].cols.push(c); }); - $scope.curWidget.config.selects = angular.copy($scope.columns); - $scope.curWidget.config.styles = [ - {proportion: '0.2', color: '#228b22'}, - {proportion: '0.8', color: '#48b'}, - {proportion: '1', color: '#ff4500'} + }); + $scope.curWidget.config.selects = angular.copy($scope.columns); + $scope.curWidget.config.styles = [ + {proportion: '0.2', color: '#228b22'}, + {proportion: '0.8', color: '#48b'}, + {proportion: '1', color: '#ff4500'} ]; - break; - case 'heatMapCalendar': - $scope.curWidget.config.values.push({name: '', cols: []}); - _.each(oldConfig.values, function (v) { - _.each(v.cols, function (c) { - $scope.curWidget.config.values[0].cols.push(c); - }); - }); - $scope.curWidget.config.selects = angular.copy($scope.columns); - _.each($scope.curWidget.config.values, function (v) { - v.dateFormat = 'yyyy-MM-dd'; - v.style = 'blue'; - }); - break; - case 'heatMapTable': - $scope.curWidget.config.values.push({name: '', cols: []}); - _.each(oldConfig.values, function (v) { - _.each(v.cols, function (c) { - $scope.curWidget.config.values[0].cols.push(c); - }); - }); - $scope.curWidget.config.selects = angular.copy($scope.columns); - _.each($scope.curWidget.config.values, function (v) { - v.style = 'blue'; - }); - break; - case 'liquidFill': - $scope.curWidget.config.values.push({name: '', cols: []}); - _.each(oldConfig.values, function (v) { - _.each(v.cols, function (c) { - $scope.curWidget.config.values[0].cols.push(c); - }); + break; + case 'heatMapCalendar': + $scope.curWidget.config.values.push({name: '', cols: []}); + _.each(oldConfig.values, function (v) { + _.each(v.cols, function (c) { + $scope.curWidget.config.values[0].cols.push(c); }); - $scope.curWidget.config.selects = angular.copy($scope.columns); - $scope.curWidget.config.animation = 'static'; - _.each($scope.curWidget.config.values, function (v) { - v.style = 'circle'; - }); - break; - case 'chinaMap': - $scope.curWidget.config.values.push({name: '', cols: []}); - _.each(oldConfig.values, function (v) { - _.each(v.cols, function (c) { - $scope.curWidget.config.values[0].cols.push(c); - }); - }); - $scope.curWidget.config.valueAxis = 'vertical'; - _.each($scope.curWidget.config.values, function (v) { - v.series_type = 'scatter'; - v.type = 'value'; + }); + $scope.curWidget.config.selects = angular.copy($scope.columns); + _.each($scope.curWidget.config.values, function (v) { + v.dateFormat = 'yyyy-MM-dd'; + v.style = 'blue'; + }); + break; + case 'heatMapTable': + $scope.curWidget.config.values.push({name: '', cols: []}); + _.each(oldConfig.values, function (v) { + _.each(v.cols, function (c) { + $scope.curWidget.config.values[0].cols.push(c); }); - break; - case 'chinaMapBmap': - $scope.curWidget.config.values.push({name: '', cols: []}); - _.each(oldConfig.values, function (v) { - _.each(v.cols, function (c) { - $scope.curWidget.config.values[0].cols.push(c); - }); + }); + $scope.curWidget.config.selects = angular.copy($scope.columns); + _.each($scope.curWidget.config.values, function (v) { + v.style = 'blue'; + }); + break; + case 'liquidFill': + $scope.curWidget.config.values.push({name: '', cols: []}); + _.each(oldConfig.values, function (v) { + _.each(v.cols, function (c) { + $scope.curWidget.config.values[0].cols.push(c); }); - $scope.curWidget.config.valueAxis = 'vertical'; - _.each($scope.curWidget.config.values, function (v) { - v.series_type = 'scatter'; - v.type = 'value'; + }); + $scope.curWidget.config.selects = angular.copy($scope.columns); + $scope.curWidget.config.animation = 'static'; + _.each($scope.curWidget.config.values, function (v) { + v.style = 'circle'; + }); + break; + case 'chinaMap': + $scope.curWidget.config.values.push({name: '', cols: []}); + _.each(oldConfig.values, function (v) { + _.each(v.cols, function (c) { + $scope.curWidget.config.values[0].cols.push(c); }); - break; - default: - $scope.curWidget.config.values.push({name: '', cols: []}); - _.each(oldConfig.values, function (v) { - _.each(v.cols, function (c) { - $scope.curWidget.config.values[0].cols.push(c); - }); + }); + $scope.curWidget.config.valueAxis = 'vertical'; + _.each($scope.curWidget.config.values, function (v) { + v.series_type = 'scatter'; + v.type = 'value'; + }); + break; + case 'chinaMapBmap': + $scope.curWidget.config.values.push({name: '', cols: []}); + _.each(oldConfig.values, function (v) { + _.each(v.cols, function (c) { + $scope.curWidget.config.values[0].cols.push(c); }); - break; - } - _.each($scope.curWidget.config.values, function (v) { + }); + $scope.curWidget.config.valueAxis = 'vertical'; + _.each($scope.curWidget.config.values, function (v) { + v.series_type = 'scatter'; + v.type = 'value'; + }); + break; + default: + $scope.curWidget.config.values.push({name: '', cols: []}); + _.each(oldConfig.values, function (v) { _.each(v.cols, function (c) { - delete c.formatter; + $scope.curWidget.config.values[0].cols.push(c); }); }); - $scope.preview(); - }; - - $scope.newConfig = function () { - $scope.curWidget.config = {}; - $scope.curWidget.config.option = {}; - $scope.curWidget.config.chart_type = 'table'; - cleanPreview(); - $scope.curWidget.config.selects = angular.copy($scope.columns); - $scope.curWidget.config.keys = []; - $scope.curWidget.config.groups = []; - $scope.curWidget.config.values = [{name: '', cols: []}]; - $scope.curWidget.config.filters = []; - addWatch(); - }; - - var cleanPreview = function () { - $('#preview_widget').html(""); - $('#viewQuery_widget').html(""); - $scope.viewQueryMoal = false; - }; - - $scope.previewQuery = function () { - $('#viewQuery_widget').html(""); - $timeout(function () { - angular.element('#viewQuery_widget_tab').trigger('click'); + break; + } + _.each($scope.curWidget.config.values, function (v) { + _.each(v.cols, function (c) { + delete c.formatter; }); - $scope.loadingPre = true; - dataService.viewQuery({ + }); + $scope.preview(); + }; + + $scope.newConfig = function () { + $scope.curWidget.config = {}; + $scope.curWidget.config.option = {}; + $scope.curWidget.config.chart_type = 'table'; + cleanPreview(); + $scope.curWidget.config.selects = angular.copy($scope.columns); + $scope.curWidget.config.keys = []; + $scope.curWidget.config.groups = []; + $scope.curWidget.config.values = [{name: '', cols: []}]; + $scope.curWidget.config.filters = []; + addWatch(); + }; + + var cleanPreview = function () { + $('#preview_widget').html(""); + $('#viewQuery_widget').html(""); + $scope.viewQueryMoal = false; + }; + + $scope.previewQuery = function () { + $('#viewQuery_widget').html(""); + $timeout(function () { + angular.element('#viewQuery_widget_tab').trigger('click'); + }); + $scope.loadingPre = true; + dataService.viewQuery({ + config: $scope.curWidget.config, + datasource: $scope.datasource ? $scope.datasource.id : null, + query: $scope.curWidget.query, + datasetId: $scope.customDs ? undefined : $scope.curWidget.datasetId + }, function (query) { + var querybr = query.trim().replace(/\n/g, '
').replace(/\t/g, "    "); + $('#viewQuery_widget').html(""); + $scope.loadingPre = false; + $scope.viewQueryMoal = true; + }); + }; + + $scope.preview = function () { + $('#preview_widget').html(""); + $timeout(function () { + angular.element('#preview_widget_tab').trigger('click'); + }); + $scope.loadingPre = true; + // --- start --- + // 添加echarts3.6.2后这里除了第一次可以加载echarts图表,再次加载无法显示图表。 + // 完全无法找到问题下,出于无奈嵌套了一层后发现可以显示图表。囧!! + // 具体原因没有找到,求大神帮忙解决,thanks! + $('#preview_widget').html("
"); + // --- end --- + var charType = $scope.curWidget.config.chart_type; + //百度地图特殊处理 + if (charType == 'chinaMapBmap') { + chartService.render($('#preview'), { config: $scope.curWidget.config, datasource: $scope.datasource ? $scope.datasource.id : null, - query: $scope.curWidget.query, - datasetId: $scope.customDs ? undefined : $scope.curWidget.datasetId - }, function (query) { - var querybr = query.trim().replace(/\n/g, '
').replace(/\t/g, "    "); - $('#viewQuery_widget').html(""); - $scope.loadingPre = false; - $scope.viewQueryMoal = true; + query: $scope.curWidget.query, + datasetId: $scope.customDs ? undefined : $scope.curWidget.datasetId + }); + $scope.loadingPre = false; + } else if (charType == 'grid') {// do differently as we are going to use syncfusion + + //Fetch the data + var config = $scope.curWidget.config; + var dataSource = $scope.datasource ? $scope.datasource.id : null; + var query = $scope.curWidget.query; + var datasetId = $scope.customDs ? undefined : $scope.curWidget.datasetId; + + //Fetch the measure columns + $scope.measureColumns = getSelectedMeasureColumns(config); + $scope.dimensionColumns = getSelectedDimensionColumns(config); + + var aggregateClmnsObj = { + "type":'', + "field":"", + "groupFooterTemplate": 'Total units: ${sum}' + }; + + $scope.aggregateClmns = []; + + $scope.measureColumns.forEach(function(value, index) { + value.forEach(function(v, i) { + var aggregate_type = v.aggregate_type; + aggregateClmnsObj = {}; + aggregateClmnsObj.type = v.aggregate_type; + aggregateClmnsObj.field = v.col; + aggregateClmnsObj.groupFooterTemplate = 'Total '+ v.col +': ${'+aggregate_type+'}'; + $scope.aggregateClmns.push(aggregateClmnsObj); + }) }); - }; - $scope.preview = function () { - $('#preview_widget').html(""); - $timeout(function () { - angular.element('#preview_widget_tab').trigger('click'); + + dataService.getRawData(dataSource, query, datasetId, config).then(function (response) { + renderGridChart(response); }); - $scope.loadingPre = true; - // --- start --- - // 添加echarts3.6.2后这里除了第一次可以加载echarts图表,再次加载无法显示图表。 - // 完全无法找到问题下,出于无奈嵌套了一层后发现可以显示图表。囧!! - // 具体原因没有找到,求大神帮忙解决,thanks! - $('#preview_widget').html("
"); - // --- end --- - var charType = $scope.curWidget.config.chart_type; - //百度地图特殊处理 - if (charType == 'chinaMapBmap') { - chartService.render($('#preview'), { - config: $scope.curWidget.config, - datasource: $scope.datasource ? $scope.datasource.id : null, - query: $scope.curWidget.query, - datasetId: $scope.customDs ? undefined : $scope.curWidget.datasetId - }); - $scope.loadingPre = false; - } else { - chartService.render($('#preview'), { - config: $scope.curWidget.config, - datasource: $scope.datasource ? $scope.datasource.id : null, - query: $scope.curWidget.query, - datasetId: $scope.customDs ? undefined : $scope.curWidget.datasetId - }, function (option) { - switch ($scope.curWidget.config.chart_type) { - case 'line': - $scope.previewDivWidth = 12; - option.toolbox = { + } else { + chartService.render($('#preview'), { + config: $scope.curWidget.config, + datasource: $scope.datasource ? $scope.datasource.id : null, + query: $scope.curWidget.query, + datasetId: $scope.customDs ? undefined : $scope.curWidget.datasetId + }, function (option) { + switch ($scope.curWidget.config.chart_type) { + case 'line': + $scope.previewDivWidth = 12; + option.toolbox = { feature: { dataView: { show: true, readOnly: true } } - }; - break; - case 'pie': - $scope.previewDivWidth = 12; - option.toolbox = { + }; + break; + case 'pie': + $scope.previewDivWidth = 12; + option.toolbox = { feature: { dataView: { show: true, readOnly: true } } - }; - break; - case 'kpi': - $scope.previewDivWidth = 6; - break; - case 'table': - $scope.previewDivWidth = 12; - break; - case 'funnel': - $scope.previewDivWidth = 12; - option.toolbox = { + }; + break; + case 'kpi': + $scope.previewDivWidth = 6; + break; + case 'table': + $scope.previewDivWidth = 12; + break; + case 'funnel': + $scope.previewDivWidth = 12; + option.toolbox = { feature: { dataView: { show: true, readOnly: true } } - }; - break; - case 'sankey': - $scope.previewDivWidth = 12; - option.toolbox = { + }; + break; + case 'sankey': + $scope.previewDivWidth = 12; + option.toolbox = { feature: { dataView: { show: true, readOnly: true } } - }; - break; - case 'map': - $scope.previewDivWidth = 12; - break; - case 'areaMap': - $scope.previewDivWidth = 12; - break; - case 'chinaMap': - $scope.previewDivWidth = 12; - break; - case 'relation': - $scope.previewDivWidth = 12; - break; - } - $scope.loadingPre = false; - }, null, !$scope.loadFromCache); - } - }; + }; + break; + case 'map': + $scope.previewDivWidth = 12; + break; + case 'areaMap': + $scope.previewDivWidth = 12; + break; + case 'chinaMap': + $scope.previewDivWidth = 12; + break; + case 'relation': + $scope.previewDivWidth = 12; + break; + } + $scope.loadingPre = false; + }, null, !$scope.loadFromCache); + } + }; + +// $scope.saveChart = function () { +// dashboardService.saveWidget('123', $scope.datasource, $scope.config); +// }; + + $scope.add_value = function () { + $scope.curWidget.config.values.push({ + name: '', + series_type: 'line', + type: 'value', + cols: [] + }); + }; + + $scope.add_pie_value = function () { + $scope.curWidget.config.values.push({ + name: '', + series_type: 'pie', + type: 'value', + cols: [] + }); + } -// $scope.saveChart = function () { -// dashboardService.saveWidget('123', $scope.datasource, $scope.config); -// }; + $scope.add_china_map_value = function () { + $scope.curWidget.config.values.push({ + name: '', + series_type: 'scatter', + type: 'value', + cols: [] + }); + }; - $scope.add_value = function () { - $scope.curWidget.config.values.push({ - name: '', - series_type: 'line', - type: 'value', - cols: [] + $scope.add_style = function () { + $scope.curWidget.config.styles.push({ + proportion: '', + color: '' + }); + }; + + $scope.initColorPicker = function (index) { + $timeout(function() { + $("#color_"+index).colorpicker() + .on("changeColor", function(e){ + if($scope.curWidget.config.styles[e.target.id.split("_")[1]]){ + $scope.curWidget.config.styles[e.target.id.split("_")[1]].color = e.color.toHex(); + } }); - }; + }, 100,true); + }; - $scope.add_pie_value = function () { - $scope.curWidget.config.values.push({ - name: '', - series_type: 'pie', - type: 'value', - cols: [] - }); + var saveWgtCallBack = function (serviceStatus) { + if (serviceStatus.status == '1') { + getWidgetList(); + getCategoryList(); + ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + } else { + ModalUtils.alert(serviceStatus.msg, "modal-warning", "lg"); } + }; - $scope.add_china_map_value = function () { - $scope.curWidget.config.values.push({ - name: '', - series_type: 'scatter', - type: 'value', - cols: [] - }); - }; - - $scope.add_style = function () { - $scope.curWidget.config.styles.push({ - proportion: '', - color: '' - }); - }; - - $scope.initColorPicker = function (index) { - $timeout(function() { - $("#color_"+index).colorpicker() - .on("changeColor", function(e){ - if($scope.curWidget.config.styles[e.target.id.split("_")[1]]){ - $scope.curWidget.config.styles[e.target.id.split("_")[1]].color = e.color.toHex(); - } - }); - }, 100,true); - }; - - var saveWgtCallBack = function (serviceStatus) { - if (serviceStatus.status == '1') { - getWidgetList(); - getCategoryList(); - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); - } else { - ModalUtils.alert(serviceStatus.msg, "modal-warning", "lg"); - } - }; - - $scope.saveWgt = function () { - $scope.liteMode = false; - if (!validation()) { - return; - } + $scope.saveWgt = function () { + //$scope.liteMode = false; + if (!validation()) { + return; + } - var o = {}; - o.name = $scope.widgetName.slice($scope.widgetName.lastIndexOf("/") + 1).trim(); - o.categoryName = $scope.widgetName.substring(0, $scope.widgetName.lastIndexOf("/")).trim(); - if (o.categoryName == '') { - o.categoryName = translate("COMMON.DEFAULT_CATEGORY"); - } - o.data = {}; - o.data.config = $scope.curWidget.config; - if ($scope.customDs) { - o.data.query = $scope.curWidget.query; - o.data.datasource = $scope.datasource.id; - } else { - o.data.datasetId = $scope.curWidget.datasetId; - } - o.data.expressions = _.filter($scope.curWidget.expressions, function (e) { - return !$scope.isDsExpression(e); - }); - o.data.filterGroups = _.filter($scope.curWidget.filterGroups, function (e) { - return !$scope.isDsFilter(e); - }); - $scope.alerts = []; - $scope.verify = {widgetName: true}; - - if (o.name == null || o.name == "") { - $scope.alerts = [{ - msg: translate('CONFIG.WIDGET.WIDGET_NAME') + translate('COMMON.NOT_EMPTY'), - type: 'danger' - }]; - $scope.verify = {widgetName: false}; - $("#widgetName").focus(); - return; - } else if (o.data.datasetId == undefined && $scope.customDs == false) { - $scope.alerts = [{ - msg: translate('CONFIG.WIDGET.DATASET') + translate('COMMON.NOT_EMPTY'), - type: 'danger' - }]; - return; - } + var o = {}; + o.name = $scope.widgetName.slice($scope.widgetName.lastIndexOf("/") + 1).trim(); + o.categoryName = $scope.widgetName.substring(0, $scope.widgetName.lastIndexOf("/")).trim(); + if (o.categoryName == '') { + o.categoryName = translate("COMMON.DEFAULT_CATEGORY"); + } + o.data = {}; + o.data.config = $scope.curWidget.config; + if ($scope.customDs) { + o.data.query = $scope.curWidget.query; + o.data.datasource = $scope.datasource.id; + } else { + o.data.datasetId = $scope.curWidget.datasetId; + } + o.data.expressions = _.filter($scope.curWidget.expressions, function (e) { + return !$scope.isDsExpression(e); + }); + o.data.filterGroups = _.filter($scope.curWidget.filterGroups, function (e) { + return !$scope.isDsFilter(e); + }); + $scope.alerts = []; + $scope.verify = {widgetName: true}; - if ($scope.optFlag == 'new') { - $http.post("dashboard/saveNewWidget.do", {json: angular.toJson(o)}).success(function (serviceStatus) { - if (serviceStatus.status == '1') { - getWidgetList(); - getCategoryList(); - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); - } else { - $scope.alerts = [{msg: serviceStatus.msg, type: 'danger'}]; - } - }); - } else if ($scope.optFlag == 'edit') { - o.id = $scope.widgetId; - $http.post(updateUrl, {json: angular.toJson(o)}).success(function (serviceStatus) { - if (serviceStatus.status == '1') { - getWidgetList(); - getCategoryList(); - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); - } else { - $scope.alerts = [{msg: serviceStatus.msg, type: 'danger'}]; - } - }); - } - }; + if (o.name == null || o.name == "") { + $scope.alerts = [{ + msg: translate('CONFIG.WIDGET.WIDGET_NAME') + translate('COMMON.NOT_EMPTY'), + type: 'danger' + }]; + $scope.verify = {widgetName: false}; + $("#widgetName").focus(); + return; + } else if (o.data.datasetId == undefined && $scope.customDs == false) { + $scope.alerts = [{ + msg: translate('CONFIG.WIDGET.DATASET') + translate('COMMON.NOT_EMPTY'), + type: 'danger' + }]; + return; + } - $scope.editWgt = function (widget) { - $http.post("dashboard/checkWidget.do", {id: widget.id}).success(function (response) { - if (response.status == '1') { - doEditWgt(widget); - if ($scope.customDs == true) $scope.doConfigParams(); + if ($scope.optFlag == 'new') { + $http.post("dashboard/saveNewWidget.do", {json: angular.toJson(o)}).success(function (serviceStatus) { + if (serviceStatus.status == '1') { + getWidgetList(); + getCategoryList(); + ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); } else { - var d = widget.data.datasetId ? 'CONFIG.WIDGET.DATASET' : 'CONFIG.WIDGET.DATA_SOURCE'; - ModalUtils.alert(translate("ADMIN.CONTACT_ADMIN") + ":" + translate(d) + '/' + response.msg, "modal-danger", "lg"); + $scope.alerts = [{msg: serviceStatus.msg, type: 'danger'}]; } }); - }; - - $scope.editCurWgt = function () { - var wgt = _.find($scope.widgetList, function (w) { - return w.id == $scope.widgetId; + } else if ($scope.optFlag == 'edit') { + o.id = $scope.widgetId; + $http.post(updateUrl, {json: angular.toJson(o)}).success(function (serviceStatus) { + if (serviceStatus.status == '1') { + getWidgetList(); + getCategoryList(); + ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + //Hide Widget List + $scope.showWidgetList = false; + } else { + $scope.alerts = [{msg: serviceStatus.msg, type: 'danger'}]; + } }); - if (wgt) { - $scope.editWgt(wgt); + } + $scope.showWidgetList = false; /*To hide Widget list*/ + }; + + $scope.editWgt = function (widget) { + $http.post("dashboard/checkWidget.do", {id: widget.id}).success(function (response) { + if (response.status == '1') { + doEditWgt(widget); + if ($scope.customDs == true) $scope.doConfigParams(); + } else { + var d = widget.data.datasetId ? 'CONFIG.WIDGET.DATASET' : 'CONFIG.WIDGET.DATA_SOURCE'; + ModalUtils.alert(translate("ADMIN.CONTACT_ADMIN") + ":" + translate(d) + '/' + response.msg, "modal-danger", "lg"); } - }; + }); + }; - var doEditWgt = function (widget) { - cleanPreview(); - $timeout(function () { - switchNode(widget.id) - }, 500); - switchNode(widget.id); - $('#preview_widget').html(''); - $scope.curWidget = angular.copy(widget.data); - if (!$scope.curWidget.expressions) { - $scope.curWidget.expressions = []; - } - if (!$scope.curWidget.filterGroups) { - $scope.curWidget.filterGroups = []; - } - updateService.updateConfig($scope.curWidget.config); - $scope.datasource = _.find($scope.datasourceList, function (ds) { - return ds.id == widget.data.datasource; - }); + $scope.editCurWgt = function () { + var wgt = _.find($scope.widgetList, function (w) { + return w.id == $scope.widgetId; + }); + if (wgt) { + $scope.editWgt(wgt); + } + }; + + var doEditWgt = function (widget) { + cleanPreview(); + $timeout(function () { + switchNode(widget.id) + }, 500); + switchNode(widget.id); + $('#preview_widget').html(''); + $scope.curWidget = angular.copy(widget.data); + if (!$scope.curWidget.expressions) { + $scope.curWidget.expressions = []; + } + if (!$scope.curWidget.filterGroups) { + $scope.curWidget.filterGroups = []; + } + updateService.updateConfig($scope.curWidget.config); + $scope.datasource = _.find($scope.datasourceList, function (ds) { + return ds.id == widget.data.datasource; + }); - $scope.widgetName = angular.copy(widget.categoryName + "/" + widget.name); + $scope.widgetName = angular.copy(widget.categoryName + "/" + widget.name); + + $scope.widgetId = widget.id; + $scope.optFlag = 'edit'; + $scope.showWidgetList = true; + $scope.customDs = _.isUndefined($scope.curWidget.datasetId); + loadDataset(function () { + loadDsExpressions(); + loadDsFilterGroups(); + buildSchema(); + dataService.linkDataset($scope.curWidget.datasetId, $scope.curWidget.config); + }); + addWatch(); + }; - $scope.widgetId = widget.id; - $scope.optFlag = 'edit'; - $scope.customDs = _.isUndefined($scope.curWidget.datasetId); - loadDataset(function () { - loadDsExpressions(); - loadDsFilterGroups(); - buildSchema(); - dataService.linkDataset($scope.curWidget.datasetId, $scope.curWidget.config); - }); - addWatch(); - }; + $scope.doCancel = function () { + //Hide Widget List + $scope.showWidgetList = false; - $scope.doCancel = function () { - if ($scope.optFlag == 'new') { - $scope.newConfig(); - $scope.filterSelect = {}; - cleanPreview(); - } else { - $scope.editCurWgt(); - } + if ($scope.optFlag == 'new') { + $scope.newConfig(); + $scope.filterSelect = {}; + cleanPreview(); + } else { + $scope.editCurWgt(); } - $scope.filterDimension = function (e) { - if (e.type == 'level') { - return true; - } - var keys = _.find($scope.curWidget.config.keys, function (k) { - return k.col == e.column; - }); - var groups = _.find($scope.curWidget.config.groups, function (k) { - return k.col == e.column; - }); - return !(keys || groups); - }; + $state.go('config.widget', { id: '' }, { notify: false, inherit: false }); + $scope.showWidgetList = false; - $scope.filterExpressions = function (e) { - var result = false; - _.each($scope.curWidget.config.values, function (v) { - _.each(v.cols, function (c) { - if (c.type == 'exp') { - if (e.id == c.id && e.alias == c.alias) { - result = true; - } - } - }); - }); - return !result; - }; - $scope.filterFilterGroup = function (e) { - var result = false; - _.each($scope.curWidget.config.filters, function (f) { - if (f.group) { - if (e.id == f.id && e.group == f.group) { + } + + $scope.filterDimension = function (e) { + if (e.type == 'level') { + return true; + } + var keys = _.find($scope.curWidget.config.keys, function (k) { + return k.col == e.column; + }); + var groups = _.find($scope.curWidget.config.groups, function (k) { + return k.col == e.column; + }); + return !(keys || groups); + }; + + $scope.filterExpressions = function (e) { + var result = false; + _.each($scope.curWidget.config.values, function (v) { + _.each(v.cols, function (c) { + if (c.type == 'exp') { + if (e.id == c.id && e.alias == c.alias) { result = true; } } }); - return !result; - }; - - $scope.refreshSchema = function () { - loadDataset(function () { - $scope.curWidget.expressions = []; - loadDsExpressions(); - $scope.curWidget.filterGroups = []; - loadDsFilterGroups(); - buildSchema(); - }); - } - - var buildSchema = function () { - var loadFromDataset = false; - if (!$scope.customDs) { - $scope.dataset = _.find($scope.datasetList, function (ds) { - return ds.id == $scope.curWidget.datasetId; - }); - if ($scope.dataset.data.schema && ($scope.dataset.data.schema.measure.length > 0 || $scope.dataset.data.schema.dimension.length > 0)) { - loadFromDataset = true; + }); + return !result; + }; + + $scope.filterFilterGroup = function (e) { + var result = false; + _.each($scope.curWidget.config.filters, function (f) { + if (f.group) { + if (e.id == f.id && e.group == f.group) { + result = true; } } - if (loadFromDataset) { - $scope.schema = $scope.dataset.data.schema; - $scope.alerts = []; - $scope.switchLiteMode(true); - } else { - $scope.loading = true; - dataService.getColumns({ - datasource: $scope.datasource ? $scope.datasource.id : null, - query: $scope.curWidget.query, - datasetId: $scope.customDs ? undefined : $scope.curWidget.datasetId, - reload: !$scope.loadFromCache, - callback: function (dps) { - $scope.loading = false; - $scope.alerts = []; - if (dps.msg == "1") { - $scope.schema = {selects: []}; - _.each(dps.columns, function (e) { - $scope.schema.selects.push({column: e}); - }); - $scope.switchLiteMode(true); - } else { - $scope.alerts = [{msg: dps.msg, type: 'danger'}]; - } - } - }); - } - }; + }); + return !result; + }; - $scope.deleteWgt = function (widget) { - ModalUtils.confirm(translate("COMMON.CONFIRM_DELETE"), "modal-info", "lg", function () { - $http.post("dashboard/deleteWidget.do", {id: widget.id}).success(function (serviceStatus) { - if (serviceStatus.status == '1') { - getWidgetList(); - } else { - ModalUtils.alert(serviceStatus.msg, "modal-warning", "lg"); - } - $scope.optFlag == 'none'; - }); + $scope.refreshSchema = function () { + loadDataset(function () { + $scope.curWidget.expressions = []; + loadDsExpressions(); + $scope.curWidget.filterGroups = []; + loadDsFilterGroups(); + buildSchema(); + }); + } + + var buildSchema = function () { + var loadFromDataset = false; + if (!$scope.customDs) { + $scope.dataset = _.find($scope.datasetList, function (ds) { + return ds.id == $scope.curWidget.datasetId; }); - }; + if ($scope.dataset.data.schema && ($scope.dataset.data.schema.measure.length > 0 || $scope.dataset.data.schema.dimension.length > 0)) { + loadFromDataset = true; + } + } + if (loadFromDataset) { + $scope.schema = $scope.dataset.data.schema; + $scope.alerts = []; + $scope.switchLiteMode(true); + } else { + $scope.loading = true; + dataService.getColumns({ + datasource: $scope.datasource ? $scope.datasource.id : null, + query: $scope.curWidget.query, + datasetId: $scope.customDs ? undefined : $scope.curWidget.datasetId, + reload: !$scope.loadFromCache, + callback: function (dps) { + $scope.loading = false; + $scope.alerts = []; + if (dps.msg == "1") { + $scope.schema = {selects: []}; + _.each(dps.columns, function (e) { + $scope.schema.selects.push({column: e}); + }); + $scope.switchLiteMode(true); + } else { + $scope.alerts = [{msg: dps.msg, type: 'danger'}]; + } + } + }); + } + }; - $scope.copyWgt = function (widget) { - var o = angular.copy(widget); - o.name = o.name + "_copy"; - $http.post("dashboard/saveNewWidget.do", {json: angular.toJson(o)}).success(function (serviceStatus) { + $scope.deleteWgt = function (widget) { + ModalUtils.confirm(translate('COMMON.CONFIRM_DELETE')+widget.name, 'modal-warning', 'lg', function () { + $http.post("dashboard/deleteWidget.do", { id: widget.id }).success(function (serviceStatus) { if (serviceStatus.status == '1') { getWidgetList(); - ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); } else { - ModalUtils.alert(serviceStatus.msg, "modal-warning", "lg"); + ModalUtils.alert(serviceStatus.msg, 'modal-warning', 'lg'); } $scope.optFlag == 'none'; }); - }; + }); + }; - $scope.getQueryView = function () { - if ($scope.datasource && $scope.datasource.name) { - return 'dashboard/getConfigView.do?type=' + $scope.datasource.type; + $scope.copyWgt = function (widget) { + var o = angular.copy(widget); + o.name = o.name + "_copy"; + $http.post("dashboard/saveNewWidget.do", {json: angular.toJson(o)}).success(function (serviceStatus) { + if (serviceStatus.status == '1') { + getWidgetList(); + ModalUtils.alert(translate("COMMON.SUCCESS"), "modal-success", "sm"); + } else { + ModalUtils.alert(serviceStatus.msg, "modal-warning", "lg"); } - }; + $scope.optFlag == 'none'; + }); + }; - $scope.getChartView = function () { - if ($scope.curWidget.config && $scope.curWidget.config.chart_type) { - return 'org/cboard/view/config/chart/' + $scope.curWidget.config.chart_type + '.html'; - } - }; + $scope.getQueryView = function () { + if ($scope.datasource && $scope.datasource.name) { + return 'dashboard/getConfigView.do?type=' + $scope.datasource.type; + } + }; - $scope.getOptionsView = function () { - var basePath = 'org/cboard/view/config/chart/options/'; - if ($scope.curWidget.config && $scope.curWidget.config.chart_type) { - return basePath + $scope.curWidget.config.chart_type + '.html'; - } + $scope.getChartView = function () { + if ($scope.curWidget.config && $scope.curWidget.config.chart_type) { + return 'org/cboard/view/config/chart/' + $scope.curWidget.config.chart_type + '.html'; } + }; - $scope.deleteValue = function (cols) { - _.each(cols, function (e) { - if (e.type == 'exp') { - $scope.expressions.push(e); - } - }); - }; + $scope.getOptionsView = function () { + var basePath = 'org/cboard/view/config/chart/options/'; + if ($scope.curWidget.config && $scope.curWidget.config.chart_type) { + return basePath + $scope.curWidget.config.chart_type + '.html'; + } + } - $scope.dndTransfer = { + $scope.deleteValue = function (cols) { + _.each(cols, function (e) { + if (e.type == 'exp') { + $scope.expressions.push(e); + } + }); + }; + + $scope.dndTransfer = { toCol: function (list, index, item, type) { if (type == 'key' || type == 'group' || type == 'filter') { list[index] = {col: item.col, aggregate_type: 'sum'}; @@ -1288,12 +1366,12 @@ cBoard.controller('widgetCtrl', function ($scope, $state, $stateParams, $http, $ list[index] = {col: item.col, type: 'eq', values: [], sort: 'asc'}; } else if (type == 'dimension' || type == 'select') { list[index] = { - alias: item.alias, - col: item.column, - level: item.level, - type: 'eq', - values: [], - sort: 'asc' + alias: item.alias, + col: item.column, + level: item.level, + type: 'eq', + values: [], + sort: 'asc' }; if (type == 'dimension') { list[index].id = item.id; @@ -1304,406 +1382,636 @@ cBoard.controller('widgetCtrl', function ($scope, $state, $stateParams, $http, $ column.level = level.alias; return column; } - }; - - $scope.selectsByFilter = []; - $scope.selects = []; - $scope.editFilter = function (setbackArr, setbackIdx) { - $uibModal.open({ - templateUrl: 'org/cboard/view/dashboard/modal/param.html', - windowTemplateUrl: 'org/cboard/view/util/modal/window.html', - backdrop: false, - size: 'lg', - resolve: { - param: function () { - var item = setbackArr[setbackIdx]; - if (item.col) { - if (item.type == 'eq') { - item.type = '='; - } else if (item.type == 'ne') { - item.type = '≠'; - } - return angular.copy(item); - } else { - return {col: item, type: '=', values: []} - } - }, - filter: function () { - return true; - }, - getSelects: function () { - return function (byFilter, column, callback) { - var config = undefined; - if (byFilter) { - config = angular.copy($scope.curWidget.config); - var arr = _.findKey($scope.curWidget.config, function (o) { - return o == setbackArr; - }); - config[arr].splice(setbackIdx, 1); - } - dataService.getDimensionValues($scope.datasource ? $scope.datasource.id : null, $scope.curWidget.query, $scope.customDs ? undefined : $scope.curWidget.datasetId, column, config, function (filtered) { - callback(filtered); - }); - }; - }, - ok: function () { - return function (param) { - setbackArr[setbackIdx] = param; + }; + + $scope.selectsByFilter = []; + $scope.selects = []; + $scope.editFilter = function (setbackArr, setbackIdx) { + $uibModal.open({ + templateUrl: 'org/cboard/view/dashboard/modal/param.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + resolve: { + param: function () { + var item = setbackArr[setbackIdx]; + if (item.col) { + if (item.type == 'eq') { + item.type = '='; + } else if (item.type == 'ne') { + item.type = '≠'; } + return angular.copy(item); + } else { + return {col: item, type: '=', values: []} } }, - controller: 'paramSelector' - }); - }; - - $scope.editVFilter = function (o) { - $uibModal.open({ - templateUrl: 'org/cboard/view/config/modal/vfilter.html', - windowTemplateUrl: 'org/cboard/view/util/modal/window.html', - backdrop: false, - size: 'lg', - controller: function ($scope, $uibModalInstance) { - $scope.type = ['=', '≠', '>', '<', '≥', '≤', '(a,b]', '[a,b)', '(a,b)', '[a,b]']; - $scope.f_type = o.f_type ? o.f_type : '>'; - $scope.f_values = o.f_values ? o.f_values : []; - $scope.f_top = o.f_top ? o.f_top : ''; - $scope.close = function () { - $uibModalInstance.close(); - }; - $scope.ok = function () { - o.f_type = $scope.f_type; - o.f_values = $scope.f_values; - o.f_top = $scope.f_top; - $uibModalInstance.close(); + filter: function () { + return true; + }, + getSelects: function () { + return function (byFilter, column, callback) { + var config = undefined; + if (byFilter) { + config = angular.copy($scope.curWidget.config); + var arr = _.findKey($scope.curWidget.config, function (o) { + return o == setbackArr; + }); + config[arr].splice(setbackIdx, 1); + } + dataService.getDimensionValues($scope.datasource ? $scope.datasource.id : null, $scope.curWidget.query, $scope.customDs ? undefined : $scope.curWidget.datasetId, column, config, function (filtered) { + callback(filtered); + }); }; + }, + ok: function () { + return function (param) { + setbackArr[setbackIdx] = param; + } + } + }, + controller: 'paramSelector' + }); + }; + + $scope.editVFilter = function (o) { + $uibModal.open({ + templateUrl: 'org/cboard/view/config/modal/vfilter.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + controller: function ($scope, $uibModalInstance) { + $scope.type = ['=', '≠', '>', '<', '≥', '≤', '(a,b]', '[a,b)', '(a,b)', '[a,b]']; + $scope.f_type = o.f_type ? o.f_type : '>'; + $scope.f_values = o.f_values ? o.f_values : []; + $scope.f_top = o.f_top ? o.f_top : ''; + $scope.close = function () { + $uibModalInstance.close(); + }; + $scope.ok = function () { + o.f_type = $scope.f_type; + o.f_values = $scope.f_values; + o.f_top = $scope.f_top; + $uibModalInstance.close(); + }; + } + }); + }; + + var schemaToSelect = function (schema) { + if (schema.selects) { + return angular.copy(schema.selects); + } else { + var selects = []; + selects = selects.concat(schema.measure); + _.each(schema.dimension, function (e) { + if (e.type == 'level') { + _.each(e.columns, function (c) { + selects.push(c); + }); + } else { + selects.push(e); } }); - }; - - var schemaToSelect = function (schema) { - if (schema.selects) { - return angular.copy(schema.selects); - } else { - var selects = []; - selects = selects.concat(schema.measure); - _.each(schema.dimension, function (e) { - if (e.type == 'level') { - _.each(e.columns, function (c) { - selects.push(c); - }); + return angular.copy(selects); + } + }; + + $scope.editFilterGroup = function (col) { + var columnObjs = schemaToSelect($scope.schema); + $uibModal.open({ + templateUrl: 'org/cboard/view/config/modal/filterGroup.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + scope: $scope, + controller: function ($scope, $uibModalInstance) { + if (col) { + $scope.data = angular.copy(col); + } else { + $scope.data = {group: '', filters: []}; + } + $scope.columnObjs = columnObjs; + $scope.close = function () { + $uibModalInstance.close(); + }; + $scope.addColumn = function (str) { + $scope.data.filters.push({col: str, type: '=', values: []}) + }; + $scope.ok = function () { + if (col) { + col.group = $scope.data.group; + col.filters = $scope.data.filters; } else { - selects.push(e); + $scope.curWidget.filterGroups.push($scope.data); } + $uibModalInstance.close(); + }; + $scope.editFilter = function (filter) { + $uibModal.open({ + templateUrl: 'org/cboard/view/dashboard/modal/param.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + size: 'lg', + resolve: { + param: function () { + return angular.copy(filter); + }, + filter: function () { + return false; + }, + getSelects: function () { + return function (byFilter, column, callback) { + dataService.getDimensionValues($scope.datasource ? $scope.datasource.id : null, $scope.curWidget.query, $scope.curWidget.datasetId, column, undefined, function (filtered) { + callback(filtered); + }); + }; + }, + ok: function () { + return function (param) { + filter.type = param.type; + filter.values = param.values; + } + } + }, + controller: 'paramSelector' + }); + }; + } + }); + }; + + $scope.editSort = function (o) { + switch (o.sort) { + case 'asc': + o.sort = 'desc'; + break; + case 'desc': + o.sort = undefined; + break; + default: + o.sort = 'asc'; + break; + } + }; + + $scope.cleanVSort = function () { + _.each($scope.curWidget.config.values, function (v) { + _.each(v.cols, function (c) { + c.sort = undefined; + }); + }); + }; + + $scope.editAlign = function (o) { + switch (o.align) { + case undefined: + o.align = 'left'; + break; + case 'left': + o.align = 'right'; + break; + default: + o.align = undefined; + break; + } + }; + + $scope.cleanRowSort = function (o) { + var sort = o.sort; + _.each($scope.curWidget.config.keys, function (k) { + k.sort = undefined; + }); + $scope.cleanVSort(); + o.sort = sort; + }; + + /** js tree related start... **/ + $scope.treeConfig = jsTreeConfig1; + + $("#" + treeID).keyup(function (e) { + if (e.keyCode == 46) { + $scope.deleteNode(); + } + }); + + var getSelectedWidget = function () { + var selectedNode = jstree_GetSelectedNodes(treeID)[0]; + return _.find($scope.widgetList, function (w) { + return w.id == selectedNode.id; + }); + }; + + var checkTreeNode = function (actionType) { + return jstree_CheckTreeNode(actionType, treeID, ModalUtils.alert); + }; + + var switchNode = function (id) { + $scope.ignoreChanges = false; + var widgetTree = jstree_GetWholeTree(treeID); + widgetTree.deselect_all(); + widgetTree.select_node(id); + }; + + $scope.applyModelChanges = function () { + return !$scope.ignoreChanges; + }; + $scope.showInfo = function () { + if (!checkTreeNode("info")) return; + var content = getSelectedWidget(); + ModalUtils.info(content,"modal-info", "lg"); + }; + $scope.copyNode = function () { + if (!checkTreeNode("copy")) return; + $scope.copyWgt(getSelectedWidget()); + }; + + $scope.editNode = function () { + if (!checkTreeNode("edit")) return; + var selectedNode = jstree_GetSelectedNodes(treeID)[0]; + $state.go('config.widget', {id: selectedNode.id}, {notify: false, inherit: false}); + $scope.editWgt(getSelectedWidget()); + }; + + $scope.deleteNode = function () { + if (!checkTreeNode("delete")) return; + $scope.deleteWgt(getSelectedWidget()); + }; + $scope.searchNode = function () { + var para = {wgtName: '', dsName: '', dsrName: ''}; + + //map widgetList to list (add datasetName and datasourceName) + var list = $scope.widgetList.map(function (w) { + var ds = _.find($scope.datasetList, function (obj) { + return obj.id == w.data.datasetId + }); + var dsrName = ''; + var dsr; + if (ds) { + dsr = _.find($scope.datasourceList, function (obj) { + return obj.id == ds.data.datasource + }); + } else if (w.data.datasource) { + dsr = _.find($scope.datasourceList, function (obj) { + return obj.id == w.data.datasource }); - return angular.copy(selects); } - }; + return { + "id": w.id, + "name": w.name, + "categoryName": w.categoryName, + "datasetName": ds ? ds.name : '', + "datasourceName": dsr ? dsr.name : dsrName + }; + }); - $scope.editFilterGroup = function (col) { - var columnObjs = schemaToSelect($scope.schema); - $uibModal.open({ - templateUrl: 'org/cboard/view/config/modal/filterGroup.html', - windowTemplateUrl: 'org/cboard/view/util/modal/window.html', - backdrop: false, - scope: $scope, - controller: function ($scope, $uibModalInstance) { - if (col) { - $scope.data = angular.copy(col); - } else { - $scope.data = {group: '', filters: []}; + //split search keywords + if ($scope.keywords) { + if ($scope.keywords.indexOf(' ') == -1 && $scope.keywords.indexOf(':') == -1) { + para.wgtName = $scope.keywords; + } else { + var keys = $scope.keywords.split(' '); + for (var i = 0; i < keys.length; i++) { + var w = keys[i].trim(); + if (w.split(':')[0] == 'wg') { + para["wgtName"] = w.split(':')[1]; + } + if (w.split(':')[0] == 'ds') { + para["dsName"] = w.split(':')[1]; + } + if (w.split(':')[0] == 'dsr') { + para["dsrName"] = w.split(':')[1]; } - $scope.columnObjs = columnObjs; - $scope.close = function () { - $uibModalInstance.close(); - }; - $scope.addColumn = function (str) { - $scope.data.filters.push({col: str, type: '=', values: []}) - }; - $scope.ok = function () { - if (col) { - col.group = $scope.data.group; - col.filters = $scope.data.filters; - } else { - $scope.curWidget.filterGroups.push($scope.data); - } - $uibModalInstance.close(); - }; - $scope.editFilter = function (filter) { - $uibModal.open({ - templateUrl: 'org/cboard/view/dashboard/modal/param.html', - windowTemplateUrl: 'org/cboard/view/util/modal/window.html', - backdrop: false, - size: 'lg', - resolve: { - param: function () { - return angular.copy(filter); - }, - filter: function () { - return false; - }, - getSelects: function () { - return function (byFilter, column, callback) { - dataService.getDimensionValues($scope.datasource ? $scope.datasource.id : null, $scope.curWidget.query, $scope.curWidget.datasetId, column, undefined, function (filtered) { - callback(filtered); - }); - }; - }, - ok: function () { - return function (param) { - filter.type = param.type; - filter.values = param.values; - } - } - }, - controller: 'paramSelector' - }); - }; } - }); - }; - - $scope.editSort = function (o) { - switch (o.sort) { - case 'asc': - o.sort = 'desc'; - break; - case 'desc': - o.sort = undefined; - break; - default: - o.sort = 'asc'; - break; } - }; + } + //filter data by keywords + originalData = jstree_CvtVPath2TreeData( + $filter('filter')(list, {name: para.wgtName, datasetName: para.dsName, datasourceName: para.dsrName}) + ); - $scope.cleanVSort = function () { - _.each($scope.curWidget.config.values, function (v) { - _.each(v.cols, function (c) { - c.sort = undefined; - }); - }); - }; + jstree_ReloadTree(treeID, originalData); + }; - $scope.editAlign = function (o) { - switch (o.align) { - case undefined: - o.align = 'left'; - break; - case 'left': - o.align = 'right'; - break; - default: - o.align = undefined; - break; + $scope.treeEventsObj = function () { + var baseEventObj = jstree_baseTreeEventsObj({ + ngScope: $scope, ngHttp: $http, ngTimeout: $timeout, + treeID: treeID, listName: "widgetList", updateUrl: updateUrl + }); + return baseEventObj; + }(); + + $scope.doConfigParams = function () { + $http.get('dashboard/getConfigParams.do', { + params: { + type: $scope.datasource.type, + datasourceId: $scope.datasource.id, + page: 'widget.html' } - }; + }).then(function (response) { + $scope.params = response.data; + }); + }; + + $scope.changeDs = function () { + $scope.curWidget.query = {}; + $http.get('dashboard/getConfigParams.do', { + params: { + type: $scope.datasource.type, + datasourceId: $scope.datasource.id, + page: 'widget.html' + } + }).then(function (response) { + $scope.params = response.data; + for (var i in $scope.params) { + var name = $scope.params[i].name; + var value = $scope.params[i].value; + var checked = $scope.params[i].checked; + var type = $scope.params[i].type; + if (type == "checkbox" && checked == true) { + $scope.curWidget.query[name] = true; + } + if (type == "number" && value != "" && !isNaN(value)) { + $scope.curWidget.query[name] = Number(value); + } else if (value != "") { + $scope.curWidget.query[name] = value; + } + } + }); + }; - $scope.cleanRowSort = function (o) { - var sort = o.sort; - _.each($scope.curWidget.config.keys, function (k) { - k.sort = undefined; - }); - $scope.cleanVSort(); - o.sort = sort; - }; + $scope.setCities = function () { + $scope.cities = []; + var province = _.find($scope.provinces, function (e) { + return e.code == $scope.curWidget.config.province.code; + }); + if (province && province.cities) { + $scope.cities = province.cities; + } else if ($scope.curWidget.config.city && $scope.curWidget.config.city.code) { + $scope.curWidget.config.city.code = ""; + } + } + /** js tree related End... **/ - /** js tree related start... **/ - $scope.treeConfig = jsTreeConfig1; + $scope.targetHighlight = { + row: false, column: false, value: false, filter: false + }; + + $scope.onDragstart = function (type) { + switch (type) { + case 'dimension': + $scope.targetHighlight = {row: true, column: true, value: false, filter: true}; + break; + case 'measure': + case 'exp': + $scope.targetHighlight = {row: false, column: false, value: true, filter: false}; + break; + case 'filterGroup': + $scope.targetHighlight.filter = true; + break; + case 'select': + $scope.targetHighlight = {row: true, column: true, value: true, filter: true}; + break; + } + }; + + $scope.onDragCancle = function () { + $timeout($scope.targetHighlight = { + row: false, column: false, value: false, filter: false + }, 500); + }; + + /** Ace Editor Starer... **/ + $scope.queryAceOpt = datasetEditorOptions(); + + /** + * editNodeWithClick() + */ + $scope.editNodeOnClick = function (evt, selectedId) { + + //hide list + $scope.showWidgetList = true; + $state.go('config.widget', { id: selectedId }, { notify: false, inherit: false }); + $scope.editWgt(getSelectedWidgetOnClick(selectedId)); + }; + + /** + * Returns the widgetId + * @param {selectedId} + */ + + var getSelectedWidgetOnClick = function (selectedId) { + //var selectedNode = jstree_GetSelectedNodes(treeID)[0]; + return _.find($scope.widgetList, function (w) { + return w.id == selectedId; + }); + }; + + /** + * + * @param {*Event} evt + * @param {*string} selectedId + */ + $scope.showInfoOnClick = function (evt, selectedId) { + var content = getSelectedWidgetOnClick(selectedId); + ModalUtils.info(content, 'modal-info', 'lg'); + } - $("#" + treeID).keyup(function (e) { - if (e.keyCode == 46) { - $scope.deleteNode(); + /** + * + * @param {*$event} event + * @param {*object} wgtObj + * @param {*string} id + */ + $scope.newWgtOnClick = function () { + //hide the widget list + $scope.showWidgetList = true; + + $scope.curWidget = {}; + $scope.curWidget.config = {}; + $scope.curWidget.config.option = {}; + $scope.curWidget.expressions = []; + $scope.curWidget.filterGroups = []; + $scope.curWidget.query = {}; + $scope.datasource = null; + $scope.widgetName = null; + $scope.widgetCategory = null; + $scope.widgetId = null; + $scope.optFlag = 'new'; + $scope.customDs = false; + $scope.schema = null; + $scope.liteMode = false; + //clean the preview + cleanPreview(); + addValidateWatch(); + } + + /** + * Returns the widgetId + * @param {selectedId} + * This is a utility function which helps to findout the widget-id + */ + var getSelectedWidgetOnClick = function (selectedId) { + return _.find($scope.widgetList, function (w) { + return w.id == selectedId; + }); + }; + + /** + * + * @param {*wdget} widget + */ + $scope.copyWgtOnClick = function (widget) { + var o = angular.copy(widget); + o.name = o.name + "_copy"; + $http.post("dashboard/saveNewWidget.do", { json: angular.toJson(o) }).success(function (serviceStatus) { + if (serviceStatus.status == '1') { + getWidgetList(); + ModalUtils.alert(translate('COMMON.SUCCESS'), 'modal-success', 'sm'); + } else { + ModalUtils.alert(serviceStatus.msg, 'modal-warning', 'lg'); } + $scope.optFlag == 'none'; }); + }; - var getSelectedWidget = function () { - var selectedNode = jstree_GetSelectedNodes(treeID)[0]; - return _.find($scope.widgetList, function (w) { - return w.id == selectedNode.id; - }); - }; - var checkTreeNode = function (actionType) { - return jstree_CheckTreeNode(actionType, treeID, ModalUtils.alert); - }; + $rootScope.refreshPreview = function() { + $scope.preview(); + } - var switchNode = function (id) { - $scope.ignoreChanges = false; - var widgetTree = jstree_GetWholeTree(treeID); - widgetTree.deselect_all(); - widgetTree.select_node(id); - }; - $scope.applyModelChanges = function () { - return !$scope.ignoreChanges; - }; - $scope.showInfo = function () { - if (!checkTreeNode("info")) return; - var content = getSelectedWidget(); - ModalUtils.info(content,"modal-info", "lg"); - }; - $scope.copyNode = function () { - if (!checkTreeNode("copy")) return; - $scope.copyWgt(getSelectedWidget()); - }; + /* + * Code for pagination + */ + $scope.pageSize = 10; + $scope.currentPage = 1; + $scope.cubeNameArr = []; - $scope.editNode = function () { - if (!checkTreeNode("edit")) return; - var selectedNode = jstree_GetSelectedNodes(treeID)[0]; - $state.go('config.widget', {id: selectedNode.id}, {notify: false, inherit: false}); - $scope.editWgt(getSelectedWidget()); - }; + var pageSizeArr = [5, 10, 15, 20, 25, 30, 40, 50, 60, 70, 80, 90, 100, 'ALL']; + $scope.pageSizeArr = pageSizeArr; + var changePageSize = function(pagesize) { + if($scope.pageSize == 'ALL') { + $scope.pageSize = $scope.widgetList.length; + } + else { + $scope.pageSize = pagesize; + } + } + $scope.changePageSize = changePageSize; - $scope.deleteNode = function () { - if (!checkTreeNode("delete")) return; - $scope.deleteWgt(getSelectedWidget()); - }; - $scope.searchNode = function () { - var para = {wgtName: '', dsName: '', dsrName: ''}; - //map widgetList to list (add datasetName and datasourceName) - var list = $scope.widgetList.map(function (w) { - var ds = _.find($scope.datasetList, function (obj) { - return obj.id == w.data.datasetId - }); - var dsrName = ''; - var dsr; - if (ds) { - dsr = _.find($scope.datasourceList, function (obj) { - return obj.id == ds.data.datasource - }); - } else if (w.data.datasource) { - dsr = _.find($scope.datasourceList, function (obj) { - return obj.id == w.data.datasource - }); - } - return { - "id": w.id, - "name": w.name, - "categoryName": w.categoryName, - "datasetName": ds ? ds.name : '', - "datasourceName": dsr ? dsr.name : dsrName - }; + var renderGridChart = function (chartData) { + var columnList = chartData.columnList; + var columnData = chartData.data; + var gridDataArr = []; + var gridRowObj = {}; + + columnData.forEach(function(cd) { + gridRowObj = {}; + columnList.forEach(function (val, index) { + gridRowObj[val.name] = cd[index]; }); + gridDataArr.push(gridRowObj); + }); - //split search keywords - if ($scope.keywords) { - if ($scope.keywords.indexOf(' ') == -1 && $scope.keywords.indexOf(':') == -1) { - para.wgtName = $scope.keywords; - } else { - var keys = $scope.keywords.split(' '); - for (var i = 0; i < keys.length; i++) { - var w = keys[i].trim(); - if (w.split(':')[0] == 'wg') { - para["wgtName"] = w.split(':')[1]; - } - if (w.split(':')[0] == 'ds') { - para["dsName"] = w.split(':')[1]; - } - if (w.split(':')[0] == 'dsr') { - para["dsrName"] = w.split(':')[1]; - } - } - } - } - //filter data by keywords - originalData = jstree_CvtVPath2TreeData( - $filter('filter')(list, {name: para.wgtName, datasetName: para.dsName, datasourceName: para.dsrName}) - ); + var measureClmArr = []; + $scope.measureColumns.forEach(function(value, index) { + value.forEach(function(v, i) { + measureClmArr.push(v.col); + }) + }); - jstree_ReloadTree(treeID, originalData); - }; - $scope.treeEventsObj = function () { - var baseEventObj = jstree_baseTreeEventsObj({ - ngScope: $scope, ngHttp: $http, ngTimeout: $timeout, ModalUtils: ModalUtils, - treeID: treeID, listName: "widgetList", updateUrl: updateUrl - }); - return baseEventObj; - }(); - - $scope.doConfigParams = function () { - $http.get('dashboard/getConfigParams.do', { - params: { - type: $scope.datasource.type, - datasourceId: $scope.datasource.id, - page: 'widget.html' - } - }).then(function (response) { - $scope.params = response.data; - }); - }; + var columnObj = { "field": "", "headerText": "", "width": "", textAlign: 'middle' }; + var columnsArr = columnList.map(function(clmObj) { + columnObj = {}; + columnObj.field = clmObj.name; + columnObj.headerText = clmObj.name; + columnObj.width = 100; + columnObj.minWidth = 120; + columnObj.maxWidth = 300; + columnObj.textAlign = 'left'; + if(clmObj.aggType != undefined || clmObj.aggType != null) + columnObj.textAlign = 'right'; - $scope.changeDs = function () { - $scope.curWidget.query = {}; - $http.get('dashboard/getConfigParams.do', { - params: { - type: $scope.datasource.type, - datasourceId: $scope.datasource.id, - page: 'widget.html' - } - }).then(function (response) { - $scope.params = response.data; - for (var i in $scope.params) { - var name = $scope.params[i].name; - var value = $scope.params[i].value; - var checked = $scope.params[i].checked; - var type = $scope.params[i].type; - if (type == "checkbox" && checked == true) { - $scope.curWidget.query[name] = true; - } - if (type == "number" && value != "" && !isNaN(value)) { - $scope.curWidget.query[name] = Number(value); - } else if (value != "") { - $scope.curWidget.query[name] = value; - } - } - }); - }; + return columnObj; + }); - $scope.setCities = function () { - $scope.cities = []; - var province = _.find($scope.provinces, function (e) { - return e.code == $scope.curWidget.config.province.code; - }); - if (province && province.cities) { - $scope.cities = province.cities; - } else if ($scope.curWidget.config.city && $scope.curWidget.config.city.code) { - $scope.curWidget.config.city.code = ""; - } - } - /** js tree related End... **/ + ej.base.enableRipple(true); - $scope.targetHighlight = { - row: false, column: false, value: false, filter: false - }; + var gridConfiguration = getGridConfiguration(gridDataArr, columnsArr, measureClmArr, $scope.dimensionColumns); - $scope.onDragstart = function (type) { - switch (type) { - case 'dimension': - $scope.targetHighlight = {row: true, column: true, value: false, filter: true}; - break; - case 'measure': - case 'exp': - $scope.targetHighlight = {row: false, column: false, value: true, filter: false}; - break; - case 'filterGroup': - $scope.targetHighlight.filter = true; - break; - case 'select': - $scope.targetHighlight = {row: true, column: true, value: true, filter: true}; - break; + var grid = new ej.grids.Grid(gridConfiguration); + + grid.appendTo('#preview'); + + grid.toolbarClick = function (args) { + if (args.item.id === 'preview_pdfexport') { + grid.pdfExport(); + } + if (args.item.id === 'preview_excelexport') { + grid.excelExport(); + } + if (args.item.id === 'preview_csvexport') { + grid.csvExport(); } }; - $scope.onDragCancle = function () { - $timeout($scope.targetHighlight = { - row: false, column: false, value: false, filter: false - }, 500); - }; + //hide the loader + $scope.loadingPre = false; + } - /** Ace Editor Starer... **/ - $scope.queryAceOpt = datasetEditorOptions(); + /** + * Provides grid configuration + * + * @param {*} gridDataArr + * @param {*} columnsArr + */ + var getGridConfiguration = function (gridDataArr, columnsArr, measureClmArr, dimensionClmArr) { + return { + dataSource: gridDataArr, + allowPaging: true, + allowSorting: true, + allowGrouping: true, + allowExcelExport: true, + allowPdfExport: true, + allowResizing: true, + allowFiltering: true, + filterSettings: {type:'menu'}, + toolbar: ['excelexport', 'pdfexport', 'csvexport', 'search'], + groupSettings: { columns: dimensionClmArr }, + //height: 500, + columns: columnsArr, + pageSettings: { pageCount: 5, pageSize: 5 }, + aggregates: [{ + columns: $scope.aggregateClmns + }] + }; + }; + + /** + * Used to find measure columns + * @param {*} config + */ + var getSelectedMeasureColumns = function(config) { + var measureColumns = config.values.map(function(cfgVal) { + var columns = cfgVal.cols; + return columns; + }); + return measureColumns; + }; + + /** + * Get the dimension Columns + * @param {*} config + */ + var getSelectedDimensionColumns = function(config) { + var dimensionColumns = config.groups.map(function(cfgGrp) { + var columns = cfgGrp.col; + return columns; + }); + return dimensionColumns; } -) -; + +} +); diff --git a/src/main/webapp/org/cboard/controller/dashboard/dashboardViewCtrl.js b/src/main/webapp/org/cboard/controller/dashboard/dashboardViewCtrl.js index 77c91b50f..ab9247f56 100644 --- a/src/main/webapp/org/cboard/controller/dashboard/dashboardViewCtrl.js +++ b/src/main/webapp/org/cboard/controller/dashboard/dashboardViewCtrl.js @@ -91,6 +91,40 @@ cBoard.controller('dashboardViewCtrl', function ($timeout, $rootScope, $scope, $ if (charType == 'chinaMapBmap') { chartService.render(content, injectFilter(widget.widget).data, optionFilter, scope, reload); widget.loading = false; + } else if (charType == 'grid') { + widget.loading = false; + //Fetch the data + var wdgt = injectFilter(widget.widget).data; + var config = wdgt.config; + var dataSource = wdgt.datasource ? wdgt.datasource.id : null; + var query = wdgt.query; + var datasetId = wdgt.datasetId; + //Fetch the measure columns + $scope.measureColumns = getSelectedMeasureColumns(config); + $scope.dimensionColumns = getSelectedDimensionColumns(config); + + var aggregateClmnsObj = { + "type":'', + "field":"", + "groupFooterTemplate": 'Total units: ${sum}' + }; + + $scope.aggregateClmns = []; + + $scope.measureColumns.forEach(function(value, index) { + value.forEach(function(v, i) { + var aggregate_type = v.aggregate_type; + aggregateClmnsObj = {}; + aggregateClmnsObj.type = v.aggregate_type; + aggregateClmnsObj.field = v.col; + aggregateClmnsObj.groupFooterTemplate = 'Total '+ v.col +': ${'+aggregate_type+'}'; + $scope.aggregateClmns.push(aggregateClmnsObj); + }) + }); + + dataService.getRawData(dataSource, query, datasetId, config).then(function (response) { + renderGridChart(response); + }); } else { chartService.render(content, injectFilter(widget.widget).data, optionFilter, scope, reload, null, widget.relations).then(function (d) { widget.realTimeTicket = d; @@ -102,20 +136,20 @@ cBoard.controller('dashboardViewCtrl', function ($timeout, $rootScope, $scope, $ widget.modalRender = function (content, optionFilter, scope) { widget.modalLoading = true; widget.modalRealTimeTicket = chartService.render(content, injectFilter(widget.widget).data, optionFilter, scope) - .then(function () { - widget.modalLoading = false; - }); + .then(function () { + widget.modalLoading = false; + }); widget.modalRealTimeOption = {optionFilter: optionFilter, scope: scope}; }; }; $rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState) { - if (fromState.controller == 'dashboardViewCtrl') { - _.each($scope.intervals, function (i) { - $interval.cancel(i); - }) - } + if (fromState.controller == 'dashboardViewCtrl') { + _.each($scope.intervals, function (i) { + $interval.cancel(i); + }) } + } ); $scope.export = function () { @@ -157,12 +191,12 @@ cBoard.controller('dashboardViewCtrl', function ($timeout, $rootScope, $scope, $ }; var initDsReloadStatus = function (reload) { - var dsReloadStatus = {}; + var dsReloadStatus = new Map(); _.each($scope.board.layout.rows, function (row) { _.each(row.widgets, function (widget) { var dataSetId = widget.widget.data.datasetId; if (dataSetId != undefined) { - dsReloadStatus[dataSetId] = reload; + dsReloadStatus.set(dataSetId, reload); } }); }); @@ -181,8 +215,8 @@ cBoard.controller('dashboardViewCtrl', function ($timeout, $rootScope, $scope, $ var needReload = reload; // avoid repeat load offline dataset data if (dataSetId != undefined && reload) { - var needReload = dsReloadStatus[dataSetId] ? true : false; - dsReloadStatus[dataSetId] = false; + var needReload = dsReloadStatus.get(dataSetId) ? true : false; + dsReloadStatus.set(dataSetId, false); } buildRender(widget, needReload); widget.loading = true; @@ -326,9 +360,9 @@ cBoard.controller('dashboardViewCtrl', function ($timeout, $rootScope, $scope, $ } _.each(param.col, function (col) { var p = { - col: col.column, - type: param.type, - values: param.values + col: col.column, + type: param.type, + values: param.values }; if (_.isUndefined(col.datasetId)) { if (!$scope.widgetFilters[col.widgetId]) { @@ -354,9 +388,9 @@ cBoard.controller('dashboardViewCtrl', function ($timeout, $rootScope, $scope, $ if (relations[i].targetId && relations[i].params && relations[i].params.length > 0) { for (var j = 0; j < relations[i].params.length; j++) { var p = { - col: relations[i].params[j].targetField, - type: "=", - values: [relations[i].params[j].value] + col: relations[i].params[j].targetField, + type: "=", + values: [relations[i].params[j].value] }; if (!$scope.relationFilters[relations[i].targetId]) { $scope.relationFilters[relations[i].targetId] = []; @@ -404,22 +438,22 @@ cBoard.controller('dashboardViewCtrl', function ($timeout, $rootScope, $scope, $ $scope.render1 = function () { widget.modalRender($('#modal_chart'), function (option) { option.toolbox = { - feature: { - //saveAsImage: {}, - dataView: { - show: true, - readOnly: true - }, - magicType: { - type: ['line', 'bar', 'stack', 'tiled'] - }, - dataZoom: { - show: true - }, - restore: { - show: true + feature: { + //saveAsImage: {}, + dataView: { + show: true, + readOnly: true + }, + magicType: { + type: ['line', 'bar', 'stack', 'tiled'] + }, + dataZoom: { + show: true + }, + restore: { + show: true + } } - } }; }, null); }; @@ -448,9 +482,9 @@ cBoard.controller('dashboardViewCtrl', function ($timeout, $rootScope, $scope, $ $scope.config = function (widget) { $state.go('config.widget', {id: widget.widget.id}); }; - + $scope.skip = function (widget) { - $state.go('dashboard.category.view', {id: widget.extenal.targetId}); + $state.go('dashboard.category.view', {id: widget.extenal.targetId}); }; $scope.reload = function (widget) { @@ -570,4 +604,108 @@ cBoard.controller('dashboardViewCtrl', function ($timeout, $rootScope, $scope, $ }); } + var renderGridChart = function (chartData) { + var columnList = chartData.columnList; + var columnData = chartData.data; + var gridDataArr = []; + var gridRowObj = {}; + columnData.forEach(function(cd) { + gridRowObj = {}; + columnList.forEach(function (val, index) { + gridRowObj[val.name] = cd[index]; + }); + gridDataArr.push(gridRowObj); + }); + + var columnObj = { "field": "", "headerText": "", "width": "", textAlign: 'middle' }; + var columnsArr = columnList.map(function(clmObj) { + columnObj = {}; + columnObj.field = clmObj.name; + columnObj.headerText = clmObj.name; + columnObj.width = 100; + columnObj.minWidth = 120; + columnObj.maxWidth = 300; + + columnObj.textAlign = 'left'; + if(clmObj.aggType != undefined || clmObj.aggType != null) + columnObj.textAlign = 'right'; + + return columnObj; + }); + + var measureClmArr = []; + $scope.measureColumns.forEach(function(value, index) { + value.forEach(function(v, i) { + measureClmArr.push(v.col); + }) + }); + + ej.base.enableRipple(true); + var gridConfiguration = getGridConfiguration(gridDataArr, columnsArr, measureClmArr, $scope.dimensionColumns); + + var grid = new ej.grids.Grid(gridConfiguration); + + grid.appendTo('#preview'); + + grid.toolbarClick = function (args) { + if (args.item.id === 'preview_pdfexport') { + grid.pdfExport(); + } + if (args.item.id === 'preview_excelexport') { + grid.excelExport(); + } + if (args.item.id === 'preview_csvexport') { + grid.csvExport(); + } + }; + //hide the loader + $scope.loadingPre = false; + } + + var getGridConfiguration = function (gridDataArr, columnsArr, measureClmArr, dimensionClmArr) { + return { + dataSource: gridDataArr, + allowPaging: true, + allowSorting: true, + allowGrouping: true, + allowExcelExport: true, + allowPdfExport: true, + allowResizing: true, + allowFiltering: true, + filterSettings: { type: 'menu' }, + toolbar: ['excelexport', 'pdfexport', 'csvexport', 'search'], + groupSettings: { columns: dimensionClmArr }, + height: 500, + columns: columnsArr, + pageSettings: { pageCount: 5, pageSize : 10 }, + + aggregates: [{ + columns: $scope.aggregateClmns + }] + }; + }; + + /** + * Used to find measure columns + * @param {*} config + */ + var getSelectedMeasureColumns = function(config) { + var measureColumns = config.values.map(function(cfgVal) { + var columns = cfgVal.cols; + return columns; + }); + return measureColumns; + }; + + /** + * Get the dimension Columns + * @param {*} config + */ + var getSelectedDimensionColumns = function(config) { + var dimensionColumns = config.groups.map(function(cfgGrp) { + var columns = cfgGrp.col; + return columns; + }); + return dimensionColumns; + } }); \ No newline at end of file diff --git a/src/main/webapp/org/cboard/controller/dashboard/paramCtrl.js b/src/main/webapp/org/cboard/controller/dashboard/paramCtrl.js index 5bce5e077..0de0e39c5 100644 --- a/src/main/webapp/org/cboard/controller/dashboard/paramCtrl.js +++ b/src/main/webapp/org/cboard/controller/dashboard/paramCtrl.js @@ -163,4 +163,4 @@ cBoard.controller('paramCtrl', function ($scope, $uibModal, $http) { }); }; -}); +}); \ No newline at end of file diff --git a/src/main/webapp/org/cboard/controller/utils/paramSelector.js b/src/main/webapp/org/cboard/controller/utils/paramSelector.js index 21675377e..4ec5a6d06 100644 --- a/src/main/webapp/org/cboard/controller/utils/paramSelector.js +++ b/src/main/webapp/org/cboard/controller/utils/paramSelector.js @@ -75,8 +75,8 @@ cBoard.controller('paramSelector', function ($scope, $uibModalInstance, dataServ $scope.ok = function () { $uibModalInstance.close(); $scope.param.values = _.filter($scope.param.values, function(e){ - return e != null && !_.isUndefined(e); - } + return e != null && !_.isUndefined(e); + } ); ok($scope.param); }; diff --git a/src/main/webapp/org/cboard/directive/dashboard/dashboardWidget.js b/src/main/webapp/org/cboard/directive/dashboard/dashboardWidget.js index 4d528790e..96e2bfbf9 100644 --- a/src/main/webapp/org/cboard/directive/dashboard/dashboardWidget.js +++ b/src/main/webapp/org/cboard/directive/dashboard/dashboardWidget.js @@ -39,6 +39,15 @@ cBoard.directive('dashboardWidget', function ($compile, $templateCache, dataServ scope.widget.render(ndWrapper, null, scope); }; + var renderGrid = function (scope, element, attrs) { + var template = $templateCache.get("gridChartContent"); + scope.myheight = scope.row.height ? (scope.row.height - 44) : 700; + var aa = $compile(template)(scope); + element.append(aa); + var ndWrapper = $(element).find('.box-body'); + scope.widget.render(ndWrapper, null, scope); + }; + return { restrict: 'E', scope: true, @@ -57,6 +66,9 @@ cBoard.directive('dashboardWidget', function ($compile, $templateCache, dataServ case 'table': renderTable(scope, element, attrs); break; + case 'grid': + renderGrid(scope, element, attrs); + break; default: renderEchart(scope, element, attrs); } diff --git a/src/main/webapp/org/cboard/ng-app.js b/src/main/webapp/org/cboard/ng-app.js index fc487a4b0..c57005bbe 100644 --- a/src/main/webapp/org/cboard/ng-app.js +++ b/src/main/webapp/org/cboard/ng-app.js @@ -2,5 +2,5 @@ * Created by Peter on 2016/10/22. */ -var cBoard = angular.module('cBoard', ['ui.router', 'angular-md5', 'dndLists', 'treeControl', +var cBoard = angular.module('cBoard', ['ui.router','angularUtils.directives.dirPagination', 'angular-md5', 'dndLists', 'treeControl','ui.select', 'ui.bootstrap', 'ngSanitize', 'ui.select', 'pascalprecht.translate', 'ui.ace', 'ngJsTree', 'daterangepicker', 'angular-cron-jobs', 'rzModule','uuid4']); \ No newline at end of file diff --git a/src/main/webapp/org/cboard/ng-config.js b/src/main/webapp/org/cboard/ng-config.js index 428f5e766..1ddc5e48e 100644 --- a/src/main/webapp/org/cboard/ng-config.js +++ b/src/main/webapp/org/cboard/ng-config.js @@ -34,6 +34,14 @@ angular.module('cBoard').config(['$stateProvider', function ($stateProvider) { templateUrl: 'org/cboard/view/dashboard/view.html', controller: 'dashboardViewCtrl' }) + .state('dashboard.dashBoard', { + url: '/dashBoard', + templateUrl: 'org/cboard/view/dashboard/dashBoard.html' + }) + .state('dashboard.myDashBoard', { + url: '/myDashBoard', + templateUrl: 'org/cboard/view/dashboard/myDashBoard.html' + }) .state('config', { url: '/config', abstract: true, @@ -94,12 +102,17 @@ angular.module('cBoard').config(['$stateProvider', function ($stateProvider) { templateUrl: 'org/cboard/view/admin/user.html', controller: 'userAdminCtrl' }) + .state('admin.role', { + url: '/role', + templateUrl: 'org/cboard/view/admin/role.html', + controller: 'userAdminCtrl' + }) .state('config.cockpit', { url: '/cockpit/{boardId}', params: {boardId: null}, templateUrl: 'org/cboard/view/config/board/cockpit/view.html', controller: 'cockpitLayoutCtrl' - }) + }); }]); angular.module('cBoard').factory('sessionHelper', ["$rootScope", "$q", function ($rootScope, $q) { diff --git a/src/main/webapp/org/cboard/service/chart/chartGridService.js b/src/main/webapp/org/cboard/service/chart/chartGridService.js new file mode 100644 index 000000000..620d4f59a --- /dev/null +++ b/src/main/webapp/org/cboard/service/chart/chartGridService.js @@ -0,0 +1,21 @@ +/** + * Created by Hemendra on 2017/11/28. + */ +'use strict'; +cBoard.service('chartGridService', function () { + + this.render = function (containerDom, option, scope, persist, drill) { + if (option == null) { + containerDom.html("
No Data!
"); + return; + } + var height; + scope ? height = scope.myheight - 20 : null; + return new CBoardTableRender(containerDom, option, drill).do(height, persist); + }; + + this.parseOption = function (data) { + var tableOption = chartDataProcess(data.chartConfig, data.keys, data.series, data.data, data.seriesConfig); + return tableOption; + }; +}); \ No newline at end of file diff --git a/src/main/webapp/org/cboard/service/data/dataService.js b/src/main/webapp/org/cboard/service/data/dataService.js index 082bfe475..2faa94a39 100644 --- a/src/main/webapp/org/cboard/service/data/dataService.js +++ b/src/main/webapp/org/cboard/service/data/dataService.js @@ -774,4 +774,44 @@ cBoard.service('dataService', function ($http, $q, updateService) { }); return {evalExp: evalExp, aggs: aggs, names: names}; } + + /** + * This method returns the raw data that is coming from the database + * + * @param {*} datasource + * @param {*} query + * @param {*} datasetId + * @param {*} chartConfig + * @param {*} callback + * @param {*} reload + */ + this.getRawData = function (datasource, query, datasetId, chartConfig) { + var deferred = $q.defer(); + + //if dont pass 'cfg' we will be getting error from the server + var dataSeries = getDataSeries(chartConfig); + var cfg = {rows: [], columns: [], filters: []}; + cfg.rows = getDimensionConfig(chartConfig.keys); + cfg.columns = getDimensionConfig(chartConfig.groups); + cfg.filters = getDimensionConfig(chartConfig.filters); + cfg.filters = cfg.filters.concat(getDimensionConfig(chartConfig.boardFilters)); + cfg.filters = cfg.filters.concat(getDimensionConfig(chartConfig.boardWidgetFilters)); + cfg.values = _.map(dataSeries, function (s) { + return {column: s.name, aggType: s.aggregate}; + }); + + $http.post("dashboard/getAggregateData.do", { + datasourceId: datasource, + query: angular.toJson(query), + datasetId: datasetId, + cfg: angular.toJson(cfg) + }).success(function (data) { + deferred.resolve(data); + }); + + return deferred.promise; + }; + + + }); diff --git a/src/main/webapp/org/cboard/service/util/ModalUtils.js b/src/main/webapp/org/cboard/service/util/ModalUtils.js index 86ef53432..f1f87af1a 100644 --- a/src/main/webapp/org/cboard/service/util/ModalUtils.js +++ b/src/main/webapp/org/cboard/service/util/ModalUtils.js @@ -39,6 +39,40 @@ cBoard.service('ModalUtils', function ($uibModal, $filter) { backdrop: false, windowClass: style, size: size, + controller: function ($scope, $uibModalInstance) { + /*Confirmation for Delete "ok" enable/disable*/ + $scope.deleteConfirmationbtn = true; + $scope.confirmDeleteText = function () { + if ($scope.deleteText == "DELETE") { + $scope.deleteConfirmationbtn = false; + } else { + $scope.deleteConfirmationbtn = true; + } + }; + content ? $scope.content = content : $scope.content = translate('CONFIG.DASHBOARD.DASHBOARD_SOMETHING_WRONG'); + $scope.ok = function () { + $uibModalInstance.close(); + if (ok) { + ok(); + } + }; + $scope.close = function () { + $uibModalInstance.close(); + if (close) { + close(); + } + }; + } + }); + }; + + this.saveConfirm = function (content, style, size, ok, close) { + $uibModal.open({ + templateUrl: 'org/cboard/view/util/modal/saveConfirm.html', + windowTemplateUrl: 'org/cboard/view/util/modal/window.html', + backdrop: false, + windowClass: style, + size: size, controller: function ($scope, $uibModalInstance) { content ? $scope.content = content : $scope.content = translate('CONFIG.DASHBOARD.DASHBOARD_SOMETHING_WRONG'); $scope.ok = function () { diff --git a/src/main/webapp/org/cboard/util/CBoardEChartRender.js b/src/main/webapp/org/cboard/util/CBoardEChartRender.js index ac20ba4a4..9854e2a3a 100644 --- a/src/main/webapp/org/cboard/util/CBoardEChartRender.js +++ b/src/main/webapp/org/cboard/util/CBoardEChartRender.js @@ -30,7 +30,10 @@ var CBoardEChartRender = function (jqContainer, options, isDeepSpec) { this.options = options; }; -CBoardEChartRender.prototype.theme = "theme-fin1"; // 主题 +//CBoardEChartRender.prototype.theme = "dark"; // 主题 +var changeTheme = function(themeName) { + CBoardEChartRender.prototype.theme = themeName; +} CBoardEChartRender.prototype.chart = function (group, persist) { var self = this; diff --git a/src/main/webapp/org/cboard/util/CBoardGridRender.js b/src/main/webapp/org/cboard/util/CBoardGridRender.js new file mode 100644 index 000000000..4263ad580 --- /dev/null +++ b/src/main/webapp/org/cboard/util/CBoardGridRender.js @@ -0,0 +1,49 @@ +var CBoardGridRender = function (jqContainer, options, drill) { + this.container = jqContainer; // jquery object + this.options = options; + this.tall; + this.drill = drill; + var _this = this; + $(this.container).resize(function (e) { + _this.resize(e.target); + }); +}; + +CBoardGridRender.prototype.resize = function (container) { + var wrapper = $(container).find('.table_wrapper'); + wrapper.css('width', 'auto'); + if (wrapper.width() < $(container).width()) { + wrapper.css('width', '100%'); + } +}; + +CBoardGridRender.prototype.do = function (tall, persist) { + this.tall = tall; + tall = _.isUndefined(tall) ? 500 : tall; + var divHeight = tall - 110; + var _this = this; + var render = function (o, drillConfig) { + _this.options = o; + _this.drill.config = drillConfig; + _this.do(_this.tall); + }; + var args = { + tall: divHeight, + chartConfig: this.options.chartConfig, + data: this.options.data, + container: this.container, + drill: this.drill, + render: render + }; + crossTable.table(args); + $(this.container).css({ + height: tall + "px" + }); + this.resize(this.container); + if (persist) { + persist.data = this.options.data; + persist.type = "table" + } + return render; +}; + diff --git a/src/main/webapp/org/cboard/util/CBoardHeatMapRender.js b/src/main/webapp/org/cboard/util/CBoardHeatMapRender.js index 7b067baac..edc165896 100644 --- a/src/main/webapp/org/cboard/util/CBoardHeatMapRender.js +++ b/src/main/webapp/org/cboard/util/CBoardHeatMapRender.js @@ -37,7 +37,12 @@ var CBoardHeatMapRender = function (jqContainer, options, isDeepSpec) { this.options = options; }; -CBoardHeatMapRender.prototype.theme = "theme-fin1"; // 主题 +//CBoardHeatMapRender.prototype.theme = "dark"; // 主题 + +var changeTheme1 = function(themeName) { + CBoardHeatMapRender.prototype.theme = themeName; +} + CBoardHeatMapRender.prototype.chart = function (group, persist) { var self = this; diff --git a/src/main/webapp/org/cboard/view/admin/modal/editRole.html b/src/main/webapp/org/cboard/view/admin/modal/editRole.html new file mode 100644 index 000000000..baa36b675 --- /dev/null +++ b/src/main/webapp/org/cboard/view/admin/modal/editRole.html @@ -0,0 +1,36 @@ + + + + diff --git a/src/main/webapp/org/cboard/view/admin/modal/editUser.html b/src/main/webapp/org/cboard/view/admin/modal/editUser.html new file mode 100644 index 000000000..156fd2148 --- /dev/null +++ b/src/main/webapp/org/cboard/view/admin/modal/editUser.html @@ -0,0 +1,43 @@ + + + \ No newline at end of file diff --git a/src/main/webapp/org/cboard/view/admin/modal/grantResource.html b/src/main/webapp/org/cboard/view/admin/modal/grantResource.html new file mode 100644 index 000000000..713650768 --- /dev/null +++ b/src/main/webapp/org/cboard/view/admin/modal/grantResource.html @@ -0,0 +1,104 @@ + + + \ No newline at end of file diff --git a/src/main/webapp/org/cboard/view/admin/modal/newRole.html b/src/main/webapp/org/cboard/view/admin/modal/newRole.html new file mode 100644 index 000000000..3abceca12 --- /dev/null +++ b/src/main/webapp/org/cboard/view/admin/modal/newRole.html @@ -0,0 +1,36 @@ + + + + diff --git a/src/main/webapp/org/cboard/view/admin/modal/newUser.html b/src/main/webapp/org/cboard/view/admin/modal/newUser.html new file mode 100644 index 000000000..1230b56ce --- /dev/null +++ b/src/main/webapp/org/cboard/view/admin/modal/newUser.html @@ -0,0 +1,43 @@ + + + \ No newline at end of file diff --git a/src/main/webapp/org/cboard/view/admin/role.html b/src/main/webapp/org/cboard/view/admin/role.html new file mode 100644 index 000000000..f4b58a39d --- /dev/null +++ b/src/main/webapp/org/cboard/view/admin/role.html @@ -0,0 +1,97 @@ +
+
+
+
+
+

{{'ADMIN.ROLE.ROLE'|translate}}

+ +
+  New + + +
+
+
+
+
+
+ +
+
+ + +
+
+
+ + +
+
+
+
+ + + + + + + + + + + + + + + +
{{'ADMIN.ROLE.ROLE_NAME'|translate}} {{'ADMIN.ROLE.ADMIN'|translate}} {{'COMMON.ACTION'|translate}}
+
+
+ {{r.roleName.charAt(0). toUpperCase() +r.roleName.split(' ')[1].charAt(0).toUpperCase() }} +
+ {{r.roleName}} +
+
+
+

{{user.loginName + "(" + user.userName + ")"}}

+
+
+ + + + +
+
+
+
+
+
+
+
+ + + + + diff --git a/src/main/webapp/org/cboard/view/admin/user.html b/src/main/webapp/org/cboard/view/admin/user.html index 2b526287d..bdce0c0b8 100644 --- a/src/main/webapp/org/cboard/view/admin/user.html +++ b/src/main/webapp/org/cboard/view/admin/user.html @@ -1,182 +1,97 @@ -
-
-
-

{{'ADMIN.USER.USER'|translate}}

-
-    -    - -
-
-
-
-
- {{filterByRole?'ADMIN.BY_ROLE':'ADMIN.BY_NAME'|translate}} - - - - {{$select.selected.roleName}} - - - {{r.roleName}} - - -
-
-
-
-
- -
-
-
-
- - -
-
-
-
-
-

{{'ADMIN.ROLE.ROLE'|translate}}

-
-    -    - -
-
-
-
-
- {{'CONFIG.WIDGET.FIND'|translate}} - -
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
-
-
-

{{'ADMIN.USER.USER'|translate}}

-
-
-
-
- - -
-
- - -
-
- - -
-
-
- - - -
- -
+
+
-

{{'ADMIN.ROLE.ROLE'|translate}}

-
-
-
-
- - -
-
- - - - {{$select.selected.loginName}} ({{$select.selected.userName}}) - - - {{u.loginName + "(" + u.userName + ")"}} - - -
-
-
- - - -
-
-
-
+
-
+ + diff --git a/src/main/webapp/org/cboard/view/cboard/changePwd.html b/src/main/webapp/org/cboard/view/cboard/changePwd.html index 257b67cb4..2c36c5950 100644 --- a/src/main/webapp/org/cboard/view/cboard/changePwd.html +++ b/src/main/webapp/org/cboard/view/cboard/changePwd.html @@ -15,10 +15,10 @@
\ No newline at end of file diff --git a/src/main/webapp/org/cboard/view/cboard/homepage.html b/src/main/webapp/org/cboard/view/cboard/homepage.html index 71fff5463..fcdaca11f 100644 --- a/src/main/webapp/org/cboard/view/cboard/homepage.html +++ b/src/main/webapp/org/cboard/view/cboard/homepage.html @@ -1,33 +1,33 @@ -
+

- {{'HOMEPAGE.TITLE'|translate}} - {{'HOMEPAGE.QUICK_START'|translate}} + HOMEPAGE + Quick Start

-
-
-
-
-
-

{{'HOMEPAGE.CUBES'|translate}} {{'HOMEPAGE.CUBES_TIP'|translate}}

-
- - +
+
+
+
+
+

Cubes Double click a cube, start chart design!

+
+ + +
-
-
-
-
+
+
+
+
-
diff --git a/src/main/webapp/org/cboard/view/config/board.html b/src/main/webapp/org/cboard/view/config/board.html index f7b4eeea0..856753401 100644 --- a/src/main/webapp/org/cboard/view/config/board.html +++ b/src/main/webapp/org/cboard/view/config/board.html @@ -1,31 +1,120 @@
-
-
-
-

{{'CONFIG.DASHBOARD.DASHBOARD'|translate}}

-
-    -    -    -    - -
- - {{'CONFIG.DASHBOARD.NEW_GRID_LAYOUT'|translate}} - {{'CONFIG.DASHBOARD.NEW_TIMELINE_LAYOUT'|translate}} - {{'CONFIG.DASHBOARD.NEW_COCKPIT_LAYOUT'|translate}} -
-
-
-
-
-
-
-
-
+
+
+ +
+
+
+
+ +
+
+ + +
+
+
+ + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + +
{{'CONFIG.DASHBOARD.NAME'|translate}} {{'CONFIG.DASHBOARD.CATEGORY'|translate}} Actions
+
+
+ {{o.name.charAt(0). toUpperCase() +o.name.split(' + ')[1].charAt(0).toUpperCase() }}
+ {{o.name}} +
+
{{o.categoryName}} + + + + + +

No Data Available

+
+
+
+
+
+

{{curBoard.name}}

@@ -90,14 +179,10 @@

{{curBoard.name}}

-
\ No newline at end of file +
diff --git a/src/main/webapp/org/cboard/view/config/board/grid/grid.html b/src/main/webapp/org/cboard/view/config/board/grid/grid.html index ff952f825..6e1c8ccf9 100644 --- a/src/main/webapp/org/cboard/view/config/board/grid/grid.html +++ b/src/main/webapp/org/cboard/view/config/board/grid/grid.html @@ -1,11 +1,7 @@
- - + +
@@ -25,11 +21,7 @@
- - + +
\ No newline at end of file diff --git a/src/main/webapp/org/cboard/view/config/board/grid/param.html b/src/main/webapp/org/cboard/view/config/board/grid/param.html index 907e4b307..6724d90da 100644 --- a/src/main/webapp/org/cboard/view/config/board/grid/param.html +++ b/src/main/webapp/org/cboard/view/config/board/grid/param.html @@ -10,7 +10,7 @@
- diff --git a/src/main/webapp/org/cboard/view/config/board/grid/widget.html b/src/main/webapp/org/cboard/view/config/board/grid/widget.html index 7aa2b2012..85f0ea550 100644 --- a/src/main/webapp/org/cboard/view/config/board/grid/widget.html +++ b/src/main/webapp/org/cboard/view/config/board/grid/widget.html @@ -10,7 +10,7 @@
- diff --git a/src/main/webapp/org/cboard/view/config/board/modal/param.html b/src/main/webapp/org/cboard/view/config/board/modal/param.html index ecdebae27..af83df7c9 100644 --- a/src/main/webapp/org/cboard/view/config/board/modal/param.html +++ b/src/main/webapp/org/cboard/view/config/board/modal/param.html @@ -58,8 +58,9 @@
diff --git a/src/main/webapp/org/cboard/view/config/board/modal/param/slider.html b/src/main/webapp/org/cboard/view/config/board/modal/param/slider.html index 5385b863a..93aa28846 100644 --- a/src/main/webapp/org/cboard/view/config/board/modal/param/slider.html +++ b/src/main/webapp/org/cboard/view/config/board/modal/param/slider.html @@ -23,7 +23,7 @@
-