diff --git a/core/groups.go b/core/groups.go index 8950074b..074d49c5 100644 --- a/core/groups.go +++ b/core/groups.go @@ -50,10 +50,6 @@ func SelectGroups(includeAll bool, auth bool) []*Group { var groups []*Group var validGroups []*Group groupsDb().Find(&groups).Order("order_id desc") - if includeAll { - emptyGroup := &Group{&types.Group{Id: 0, Public: types.NewNullBool(true)}} - groups = append(groups, emptyGroup) - } for _, g := range groups { if !g.Public.Bool { if auth { @@ -64,6 +60,10 @@ func SelectGroups(includeAll bool, auth bool) []*Group { } } sort.Sort(GroupOrder(validGroups)) + if includeAll { + emptyGroup := &Group{&types.Group{Id: 0, Public: types.NewNullBool(true)}} + validGroups = append(validGroups, emptyGroup) + } return validGroups } diff --git a/handlers/function.go b/handlers/function.go index 00b2fe68..6399b266 100644 --- a/handlers/function.go +++ b/handlers/function.go @@ -42,6 +42,9 @@ var handlerFuncs = func(w http.ResponseWriter, r *http.Request) template.FuncMap auth := IsUser(r) return core.SelectGroups(includeAll, auth) }, + "Group": func(id int) *core.Group { + return core.SelectGroup(int64(id)) + }, "len": func(g interface{}) int { val := reflect.ValueOf(g) return val.Len() diff --git a/handlers/groups.go b/handlers/groups.go index f42593b9..3198852b 100644 --- a/handlers/groups.go +++ b/handlers/groups.go @@ -41,8 +41,8 @@ func groupViewHandler(w http.ResponseWriter, r *http.Request) { // apiAllGroupHandler will show all the groups func apiAllGroupHandler(w http.ResponseWriter, r *http.Request) { - auth := IsUser(r) - groups := core.SelectGroups(false, auth) + auth, admin := IsUser(r), IsAdmin(r) + groups := core.SelectGroups(admin, auth) returnJson(groups, w, r) } diff --git a/source/css/base.css b/source/css/base.css index 4e523e1c..b2e6ba55 100644 --- a/source/css/base.css +++ b/source/css/base.css @@ -7,66 +7,54 @@ /* Mobile Service Container */ HTML, BODY { background-color: #fcfcfc; - padding-bottom: 10px; -} + padding-bottom: 10px; } .container { padding-top: 20px; padding-bottom: 25px; max-width: 860px; - box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; -} + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; } .header-title { - color: #464646; -} + color: #464646; } .header-desc { - color: #939393; -} + color: #939393; } .btn { - border-radius: 0.2rem; -} + border-radius: 0.2rem; } .online_list .badge { - margin-top: 0.2rem; -} + margin-top: 0.2rem; } .navbar { - margin-bottom: 30px; -} + margin-bottom: 30px; } .btn-sm { line-height: 1.3; - font-size: 0.75rem; -} + font-size: 0.75rem; } .view_service_btn { position: absolute; bottom: -40px; - right: 40px; -} + right: 40px; } .service_lower_info { position: absolute; bottom: -40px; left: 40px; color: #d1ffca; - font-size: 0.85rem; -} + font-size: 0.85rem; } .lg_number { font-size: 2.3rem; font-weight: bold; display: block; - color: #4f4f4f; -} + color: #4f4f4f; } .stats_area { text-align: center; - color: #a5a5a5; -} + color: #a5a5a5; } .lower_canvas { height: 3.4rem; @@ -74,151 +62,118 @@ HTML, BODY { background-color: #48d338; padding: 15px 10px; margin-left: 0px !important; - margin-right: 0px !important; -} + margin-right: 0px !important; } .lower_canvas SPAN { font-size: 1rem; - color: #fff; -} + color: #fff; } .footer { text-decoration: none; - margin-top: 20px; -} + margin-top: 20px; } .footer A { color: #8d8d8d; - text-decoration: none; -} + text-decoration: none; } .footer A:HOVER { - color: #6d6d6d; -} + color: #6d6d6d; } .badge { color: white; - border-radius: 0.2rem; -} + border-radius: 0.2rem; } .btn-group { - height: 25px; -} -.btn-group A { - padding: 0.1rem 0.75rem; - font-size: 0.8rem; -} + height: 25px; } + .btn-group A { + padding: 0.1rem .75rem; + font-size: 0.8rem; } .card-body .badge { - color: #fff; -} + color: #fff; } .nav-pills .nav-link { - border-radius: 0.2rem; -} + border-radius: 0.2rem; } .form-control { - border-radius: 0.2rem; -} + border-radius: 0.2rem; } .card { background-color: #ffffff; - border: 1px solid rgba(0, 0, 0, 0.125); -} + border: 1px solid rgba(0, 0, 0, 0.125); } .card-body { - overflow: hidden; -} + overflow: hidden; } .card-body H4 A { color: #444444; - text-decoration: none; -} + text-decoration: none; } .chart-container { position: relative; height: 170px; width: 100%; - overflow: hidden; -} + overflow: hidden; } .service-chart-container { position: relative; height: 400px; - width: 100%; -} + width: 100%; } .service-chart-heatmap { position: relative; height: 300px; - width: 100%; -} + width: 100%; } .btn-primary { background-color: #3e9bff; border-color: #006fe6; - color: white; -} -.btn-primary.dyn-dark { - background-color: #32a825 !important; - border-color: #2c9320 !important; -} -.btn-primary.dyn-light { - background-color: #75de69 !important; - border-color: #88e37e !important; -} + color: white; } + .btn-primary.dyn-dark { + background-color: #32a825 !important; + border-color: #2c9320 !important; } + .btn-primary.dyn-light { + background-color: #75de69 !important; + border-color: #88e37e !important; } .btn-success { - background-color: #47d337; -} -.btn-success.dyn-dark { - background-color: #32a825 !important; - border-color: #2c9320 !important; -} -.btn-success.dyn-light { - background-color: #75de69 !important; - border-color: #88e37e !important; -} + background-color: #47d337; } + .btn-success.dyn-dark { + background-color: #32a825 !important; + border-color: #2c9320 !important; } + .btn-success.dyn-light { + background-color: #75de69 !important; + border-color: #88e37e !important; } .btn-danger { - background-color: #dd3545; -} -.btn-danger.dyn-dark { - background-color: #b61f2d !important; - border-color: #a01b28 !important; -} -.btn-danger.dyn-light { - background-color: #e66975 !important; - border-color: #e97f89 !important; -} + background-color: #dd3545; } + .btn-danger.dyn-dark { + background-color: #b61f2d !important; + border-color: #a01b28 !important; } + .btn-danger.dyn-light { + background-color: #e66975 !important; + border-color: #e97f89 !important; } .bg-success { - background-color: #47d337 !important; -} + background-color: #47d337 !important; } .bg-danger { - background-color: #dd3545 !important; -} + background-color: #dd3545 !important; } .bg-success .dyn-dark { - background-color: #35b027 !important; -} + background-color: #35b027 !important; } .bg-danger .dyn-dark { - background-color: #bf202f !important; -} + background-color: #bf202f !important; } .nav-pills .nav-link.active, .nav-pills .show > .nav-link { - background-color: #13a00d; -} + background-color: #13a00d; } .nav-pills A { - color: #424242; -} + color: #424242; } .nav-pills I { - margin-right: 10px; -} + margin-right: 10px; } .CodeMirror { /* Bootstrap Settings */ @@ -238,26 +193,23 @@ HTML, BODY { border: 1px solid #ccc; border-radius: 4px; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; /* Code Mirror Settings */ font-family: monospace; position: relative; overflow: hidden; - height: 80vh; -} + height: 80vh; } .CodeMirror-focused { /* Bootstrap Settings */ border-color: #66afe9; outline: 0; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; -} + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } .switch { font-size: 1rem; - position: relative; -} + position: relative; } .switch input { position: absolute; @@ -268,8 +220,7 @@ HTML, BODY { clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; - padding: 0; -} + padding: 0; } .switch input + label { position: relative; @@ -282,26 +233,23 @@ HTML, BODY { outline: none; user-select: none; vertical-align: middle; - text-indent: calc(calc(calc(2.375rem * .8) * 2) + .5rem); -} + text-indent: calc(calc(calc(2.375rem * .8) * 2) + .5rem); } .switch input + label::before, .switch input + label::after { - content: ""; + content: ''; position: absolute; top: 0; left: 0; width: calc(calc(2.375rem * .8) * 2); bottom: 0; - display: block; -} + display: block; } .switch input + label::before { right: 0; background-color: #dee2e6; border-radius: calc(2.375rem * .8); - transition: 0.2s all; -} + transition: 0.2s all; } .switch input + label::after { top: 2px; @@ -310,154 +258,120 @@ HTML, BODY { height: calc(calc(2.375rem * .8) - calc(2px * 2)); border-radius: 50%; background-color: white; - transition: 0.2s all; -} + transition: 0.2s all; } .switch input:checked + label::before { - background-color: #08d; -} + background-color: #08d; } .switch input:checked + label::after { - margin-left: calc(2.375rem * .8); -} + margin-left: calc(2.375rem * .8); } .switch input:focus + label::before { outline: none; - box-shadow: 0 0 0 0.2rem rgba(0, 136, 221, 0.25); -} + box-shadow: 0 0 0 0.2rem rgba(0, 136, 221, 0.25); } .switch input:disabled + label { color: #868e96; - cursor: not-allowed; -} + cursor: not-allowed; } .switch input:disabled + label::before { - background-color: #e9ecef; -} + background-color: #e9ecef; } .switch.switch-sm { - font-size: 0.875rem; -} + font-size: 0.875rem; } .switch.switch-sm input + label { min-width: calc(calc(1.9375rem * .8) * 2); height: calc(1.9375rem * .8); line-height: calc(1.9375rem * .8); - text-indent: calc(calc(calc(1.9375rem * .8) * 2) + .5rem); -} + text-indent: calc(calc(calc(1.9375rem * .8) * 2) + .5rem); } .switch.switch-sm input + label::before { - width: calc(calc(1.9375rem * .8) * 2); -} + width: calc(calc(1.9375rem * .8) * 2); } .switch.switch-sm input + label::after { width: calc(calc(1.9375rem * .8) - calc(2px * 2)); - height: calc(calc(1.9375rem * .8) - calc(2px * 2)); -} + height: calc(calc(1.9375rem * .8) - calc(2px * 2)); } .switch.switch-sm input:checked + label::after { - margin-left: calc(1.9375rem * .8); -} + margin-left: calc(1.9375rem * .8); } .switch.switch-lg { - font-size: 1.25rem; -} + font-size: 1.25rem; } .switch.switch-lg input + label { min-width: calc(calc(3rem * .8) * 2); height: calc(3rem * .8); line-height: calc(3rem * .8); - text-indent: calc(calc(calc(3rem * .8) * 2) + .5rem); -} + text-indent: calc(calc(calc(3rem * .8) * 2) + .5rem); } .switch.switch-lg input + label::before { - width: calc(calc(3rem * .8) * 2); -} + width: calc(calc(3rem * .8) * 2); } .switch.switch-lg input + label::after { width: calc(calc(3rem * .8) - calc(2px * 2)); - height: calc(calc(3rem * .8) - calc(2px * 2)); -} + height: calc(calc(3rem * .8) - calc(2px * 2)); } .switch.switch-lg input:checked + label::after { - margin-left: calc(3rem * .8); -} + margin-left: calc(3rem * .8); } .switch + .switch { - margin-left: 1rem; -} + margin-left: 1rem; } @keyframes pulse_animation { 0% { - transform: scale(1); - } + transform: scale(1); } 30% { - transform: scale(1); - } + transform: scale(1); } 40% { - transform: scale(1.02); - } + transform: scale(1.02); } 50% { - transform: scale(1); - } + transform: scale(1); } 60% { - transform: scale(1); - } + transform: scale(1); } 70% { - transform: scale(1.05); - } + transform: scale(1.05); } 80% { - transform: scale(1); - } + transform: scale(1); } 100% { - transform: scale(1); - } -} + transform: scale(1); } } .pulse { animation-name: pulse_animation; animation-duration: 1500ms; transform-origin: 70% 70%; animation-iteration-count: infinite; - animation-timing-function: linear; -} + animation-timing-function: linear; } @keyframes glow-grow { 0% { opacity: 0; - transform: scale(1); - } + transform: scale(1); } 80% { - opacity: 1; - } + opacity: 1; } 100% { transform: scale(2); - opacity: 0; - } -} + opacity: 0; } } .pulse-glow { animation-name: glow-grown; animation-duration: 100ms; transform-origin: 70% 30%; animation-iteration-count: infinite; - animation-timing-function: linear; -} + animation-timing-function: linear; } .pulse-glow:before, .pulse-glow:after { position: absolute; - content: ""; + content: ''; height: 0.5rem; width: 1.75rem; top: 1.2rem; right: 2.15rem; border-radius: 0; box-shadow: 0 0 7px #47d337; - animation: glow-grow 2s ease-out infinite; -} + animation: glow-grow 2s ease-out infinite; } .sortable_drag { - background-color: #0000000f; -} + background-color: #0000000f; } .drag_icon { cursor: move; @@ -471,132 +385,106 @@ HTML, BODY { margin-right: 5px; margin-left: -10px; text-align: center; - color: #b1b1b1; -} + color: #b1b1b1; } /* (Optional) Apply a "closed-hand" cursor during drag operation. */ .drag_icon:active { cursor: grabbing; cursor: -moz-grabbing; - cursor: -webkit-grabbing; -} + cursor: -webkit-grabbing; } .switch_btn { float: right; margin: -1px 0px 0px 0px; - display: block; -} + display: block; } #start_container { position: absolute; z-index: 99999; - margin-top: 20px; -} + margin-top: 20px; } #end_container { position: absolute; z-index: 99999; margin-top: 20px; - right: 0; -} + right: 0; } .pointer { - cursor: pointer; -} + cursor: pointer; } .jumbotron { - background-color: white; -} + background-color: white; } @media (max-width: 767px) { HTML, BODY { - background-color: #fcfcfc; - } + background-color: #fcfcfc; } .sm-container { margin-top: 0px !important; - padding: 0 !important; - } + padding: 0 !important; } .list-group-item H5 { - font-size: 0.9rem; - } + font-size: 0.9rem; } .container { padding: 0px !important; - padding-top: 15px !important; - } + padding-top: 15px !important; } .group_header { - margin-left: 15px; - } + margin-left: 15px; } .navbar { margin-left: 0px; margin-top: 0px; width: 100%; - margin-bottom: 0; - } + margin-bottom: 0; } .btn-sm { line-height: 0.9rem; - font-size: 0.65rem; - } + font-size: 0.65rem; } .full-col-12 { padding-left: 0px; - padding-right: 0px; - } + padding-right: 0px; } .card { border: 0; border-radius: 0rem; padding: 0; - background-color: #ffffff; - } + background-color: #ffffff; } .card-body { font-size: 10pt; - padding: 0px 10px; - } + padding: 0px 10px; } .lg_number { - font-size: 7.8vw; - } + font-size: 7.8vw; } .stats_area { margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } + margin-bottom: 1.5rem !important; } .stats_area .col-4 { padding-left: 0; padding-right: 0; - font-size: 0.6rem; - } + font-size: 0.6rem; } .list-group-item { border-top: 1px solid #e4e4e4; - border: 0px; - } + border: 0px; } .list-group-item:first-child { border-top-left-radius: 0; - border-top-right-radius: 0; - } + border-top-right-radius: 0; } .list-group-item:last-child { border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - } + border-bottom-left-radius: 0; } .list-group-item P { - font-size: 0.7rem; - } + font-size: 0.7rem; } .service-chart-container { - height: 200px; - } -} + height: 200px; } } /*# sourceMappingURL=base.css.map */ diff --git a/source/tmpl/services.gohtml b/source/tmpl/services.gohtml index c17f193c..e2b64a7a 100644 --- a/source/tmpl/services.gohtml +++ b/source/tmpl/services.gohtml @@ -12,6 +12,7 @@