mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Merge remote-tracking branch 'origin/10190_fix_select_icon_and_firefox'
This commit is contained in:
commit
4acf6b0eee
@ -1,7 +1,7 @@
|
|||||||
import React from 'react';
|
import React from "react";
|
||||||
import { NavModel, NavModelItem } from '../../nav_model_srv';
|
import { NavModel, NavModelItem } from "../../nav_model_srv";
|
||||||
import classNames from 'classnames';
|
import classNames from "classnames";
|
||||||
import appEvents from 'app/core/app_events';
|
import appEvents from "app/core/app_events";
|
||||||
|
|
||||||
export interface IProps {
|
export interface IProps {
|
||||||
model: NavModel;
|
model: NavModel;
|
||||||
@ -9,12 +9,12 @@ export interface IProps {
|
|||||||
|
|
||||||
function TabItem(tab: NavModelItem) {
|
function TabItem(tab: NavModelItem) {
|
||||||
if (tab.hideFromTabs) {
|
if (tab.hideFromTabs) {
|
||||||
return (null);
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
let tabClasses = classNames({
|
let tabClasses = classNames({
|
||||||
'gf-tabs-link': true,
|
"gf-tabs-link": true,
|
||||||
active: tab.active,
|
active: tab.active
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -28,8 +28,9 @@ function TabItem(tab: NavModelItem) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function SelectOption(navItem: NavModelItem) {
|
function SelectOption(navItem: NavModelItem) {
|
||||||
if (navItem.hideFromTabs) { // TODO: Rename hideFromTabs => hideFromNav
|
if (navItem.hideFromTabs) {
|
||||||
return (null);
|
// TODO: Rename hideFromTabs => hideFromNav
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -39,14 +40,22 @@ function SelectOption(navItem: NavModelItem) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function Navigation({main}: {main: NavModelItem}) {
|
function Navigation({ main }: { main: NavModelItem }) {
|
||||||
return (<nav>
|
return (
|
||||||
<SelectNav customCss="page-header__select_nav" main={main} />
|
<nav>
|
||||||
<Tabs customCss="page-header__tabs" main={main} />
|
<SelectNav customCss="page-header__select-nav" main={main} />
|
||||||
</nav>);
|
<Tabs customCss="page-header__tabs" main={main} />
|
||||||
|
</nav>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function SelectNav({main, customCss}: {main: NavModelItem, customCss: string}) {
|
function SelectNav({
|
||||||
|
main,
|
||||||
|
customCss
|
||||||
|
}: {
|
||||||
|
main: NavModelItem;
|
||||||
|
customCss: string;
|
||||||
|
}) {
|
||||||
const defaultSelectedItem = main.children.find(navItem => {
|
const defaultSelectedItem = main.children.find(navItem => {
|
||||||
return navItem.active === true;
|
return navItem.active === true;
|
||||||
});
|
});
|
||||||
@ -54,17 +63,32 @@ function SelectNav({main, customCss}: {main: NavModelItem, customCss: string}) {
|
|||||||
const gotoUrl = evt => {
|
const gotoUrl = evt => {
|
||||||
var element = evt.target;
|
var element = evt.target;
|
||||||
var url = element.options[element.selectedIndex].value;
|
var url = element.options[element.selectedIndex].value;
|
||||||
appEvents.emit('location-change', {href: url});
|
appEvents.emit("location-change", { href: url });
|
||||||
};
|
};
|
||||||
|
|
||||||
return (<select
|
return (
|
||||||
className={`gf-select-nav ${customCss}`}
|
<div className={`gf-form-select-wrapper width-20 ${customCss}`}>
|
||||||
defaultValue={defaultSelectedItem.url}
|
<label
|
||||||
onChange={gotoUrl}>{main.children.map(SelectOption)}</select>);
|
className={`gf-form-select-icon ${defaultSelectedItem.icon}`}
|
||||||
|
htmlFor="page-header-select-nav"
|
||||||
|
/>
|
||||||
|
{/* Label to make it clickable */}
|
||||||
|
<select
|
||||||
|
className="gf-select-nav gf-form-input"
|
||||||
|
defaultValue={defaultSelectedItem.url}
|
||||||
|
onChange={gotoUrl}
|
||||||
|
id="page-header-select-nav"
|
||||||
|
>
|
||||||
|
{main.children.map(SelectOption)}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function Tabs({main, customCss}: {main: NavModelItem, customCss: string}) {
|
function Tabs({ main, customCss }: { main: NavModelItem; customCss: string }) {
|
||||||
return <ul className={`gf-tabs ${customCss}`}>{main.children.map(TabItem)}</ul>;
|
return (
|
||||||
|
<ul className={`gf-tabs ${customCss}`}>{main.children.map(TabItem)}</ul>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class PageHeader extends React.Component<IProps, any> {
|
export default class PageHeader extends React.Component<IProps, any> {
|
||||||
@ -77,7 +101,11 @@ export default class PageHeader extends React.Component<IProps, any> {
|
|||||||
for (let i = 0; i < breadcrumbs.length; i++) {
|
for (let i = 0; i < breadcrumbs.length; i++) {
|
||||||
const bc = breadcrumbs[i];
|
const bc = breadcrumbs[i];
|
||||||
if (bc.url) {
|
if (bc.url) {
|
||||||
breadcrumbsResult.push(<a className="text-link" key={i} href={bc.url}>{bc.title}</a>);
|
breadcrumbsResult.push(
|
||||||
|
<a className="text-link" key={i} href={bc.url}>
|
||||||
|
{bc.title}
|
||||||
|
</a>
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
breadcrumbsResult.push(<span key={i}> / {bc.title}</span>);
|
breadcrumbsResult.push(<span key={i}> / {bc.title}</span>);
|
||||||
}
|
}
|
||||||
@ -95,12 +123,15 @@ export default class PageHeader extends React.Component<IProps, any> {
|
|||||||
|
|
||||||
<div className="page-header__info-block">
|
<div className="page-header__info-block">
|
||||||
{main.text && <h1 className="page-header__title">{main.text}</h1>}
|
{main.text && <h1 className="page-header__title">{main.text}</h1>}
|
||||||
{main.breadcrumbs && main.breadcrumbs.length > 0 && (
|
{main.breadcrumbs &&
|
||||||
<h1 className="page-header__title">
|
main.breadcrumbs.length > 0 && (
|
||||||
{this.renderBreadcrumb(main.breadcrumbs)}
|
<h1 className="page-header__title">
|
||||||
</h1>)
|
{this.renderBreadcrumb(main.breadcrumbs)}
|
||||||
}
|
</h1>
|
||||||
{main.subTitle && <div className="page-header__sub-title">{main.subTitle}</div>}
|
)}
|
||||||
|
{main.subTitle && (
|
||||||
|
<div className="page-header__sub-title">{main.subTitle}</div>
|
||||||
|
)}
|
||||||
{main.subType && (
|
{main.subType && (
|
||||||
<div className="page-header__stamps">
|
<div className="page-header__stamps">
|
||||||
<i className={main.subType.icon} />
|
<i className={main.subType.icon} />
|
||||||
|
@ -60,20 +60,24 @@
|
|||||||
switch-class="gf-form-switch--transparent gf-form-switch--search-result-filter-row__checkbox"
|
switch-class="gf-form-switch--transparent gf-form-switch--search-result-filter-row__checkbox"
|
||||||
/>
|
/>
|
||||||
<div class="search-results-filter-row__filters">
|
<div class="search-results-filter-row__filters">
|
||||||
<select
|
<div class="gf-form-select-wrapper">
|
||||||
class="search-results-filter-row__filters-item gf-form-input"
|
<select
|
||||||
ng-model="ctrl.selectedStarredFilter"
|
class="search-results-filter-row__filters-item gf-form-input"
|
||||||
ng-options="t.text disable when t.disabled for t in ctrl.starredFilterOptions"
|
ng-model="ctrl.selectedStarredFilter"
|
||||||
ng-change="ctrl.onStarredFilterChange()"
|
ng-options="t.text disable when t.disabled for t in ctrl.starredFilterOptions"
|
||||||
ng-show="!(ctrl.canMove || ctrl.canDelete)"
|
ng-change="ctrl.onStarredFilterChange()"
|
||||||
/>
|
ng-show="!(ctrl.canMove || ctrl.canDelete)"
|
||||||
<select
|
/>
|
||||||
class="search-results-filter-row__filters-item gf-form-input"
|
</div>
|
||||||
ng-model="ctrl.selectedTagFilter"
|
<div class="gf-form-select-wrapper">
|
||||||
ng-options="t.term disable when t.disabled for t in ctrl.tagFilterOptions"
|
<select
|
||||||
ng-change="ctrl.onTagFilterChange()"
|
class="search-results-filter-row__filters-item gf-form-input"
|
||||||
ng-show="!(ctrl.canMove || ctrl.canDelete)"
|
ng-model="ctrl.selectedTagFilter"
|
||||||
/>
|
ng-options="t.term disable when t.disabled for t in ctrl.tagFilterOptions"
|
||||||
|
ng-change="ctrl.onTagFilterChange()"
|
||||||
|
ng-show="!(ctrl.canMove || ctrl.canDelete)"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
<div class="gf-form-button-row" ng-show="ctrl.canMove || ctrl.canDelete">
|
<div class="gf-form-button-row" ng-show="ctrl.canMove || ctrl.canDelete">
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="btn gf-form-button btn-inverse"
|
class="btn gf-form-button btn-inverse"
|
||||||
|
@ -111,7 +111,7 @@ $input-border: 1px solid $input-border-color;
|
|||||||
}
|
}
|
||||||
|
|
||||||
&:disabled {
|
&:disabled {
|
||||||
color: $text-color-weak
|
color: $text-color-weak;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,12 +248,30 @@ $input-border: 1px solid $input-border-color;
|
|||||||
position: relative;
|
position: relative;
|
||||||
background-color: $input-bg;
|
background-color: $input-bg;
|
||||||
|
|
||||||
|
.gf-form-select-icon {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
left: $input-padding-x;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -7px;
|
||||||
|
|
||||||
|
& + .gf-form-input {
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
padding-left: $input-padding-x*3;
|
||||||
|
background-color: transparent;
|
||||||
|
|
||||||
|
option {
|
||||||
|
// Firefox
|
||||||
|
color: $black;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
select.gf-form-input {
|
select.gf-form-input {
|
||||||
text-indent: 0.01px;
|
text-indent: 0.01px;
|
||||||
text-overflow: "";
|
text-overflow: "";
|
||||||
padding-right: $input-padding-x*4;
|
padding-right: $input-padding-x*3;
|
||||||
-webkit-appearance: none;
|
|
||||||
-moz-appearance: menulist-text; // was set to "window" and caused odd display on windos and linux.
|
|
||||||
appearance: none;
|
appearance: none;
|
||||||
|
|
||||||
&:-moz-focusring {
|
&:-moz-focusring {
|
||||||
|
@ -69,8 +69,9 @@
|
|||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
|
|
||||||
.page-header__select_nav {
|
.page-header__select-nav {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
|
max-width: 100%;
|
||||||
|
|
||||||
@include media-breakpoint-up(lg) {
|
@include media-breakpoint-up(lg) {
|
||||||
display: none;
|
display: none;
|
||||||
|
Loading…
Reference in New Issue
Block a user