diff --git a/build/build-modules-js/compilecss.es6.js b/build/build-modules-js/compilecss.es6.js index cfdcce30cb7fb..858bfea963d38 100644 --- a/build/build-modules-js/compilecss.es6.js +++ b/build/build-modules-js/compilecss.es6.js @@ -44,6 +44,7 @@ module.exports.compile = (options, path) => { `${RootPath}/templates/cassiopeia/scss/offline.scss`, `${RootPath}/templates/cassiopeia/scss/template.scss`, `${RootPath}/templates/cassiopeia/scss/template-rtl.scss`, + `${RootPath}/templates/cassiopeia/scss/system/searchtools/searchtools.scss`, `${RootPath}/administrator/templates/atum/scss/template.scss`, `${RootPath}/administrator/templates/atum/scss/template-rtl.scss`, `${RootPath}/administrator/templates/atum/scss/system/searchtools/searchtools.scss`, diff --git a/language/en-GB/joomla.ini b/language/en-GB/joomla.ini index 4100a991e56fd..768a61e74685e 100644 --- a/language/en-GB/joomla.ini +++ b/language/en-GB/joomla.ini @@ -458,6 +458,9 @@ POSTGRESQL="PostgreSQL" SQLITE="SQLite" ; Search tools +JFILTER_OPTIONS="Filter Options" JSEARCH_TOOLS="Search Tools" JSEARCH_TOOLS_DESC="Filter the list items." JSEARCH_TOOLS_ORDERING="Order by:" +JTABLE_OPTIONS="Table Options" +JTABLE_OPTIONS_ORDERING="Order by:" diff --git a/templates/cassiopeia/images/select-bg-active-rtl.svg b/templates/cassiopeia/images/select-bg-active-rtl.svg new file mode 100644 index 0000000000000..eae47aa83ead6 --- /dev/null +++ b/templates/cassiopeia/images/select-bg-active-rtl.svg @@ -0,0 +1 @@ + diff --git a/templates/cassiopeia/images/select-bg-active.svg b/templates/cassiopeia/images/select-bg-active.svg new file mode 100644 index 0000000000000..19cd7866984c2 --- /dev/null +++ b/templates/cassiopeia/images/select-bg-active.svg @@ -0,0 +1 @@ + diff --git a/templates/cassiopeia/images/select-bg-rtl.svg b/templates/cassiopeia/images/select-bg-rtl.svg new file mode 100644 index 0000000000000..a1ae9a3e60bb1 --- /dev/null +++ b/templates/cassiopeia/images/select-bg-rtl.svg @@ -0,0 +1 @@ + diff --git a/templates/cassiopeia/images/select-bg.svg b/templates/cassiopeia/images/select-bg.svg new file mode 100644 index 0000000000000..e2fefccf30242 --- /dev/null +++ b/templates/cassiopeia/images/select-bg.svg @@ -0,0 +1 @@ + diff --git a/templates/cassiopeia/joomla.asset.json b/templates/cassiopeia/joomla.asset.json index cb880f9c1622f..b7e50d6493c91 100644 --- a/templates/cassiopeia/joomla.asset.json +++ b/templates/cassiopeia/joomla.asset.json @@ -93,6 +93,11 @@ "template.cassiopeia.rtl#style", "template.cassiopeia#script" ] + }, + { + "name": "searchtools", + "type": "style", + "uri": "system/searchtools/searchtools.min.css" } ] } diff --git a/templates/cassiopeia/scss/_variables.scss b/templates/cassiopeia/scss/_variables.scss index 7167f0dd4f9aa..8187f332e3b72 100644 --- a/templates/cassiopeia/scss/_variables.scss +++ b/templates/cassiopeia/scss/_variables.scss @@ -137,6 +137,18 @@ $list-group-bg: $white-offset; // Custom form $custom-select-bg: $white-offset; +// Custom form +$custom-select-indicator-padding: 3rem; +$custom-select-bg-size: 116rem; +$custom-select-indicator: url(../images/select-bg.svg); +$custom-select-indicator-rtl: url(../images/select-bg-rtl.svg); +$custom-select-indicator-active: url(../../../images/select-bg.svg); +$custom-select-indicator-active-rtl: url(../../../images/select-bg-rtl.svg); +$custom-select-background: $custom-select-indicator no-repeat right center / $custom-select-bg-size; // Used so we can have multiple background elements (e.g., arrow and feedback icon) +$custom-select-background-rtl: $custom-select-indicator-rtl no-repeat left center / $custom-select-bg-size; // Used so we can have multiple background elements (e.g., arrow and feedback icon) +$custom-select-bg-size-sm: 75rem; +$custom-select-multiple-padding-y: .3rem; + // Modals $modal-header-height: 46px; @@ -146,3 +158,18 @@ $badge-default-bg: #5e7082; // Gutter $grid-gutter-width: 15px !default; $cassiopeia-grid-gutter: $grid-gutter-width; + +// Z-Index list +$zindex-negative: -1; +$zindex-actions: auto; +$zindex-toolbar: 1000; +$zindex-sidebar: 1010; +$zindex-header: 1020; +$zindex-alerts: 1030; +$zindex-modal-backdrop: 1040; +$zindex-modal: 1050; +$zindex-popover: 1060; +$zindex-tooltip: 1070; +$zindex-mobile-bottom: 8000; +$zindex-mobile-toggle: 9999; +$zindex-mobile-menu: 9000; diff --git a/templates/cassiopeia/scss/blocks/_form.scss b/templates/cassiopeia/scss/blocks/_form.scss index 8ee3b70648a66..c581ca7762740 100644 --- a/templates/cassiopeia/scss/blocks/_form.scss +++ b/templates/cassiopeia/scss/blocks/_form.scss @@ -62,3 +62,38 @@ td .form-control { .form-control-feedback { display: block; } + +// set up hidden tooltip +[role="tooltip"]:not(.show) { + z-index: $zindex-tooltip; + display: none; + max-width: 100%; + padding: .25em; + margin: .25em; + color: $white; + background: $black; + + [dir=ltr] & { + text-align: left; + } + + [dir=rtl] & { + text-align: right; + } +} + +// reveal associated tooltip on focus +:focus + [role="tooltip"], +:hover + [role="tooltip"] { + position: absolute; + display: block; +} + +[id="filter[search]-desc"] { + bottom: 100%; +} + +.container-popup [id="filter[search]-desc"] { + top: 100%; + bottom: auto; +} diff --git a/templates/cassiopeia/scss/system/searchtools/searchtools.scss b/templates/cassiopeia/scss/system/searchtools/searchtools.scss new file mode 100644 index 0000000000000..9287865f75149 --- /dev/null +++ b/templates/cassiopeia/scss/system/searchtools/searchtools.scss @@ -0,0 +1,304 @@ +// Search tools +@import "../../variables"; +@import "../../../../../media/vendor/bootstrap/scss/variables"; +@import "../../../../../media/vendor/bootstrap/scss/mixins"; + + +// Media queries +@media (max-width: 480px) { + .js-stools .js-stools-container-filters { + display: block; + } + + .js-stools .js-stools-container-filters .btn-group { + display: block; + } + + .js-stools .js-stools-container-filters .btn-wrapper { + width: 100%; + } + + .js-stools .js-stools-container-bar { + margin-top: 20px; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + + .js-stools .js-stools-container-selector, + .js-stools .js-stools-container-bar, + .js-stools .js-stools-container-list { + display: block; + } +} + +.js-stools { + position: relative; + width: 100%; + padding: .25rem 0 0; + margin: 1rem 0 .5rem; + + > div { + margin-bottom: 1rem; + } + + button { + margin-top: 0; + } + + .js-stools-container-filters { + display: none; + flex-direction: row; + flex-wrap: wrap; + width: 100%; + padding: 1rem .5rem .5rem; + margin-top: .5rem; + margin-bottom: 1rem; + background-color: $white; + border-radius: 0 0 0 $border-radius; + + joomla-field-fancy-select .choices, + .custom-select { + min-width: 15rem; + } + + .chzn-container-single { + display: block; + + .chzn-single { + display: block; + font-size: 1rem; + } + } + } + + .js-stools-field-filter { + + margin: 0 .5rem .5rem; + + @include media-breakpoint-down(sm) { + width: 100%; + } + + .custom-select { + box-shadow: $input-box-shadow; + &.active { + //background: $custom-select-indicator-active no-repeat right center; + background-color: $custom-select-bg; + background-size: $custom-select-bg-size; + + [dir=rtl] & { + //background: $custom-select-indicator-active-rtl no-repeat left center; + background-color: $custom-select-bg; + } + } + + option { + font-size: .875rem; + color: $cassiopeia-template-color-dark; + background-color: var(--white); + } + } + } + + .js-stools-container-selector { + [dir=ltr] & { + float: left; + margin-right: .5rem; + } + + [dir=rtl] & { + float: right; + margin-right: 0; + margin-left: .5rem; + } + + @include media-breakpoint-down(sm) { + float: none !important; + width: 100%; + margin-right: 0; + } + + @include media-breakpoint-down(xs) { + [dir=ltr] & { + margin-right: 0; + } + + [dir=rtl] & { + margin-left: 0; + } + } + + .js-stools-field-selector { + @include media-breakpoint-down(sm) { + margin-right: 0; + + [dir=rtl] & { + margin-right: 0; + } + } + + @include media-breakpoint-down(xs) { + [dir=ltr] & { + margin-right: 0; + } + + [dir=rtl] & { + margin-left: 0; + } + } + } + } + + .js-stools-container-selector-first { + [dir=ltr] & { + margin-right: .5rem; + } + + [dir=rtl] & { + margin-left: .5rem; + } + + @include media-breakpoint-down(sm) { + float: none !important; + width: 100%; + margin-right: 0; + } + + @include media-breakpoint-down(xs) { + [dir=ltr] & { + margin-right: 0; + } + + [dir=rtl] & { + margin-left: 0; + } + } + + .js-stools-field-selector { + @include media-breakpoint-down(sm) { + max-width: 100%; + margin-right: 0; + + [dir=rtl] & { + margin-right: 0; + } + } + } + } + + .js-stools-container-list { + [dir=ltr] & { + float: right; + text-align: right; + } + + [dir=rtl] & { + float: left; + text-align: left; + } + } + + .chosen-container { + [dir=ltr] & { + text-align: right; + } + + [dir=rtl] & { + text-align: left; + } + } + + .js-stools-container-filters-visible { + display: flex; + } + + .chzn-container-single .chzn-single span { + overflow: visible; + } + + .js-stools-field-list, + .js-stools-field-filter { + display: inline-block; + } + + .js-stools-container-list .js-stools-field-list:last-child { + margin-right: 0; + } + + .js-stools-container-bar { + + .btn-toolbar { + justify-content: flex-end; + + .js-stools-btn-filter { + border: 1px solid var(--border); + } + + .js-stools-btn-clear { + color: $cassiopeia-template-color-dark; + background-color: $gray-400; + border: 1px solid $cassiopeia-border-color; + border-left: 1px solid $gray-100; + + [dir=rtl] & { + margin-right: -1px !important; + margin-left: 5px; + } + + @include media-breakpoint-down(sm) { + [dir=ltr] & { + margin-right: 0 !important; + } + + [dir=rtl] & { + margin-left: 0 !important; + } + } + + &.disabled, + &:disabled { + color: $white-offset; + cursor: not-allowed; + background-color:$cassiopeia-template-color-dark; + border-color: rgba($gray-500, .8); + opacity: 1; + } + } + + .js-stools-btn-filter { + border-right: 1px solid $cassiopeia-border-color; + + .fas { + margin-left: .25rem; + } + } + + .form-control { + height: auto; + } + } + + .js-stools-field-list { + margin-bottom: 0; + } + + .input-append { + margin-bottom: 0; + } + + .btn-primary .caret { + margin-top: 7px; + margin-bottom: 8px; + border-top: 0; + border-bottom: 4px solid #fff; + + } + } +} + +.js-stools-button-sort { + cursor: pointer; + background: none; + border: 0; +}