Files
nairobi/app/assets/stylesheets/admin.scss
Javi Martín bc0f040758 Use order links in legislation proposals admin
As mentioned in the previous commits, a `<select>` field which submits
its form on change causes many accessibility and usability issues, so
we're replacing it with the order links we use everywhere else.

Since the links "Id" and "Title" by themselves don't have enough
information to let users know they're used to sort by ID or title, we
have to update them somehow. We could add a "Sort by:" prefix before the
list of links (and associate it with the `aria-labelledby` attribute);
however, we don't do this anywhere else and might look weird depending
on the screen size.

So we're simply adding "Sort by" before each link.

Now that we don't use the `wide_order_selector` partial anymore, we can
remove it alongside the styles for the `select-order` class.
2021-06-28 01:20:39 +02:00

1237 lines
18 KiB
SCSS

// Table of Contents
//
// 01. Global styles
// 02. Sidebar
// 03. List elements
// 04. Stats
// 05. Management
// 06. Polls
// 07. Legislation
// 08. CMS
// 09. Map
// 10. Budgets
// 11. Newsletters
//
// 01. Global styles
// -----------------
$admin-border-color: #d3d9dd;
$admin-border: 2px solid $admin-border-color;
$admin-color: #245b80;
$admin-text: #434d54;
$sidebar: #245b80;
$sidebar-hover: #25597c;
$sidebar-active: #f4fcd0;
$table-border: $admin-border;
$table-header: #ecf1f6;
.admin {
@include admin-layout;
h2 {
font-weight: 100;
margin-bottom: $line-height;
small {
color: $text-medium;
}
&.title {
text-transform: uppercase;
}
}
h3 {
margin: $line-height 0;
}
.back {
float: none;
}
.header {
border: 0;
}
.top-links {
background: #000;
a {
line-height: rem-calc($line-height * 1.5);
}
}
.admin-top-bar {
background: #fff;
}
.top-bar {
background: #fff !important;
border-bottom: 1px solid #eee;
color: #000;
height: auto;
padding-top: $line-height / 2;
@include breakpoint(small only) {
.top-bar-left ul {
display: inline-block;
}
.top-bar-right {
.submenu {
border: 0;
display: block;
margin-top: 0;
position: initial;
width: 100%;
}
.is-active {
font-weight: normal;
text-decoration: none;
}
.is-submenu-item {
padding: $line-height / 2 0;
}
a {
font-weight: normal !important;
}
}
[class^="icon-"] {
display: none;
}
}
[class^="icon-"] {
font-size: $base-font-size;
}
}
.menu .menu-text {
h1 {
margin-top: $line-height / 2;
margin-bottom: 0;
@include breakpoint(medium) {
margin-left: $line-height / 2;
margin-top: 0;
}
small {
color: #000;
text-transform: uppercase;
}
}
a {
color: #000 !important;
line-height: $line-height !important;
@include breakpoint(medium) {
line-height: $line-height !important;
}
}
}
.top-bar .menu > li {
@include breakpoint(medium) {
height: auto !important;
}
a {
color: #000 !important;
}
}
.title-bar {
color: #000;
position: absolute;
right: 12px;
}
.notifications.unread-notifications::after {
color: $admin-color;
}
.dropdown.menu > .is-dropdown-submenu-parent > a::after {
border-color: #000 transparent transparent;
}
.fieldset {
select {
height: $line-height * 2;
}
[type="text"] {
border-radius: 0;
margin-bottom: 0 !important;
}
}
th,
td {
text-align: left;
&.text-center {
text-align: center;
}
&.text-right {
padding-right: $line-height;
text-align: right;
}
&.with-button {
line-height: $line-height * 2;
.button {
@include brand-text;
background: #fff;
}
}
}
table {
caption {
@include element-invisible;
}
thead {
&,
tr {
border: 0;
}
th:first-of-type {
border-top-left-radius: rem-calc(8);
}
th:last-of-type {
border-top-right-radius: rem-calc(8);
}
}
th {
background: $table-header;
color: $admin-text;
padding: $line-height / 2;
label {
color: $white;
}
a {
color: inherit;
white-space: nowrap;
}
}
tr {
border: $table-border;
&:hover {
background: #f3f6f7;
}
}
.break {
word-break: break-word;
}
&.fixed {
table-layout: fixed;
}
[type="submit"] ~ a {
margin-left: $line-height / 2;
}
[type="checkbox"] {
margin-bottom: 0;
vertical-align: middle;
}
}
hr {
max-width: none;
}
form {
.input-group-label {
height: $line-height * 2;
}
.checkbox,
.radio {
font-weight: bold;
}
select {
height: $input-height;
}
[type]:not([type="button"], [type=checkbox], [type=file], [type=radio], [type=submit]),
select {
background-color: $white;
border: $admin-border;
border-radius: rem-calc(6);
box-shadow: none;
}
}
.form-label {
font-weight: bold;
margin-bottom: 0;
}
.menu.simple,
.order-links {
margin-bottom: $line-height / 2;
h2 {
font-weight: bold;
margin-bottom: $line-height / 3;
}
.is-active {
border-bottom: 2px solid $admin-color;
color: $admin-color;
font-weight: bold;
}
}
.order-links {
margin-bottom: $line-height;
}
.tabs-panel {
padding-left: 0;
padding-right: 0;
}
.accordion-title {
font-size: $base-font-size;
}
.button.secondary {
margin-right: rem-calc(12);
}
.admin-content {
.proposal-form {
padding-top: 0;
}
}
.is-featured {
margin-top: rem-calc(36);
}
}
.for-print-only {
display: none;
}
@include breakpoint(medium) {
tr {
.on-hover-block {
display: none;
}
&:hover .on-hover-block {
display: block;
margin: 0;
margin-top: $line-height / 2;
width: 100%;
}
}
}
@include breakpoint(medium) {
tr {
.on-hover {
display: none;
}
&:hover .on-hover {
display: inline;
}
}
}
.input-group {
.input-group-button {
padding-bottom: rem-calc(16);
vertical-align: top;
}
}
.sortable thead th:hover {
text-decoration: underline;
cursor: pointer;
}
.no-margin-bottom {
margin-bottom: 0 !important;
}
.enabled {
color: $color-success;
}
.disabled {
color: $text-medium;
}
.icon-sortable {
font-family: "Font Awesome 5 Free";
font-size: $small-font-size;
position: relative;
&::before,
&::after {
left: 6px;
opacity: 0.5;
position: absolute;
}
&::before {
content: "\f0d8";
bottom: 0;
}
&::after {
content: "\f0d7";
top: 0;
}
&.asc {
&::after {
opacity: 1;
}
}
&.desc {
&::before {
opacity: 1;
}
}
}
code {
word-break: break-all;
}
.content-type {
white-space: nowrap;
padding-right: $line-height;
label {
margin-left: 0 !important;
}
}
// 02. Sidebar
// -----------
// See admin/menu.scss
// 03. List elements
// -----------------
.delete {
border-bottom: 1px dotted #cf2a0e;
color: $delete;
font-size: $small-font-size;
&:hover,
&:active,
&:focus {
border-bottom: 1px dotted #fff;
color: #cf2a0e;
}
}
[class^="icon-"].delete {
border: 0;
font-size: $base-font-size;
}
.verified {
color: $check;
a {
border-bottom: 1px dotted $check;
color: $check;
font-size: rem-calc(12);
}
}
.archived {
color: $text-medium;
font-size: rem-calc(12);
}
.ignored {
color: $text-medium;
font-size: rem-calc(12);
}
.rejected {
color: $delete;
}
.date {
color: $text-medium;
font-size: rem-calc(12);
font-style: italic;
}
.official {
background-color: #e7e7e7;
border-radius: rem-calc(3);
font-weight: normal;
padding: rem-calc(6) rem-calc(12);
}
.button.small.success {
margin-left: rem-calc(12);
&.no-margin {
margin-left: 0;
}
}
.moderation-description {
max-height: rem-calc(65);
overflow: hidden;
max-width: rem-calc(700);
&:hover {
max-height: rem-calc(1000);
transition: max-height 0.9s;
}
}
// 04. Stats
// ---------
.stats {
background: #fff;
}
.stats-numbers {
p {
color: $text-medium;
font-size: rem-calc(13);
padding: rem-calc(6);
text-transform: uppercase;
&.featured {
background: $info-bg;
border: 1px solid $info-border;
font-weight: bold;
}
.number {
color: $text;
font-size: rem-calc(30);
font-weight: bold;
}
}
}
// 05. Management
// --------------
.user-permissions {
ul {
list-style-type: none;
margin-left: 0;
}
li {
font-size: rem-calc(14);
margin-bottom: rem-calc(12);
span {
color: $text-medium;
font-size: rem-calc(12);
}
.icon-check {
color: $check;
}
.icon-x {
color: $delete;
}
}
}
.account-info,
.login-as {
background-color: $highlight;
border-radius: rem-calc(3);
font-size: rem-calc(16);
font-weight: normal;
margin-bottom: $line-height;
padding: $line-height / 2;
strong {
font-size: rem-calc(18);
}
}
.extra-info {
background: #fafafa;
border-bottom-left-radius: rem-calc(6);
border-bottom-right-radius: rem-calc(6);
border-top: 2px solid #000;
font-size: $small-font-size;
padding: $line-height / 2;
}
.admin-budget-investment-info {
background: $highlight-soft;
border: 2px solid $highlight;
border-radius: rem-calc(4);
margin-bottom: $line-height;
padding: $line-height / 2;
p {
font-size: $small-font-size;
margin-bottom: 0;
}
}
.admin {
.investment-projects-list.medium-9 {
width: 100%;
}
}
.investment-projects-summary {
th,
td {
text-align: center;
&:first-child {
font-weight: bold;
text-align: left;
}
&:last-child {
font-weight: bold;
}
}
tr {
&:nth-child(even) td:last-child {
background: $success-border;
}
&:nth-child(odd) td:last-child {
background: $success-bg;
}
}
}
.admin-content > header {
align-items: flex-start;
display: flex;
flex-wrap: wrap;
a,
button {
@include regular-button;
margin-left: auto;
}
}
.admin-content .select-geozone,
.admin-content .select-heading {
a {
color: $text;
display: block;
&.is-active {
@include brand-text;
font-weight: bold;
text-decoration: underline;
}
}
}
.investment-projects-summary {
.total-price {
white-space: nowrap;
}
}
.admin {
.geozone {
background: #ececec;
border-radius: rem-calc(6);
color: $text;
display: inline-block;
font-size: $small-font-size;
margin-bottom: $line-height / 3;
padding: $line-height / 4 $line-height / 3;
text-decoration: none;
&:hover {
background: #e0e0e0;
}
}
}
.management-list {
max-width: rem-calc(1200);
}
// 06. Polls
// -----------------
.count-error {
background: $alert-bg !important;
color: $color-alert;
font-weight: bold;
}
table {
.callout {
height: $line-height * 2;
line-height: $line-height * 2;
margin: 0;
padding: 0 $line-height / 2;
}
}
// 07. Legislation
// --------------
// Markdown Editor
// ---------------
.markdown-editor {
background-color: #fff;
.markdown-area,
.markdown-preview {
display: none;
}
}
.markdown-editor .markdown-preview {
overflow-y: auto;
height: 15em;
}
.markdown-editor textarea {
height: 15em;
}
.markdown-editor.fullscreen {
z-index: 9999;
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
}
.markdown-editor.fullscreen .markdown-preview {
height: 99%;
}
.edit-legislation-draft-version .row {
margin-bottom: 2rem;
}
.legislation-admin {
.menu .is-active > a {
background: none;
}
}
.legislation-process-save {
@include breakpoint(medium) {
float: right;
}
}
.legislation-question-delete {
@include breakpoint(medium) {
text-align: right;
}
}
// 08. CMS
// --------------
.cms-page-list {
[class^="icon-"] {
padding-right: $menu-icon-spacing;
vertical-align: middle;
}
}
.legislation-process-edit {
.edit-legislation-process {
small {
color: $text-medium;
}
.legislation-process-start,
.legislation-process-end {
@include breakpoint(medium) {
line-height: 3rem;
}
}
.legislation-process-end {
@include breakpoint(medium) {
text-align: right;
}
}
}
}
.legislation-draft-versions-index {
.legislation-process-question,
.legislation-process-version {
@include breakpoint(medium) {
text-align: right;
}
}
table tr td {
padding: 0.25rem 0.375rem;
}
}
.legislation-questions-form {
[type]:not([type="submit"]):not([type="file"]):not([type="checkbox"]):not([type="radio"]) {
margin-bottom: 0;
@include breakpoint(medium) {
margin-bottom: 1rem;
}
}
input::placeholder {
font-style: italic;
}
.legislation-questions-answers {
margin-bottom: 1rem;
}
}
.field {
margin-bottom: 1rem;
@include breakpoint(medium) {
margin-bottom: 0;
}
a {
line-height: 3rem;
color: $delete;
span {
text-decoration: underline;
}
.icon-x {
vertical-align: sub;
text-decoration: none;
line-height: 0;
}
&:active,
&:focus,
&:hover {
text-decoration: none;
}
}
}
.fullscreen-container {
a {
line-height: 8rem;
&:active,
&:focus,
&:hover {
text-decoration: none;
}
}
}
.fullscreen {
.fullscreen-container {
a {
line-height: 3rem;
@include breakpoint(medium) {
float: right;
}
}
.markdown-editor-header {
vertical-align: top;
display: inline-block;
color: $white;
@include breakpoint(medium) {
line-height: 3rem;
}
}
.truncate {
@include breakpoint(medium) {
width: 40vw;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.markdown-editor-buttons {
display: block;
@include breakpoint(medium) {
display: inline-block;
float: right;
padding-left: 1rem;
}
}
input {
font-size: $small-font-size;
padding: 0.5em 1em;
margin-left: 0;
margin-bottom: 0;
margin-top: 1rem;
@include breakpoint(medium) {
margin: 0.5rem;
}
}
a {
color: $white;
}
}
}
.legislation-draft-versions-form {
.legislation-process-version {
@include breakpoint(medium) {
text-align: right;
}
}
.control {
cursor: pointer;
margin-bottom: 1rem;
small {
display: block;
margin-top: -1rem;
color: $text-medium;
@include breakpoint(medium) {
margin-left: 0.25rem;
display: inline-block;
margin-top: 0;
}
}
}
.fullscreen-container {
text-align: center;
background: #ccdbe6;
.markdown-editor-header,
.markdown-editor-buttons {
display: none;
}
span {
text-decoration: none;
font-size: $small-font-size;
}
.icon-expand {
margin-left: 0.25rem;
vertical-align: sub;
text-decoration: none;
line-height: 0;
}
}
.legislation-draft-version-body {
font-family: $font-family-serif;
background: #f5f5f5;
height: 16em;
&:focus {
border: 1px solid #cacaca;
box-shadow: inset 0 1px 2px rgba(34, 34, 34, 0.1);
}
}
.markdown-preview {
font-family: $font-family-serif;
border: 1px solid #cacaca;
margin-bottom: 2rem;
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: $font-family-serif !important;
font-size: 1rem;
line-height: 1.625rem;
margin-bottom: 0;
}
p {
font-size: 1rem;
line-height: 1.625rem;
}
}
.fullscreen {
.markdown-area,
.markdown-preview {
display: block;
}
.column {
padding: 0;
}
.fullscreen-container {
text-align: left;
background: $admin-color;
padding: 0.5rem 1rem;
margin-bottom: 0;
}
.legislation-draft-version-body {
border-radius: 0;
padding: 1rem;
border: 0;
@include breakpoint(medium) {
padding: 1rem 2rem;
}
}
.markdown-preview {
padding: 1rem;
border: 0;
@include breakpoint(medium) {
padding: 1rem 2rem;
}
}
}
}
.legislation-draft-version-body {
&:focus {
border: 0;
}
}
// 09. Map
// --------------
.map {
width: 100%;
height: 350px;
.map-marker {
visibility: visible;
position: absolute;
left: 50%;
top: 50%;
margin-top: -5px;
.map-icon {
width: 30px;
height: 30px;
border-radius: 50% 50% 50% 0;
background: #00cae9;
transform: rotate(-45deg);
}
.map-icon::after {
content: "";
width: 14px;
height: 14px;
margin: 8px 0 0 8px;
background: #fff;
position: absolute;
border-radius: 50%;
}
}
.map-attributtion {
visibility: visible;
height: auto;
}
}
.map-marker {
visibility: hidden;
}
.map-attributtion {
visibility: hidden;
height: 0;
}
// 10. Budgets
// -----------------
.advanced-filters {
margin: $line-height 0;
@include breakpoint(medium) {
margin: $line-height / 2 0 0;
}
}
.advanced-filters-content {
background: $highlight;
clear: both;
padding: $line-height / 2;
margin: $line-height 0;
.filter {
display: inline-block;
margin: 0 $line-height / 2;
label {
font-weight: normal;
margin: 0;
}
}
.button {
margin-top: $line-height / 2;
}
}
.columns-selector {
[class^="icon-"] {
vertical-align: middle;
}
&[aria-expanded='false'] {
@include hollow-button;
+ .columns-selector-wrapper {
display: none;
}
}
&[aria-expanded='true'] {
@include regular-button;
}
}
.columns-selector-wrapper {
background: $light-gray;
padding: 2rem;
border-radius: 10px;
margin-bottom: 1rem;
.column-selector-item {
display: inline-block;
&.hidden {
display: none;
}
label {
font-size: $base-font-size;
line-height: 1.5rem;
}
}
}
.column-selectable {
.hidden {
display: none;
}
}
// 11. Newsletters
// -----------------
.admin .newsletter-body-content {
table,
tbody,
tr,
th,
td {
border: 0;
&:nth-child(even),
&:nth-child(even) td:last-child,
&:nth-child(odd) td:last-child,
&:hover {
background: none;
}
}
}